Восстановление ведомого устройства с использованием LVM
Вот метод, который мы используем для восстановления ведомых устройств MySQL с помощью Linux LVM. Это гарантирует стабильный снимок и требует минимального времени простоя вашего мастера.
Установите максимальный процент грязных страниц innodb равным нулю на главном сервере MySQL. Это заставит MySQL записать все страницы на диск, что значительно ускорит перезапуск.
set global innodb_max_dirty_pages_pct = 0;
Чтобы отслеживать количество грязных страниц, выполните команду
mysqladmin ext -i10 | grep dirty
Как только число перестанет уменьшаться, вы достигнете точки для продолжения. Затем сбросьте мастер, чтобы очистить старые журналы бункеров / журналы реле:
RESET MASTER;
Запустите lvdisplay, чтобы получить LV Path
lvdisplay
Результат будет выглядеть так
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
Завершите работу основной базы данных с помощью команды
service mysql stop
Затем сделайте снимок, mysql_snapshot будет новым именем логического тома. Если двоичные журналы находятся на диске с ОС, они также должны быть сняты.
lvcreate
Снова запустите мастер с помощью команды
service mysql start
Восстановить настройки грязных страниц по умолчанию
set global innodb_max_dirty_pages_pct = 75;
Снова запустите lvdisplay, чтобы убедиться, что снимок есть и виден
lvdisplay
Выход:
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
После завершения 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
-rw-rw
-rw-rw
-rw-rw
Здесь главный файл журнала - это файл с наибольшим номером в последовательности, а позиция журнала - это размер файла. Запишите эти значения:
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;
Убедитесь, что Slave IO запущен и нет ошибок подключения. Удачи!
BR, Юха Вехния
Я недавно написал об этом в своем блоге, который находится здесь ... Там есть еще несколько подробностей, но история та же.
http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html
--opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases