Как настроить репликацию MySQL с минимальным временем простоя


12

По сути, у нас есть большая база данных MySQL, и мы собираемся выполнить репликацию на ведомое устройство (настройка главного подчиненного устройства). Ребята, у вас есть пошаговое руководство о том, как это сделать с минимальным временем простоя в базе данных? Резервное копирование базы данных и передача резервной копии на подчиненный сервер (даже через частную сеть) занимает около 40 минут. Довольно длительное время простоя.

Ответы:


15

Я предполагаю, что вы используете InnoDB в качестве механизма хранения. Если это так, вам нужно включить ведение журнала bin . Если это не сейчас, вам нужно перезапустить MySQL после изменения my.cnf. Это единственное время простоя, после которого вы можете получить дамп базы данных с позицией binlog, не блокируя базу данных:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

На основе этой резервной копии восстановите данные на ведомом устройстве. После этого вы можете следовать любому руководству по репликации MySQL и позволить ведомому устройству работать вместе с ведущим.


что произойдет, если некоторые таблицы не используют innodb? И будет ли вышеупомянутая резервная копия все еще действительной, если я использую --databases для вывода поднабора баз данных вместо -A?
Матье

если некоторые таблицы не используют innodb, резервная копия может быть несовместимой. см. здесь: stackoverflow.com/a/7461466/104398 ; резервная копия не будет содержать эти пропущенные базы данных. если вы настраиваете репликацию на основе такого резервного копирования и не фильтруете то, что реплицируется - ваша репликация прекратится, как только будет какая-то операция с пропущенными базами данных.
PQD

Хорошо, я преобразовал мои оставшиеся таблицы myisam в innodb и убедился, что только те базы данных, которые я хочу, реплицируются / резервируются.
Матье

3

чтобы начать репликацию, вам нужна согласованная копия вашей базы данных на подчиненном

ваши столы поддерживаются myisam или innodb? выяснить проблему

show table status

и посмотрите на колонку «Двигатель»

если все таблицы innodb, то вы можете установить нулевое время простоя с помощью mysqldump --single-транзакции и импортировать его в ведомое устройство

если таблицы myisam, то должно быть время простоя, так как вам нужно заблокировать таблицы для записи, пока они копируются. mysqlhotcopy - это инструмент, который поможет вам в этом.

В качестве альтернативы, если вы используете LVM (менеджер логических томов), вы можете остановить базу данных, сделать снимок LVM через несколько секунд и снова запустить базу данных. Затем вы можете сделать последовательную копию из снимка.


1

Для настройки ведомого вам необходимо сделать снимок данных и записать двоичную позицию журнала. Резервное копирование базы данных не должно вызывать простоев, хотя это приведет к снижению производительности, но в любом случае вы уже выполняете резервное копирование базы данных? Вы можете обнаружить, что резервная копия нуждается в блокировке некоторых таблиц, и это может вызвать блокировки в вашем приложении, действительно нужно посмотреть, как это реализовано для этого.

Можете ли вы сделать снимок диска? Это значительно уменьшит время простоя, если вы сможете сделать горячее резервное копирование.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.