Назад | Перейти на главную страницу

Восстановить подчиненное устройство mysql с нуля

У меня есть настройка 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

Следить за этим:

  • Отключите ведомого и ведущего
  • Просто сбросьте все базы данных с ведомого
  • дамп данных из мастера с помощью одной транзакции
  • использовать дамп на рабе
  • переподключите ведущий и ведомый и дождитесь синхронизации