У меня есть настройка mysql master / slave. Этой ночью у меня были проблемы с мастером. Мне нужно было заново создать все базы данных, потому что они были повреждены.
Теперь я остановил свой подчиненный сервер mysql, но хочу запустить его снова и восстановить все с нуля. Есть ли способ сделать это? Без блокировки мастера ...
Я также считаю, что файл binlog должен быть сброшен. Так что опять все чисто.
Любые идеи?
если вы используете движок innodb на мастере - просто используйте mysqldump с --скип-лок-столы, - single-transaction и --master-data = 2 переключатели.
если ваш раб только логически поврежден - попробуйте pt-table-sync с опцией lock = 0
Вот пошаговая инструкция, как восстановить ведомое устройство MySQL из ведущего устройства с помощью снимков Linux LVM. Это идеальный метод, когда вы не можете позволить себе длительное время простоя для копирования двоичных файлов на ведомое устройство. Есть и другие способы сделать это, но я всегда сомневаюсь в устойчивости раба. Я беру свои резервные копии с ведомого устройства, поэтому мне абсолютно необходимо убедиться, что мои снимки всегда согласованы.
Установите максимальный процент грязных страниц innodb равным нулю. Это заставит MySQL записать все страницы на диск, что значительно ускорит перезапуск.
set global innodb_max_dirty_pages_pct = 0;
Чтобы отслеживать количество грязных страниц, выполните команду
mysqladmin ext -i10 | grep dirty
Как только число перестанет уменьшаться, вы достигнете точки для продолжения. Затем сбросьте мастер, чтобы очистить старые журналы бункеров / журналы реле:
RESET MASTER;
Запустите lvdisplay, чтобы получить LV Path
lvdisplay
Результат будет выглядеть так
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
Завершите работу основной базы данных с помощью команды
service mysql stop
Затем сделайте снимок, mysql_snapshot будет новым именем логического тома. Если двоичные журналы находятся на диске с ОС, они также должны быть сняты.
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
Снова запустите мастер с помощью команды
service mysql start
Восстановить настройки грязных страниц по умолчанию
set global innodb_max_dirty_pages_pct = 75;
Снова запустите lvdisplay, чтобы убедиться, что снимок есть и виден
lvdisplay
Вывод:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
Смонтировать снимок
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
Если у вас уже запущено подчиненное устройство MySQL, его необходимо остановить.
service mysql stop
Далее вам нужно очистить папку данных MySQL
cd /var/lib/mysql
rm -fr *
Вернуться к мастеру. Теперь выполните синхронизацию снимка с ведомым устройством MySQL.
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
После завершения rsync вы можете размонтировать и удалить снимок
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
Создайте пользователя репликации на главном сервере, если старый пользователь репликации не существует или пароль неизвестен
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
Убедитесь, что файлы данных / var / lib / mysql принадлежат пользователю mysql, в этом случае вы можете пропустить следующую команду:
chown -R mysql:mysql /var/lib/mysql
Далее запишите позицию бинлога
ls -laF | grep mysql-bin
Вы увидите что-то вроде
..
-rw-rw---- 1 mysql mysql 1073750329 Aug 28 03:33 mysql-bin.000017
-rw-rw---- 1 mysql mysql 1073741932 Aug 28 08:32 mysql-bin.000018
-rw-rw---- 1 mysql mysql 963333441 Aug 28 15:37 mysql-bin.000019
-rw-rw---- 1 mysql mysql 65657162 Aug 28 16:44 mysql-bin.000020
Здесь главный файл журнала - это файл с наибольшим номером в последовательности, а позиция журнала - это размер файла. Запишите эти значения:
master_log_file=mysql-bin.000020
master_log_post=65657162
Затем запустите подчиненный MySQL
service mysql start
Выполните команду изменения главного устройства на подчиненном устройстве, выполнив следующие действия:
CHANGE MASTER TO
master_host="10.0.0.12",
master_user="replication",
master_password="YourPass",
master_log_file="mysql-bin.000020",
master_log_pos=65657162;
Наконец запустить раб
SLAVE START;
Проверить статус ведомого:
SHOW SLAVE STATUS\G
Убедитесь, что Slave IO запущен и нет ошибок подключения. Удачи!
Полный текст моего сообщения в блоге можно найти по адресу:
http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html
Следить за этим: