Восстановление ведомого с использованием LVM
Вот метод, который мы используем для перестройки подчиненных MySQL с использованием Linux LVM. Это гарантирует постоянный моментальный снимок, требуя при этом минимального времени простоя на вашем мастере.
Установите на главном сервере MySQL значение innodb max грязных страниц в ноль. Это заставит 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
Завершите работу базы данных master с помощью команды
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 *
Вернуться к мастеру. Теперь rsync снимок к ведомому 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
Здесь главный файл журнала - это наивысший номер файла в последовательности, а позиция журнала bin - размер файла. Запишите эти значения:
* * 1068
Следующий запуск ведомого 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;
Убедитесь, что ведомый ввод-вывод запущен и нет ошибок соединения. Удачи!
BR, Juha Vehnia
Я недавно написал это в своем блоге, который можно найти здесь ... Здесь есть еще несколько деталей, но история такая же.
http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html