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

Как я могу создать подчиненную копию сервера MySQL, не останавливая главный?

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

Как я могу запустить репликацию сервера MySQL, не останавливая мастер?

простой вариант - если у вас небольшой объем данных

mysqldump --master-data -uyouruser -p.... -a > dump.sql

это заблокирует все таблицы и сгенерирует дамп с информацией о текущей позиции мастера. dump заблокирует все таблицы - вероятно, это не то, что вы хотите делать, когда у вас загруженный веб-сайт и 20 ГБ данных для сброса.

более продвинутый вариант. возьмите свои данные на раздел lvm и используйте снимок lvm. то есть в одной блокировке процесса все таблицы FLUSH TABLES WITH READ LOCK; ПОКАЗАТЬ СТАТУС МАСТЕРА; в другом процессе запустите синхронизацию несколько раз для хорошей оценки и создайте снимок lvm ваших журналов данных / innodb. сразу после создания снимка [у меня это занимает 2-3 секунды] разблокировать все таблицы.

теперь у вас есть согласованный моментальный снимок, и ваш sql-сервер все еще работает. смонтировать снимок и как можно скорее отправить его на другой сервер. там запустите mysql с этими данными, позвольте innodb восстановить все данные из своих журналов и запустить mysqldump, который выводит на подчиненное устройство.

запустить ведомое устройство, используя информацию из SHOW MASTER STATUS, которую вы запустили непосредственно перед созданием снимка LVM.

mylvmbackup делает именно это. прочитай об этом Вот.

FLUSH TABLES WITH READ LOCK на ведущем, скопируйте данные на ведомое (возможно, с периодическим SELECT NULL операции на клиенте, который обращается к мастеру, чтобы предотвратить потерю блокировок из-за тайм-аутов соединения), затем запустите репликацию на ведомом устройстве и UNLOCK TABLES на мастера.

Все указанные главные операции должны выполняться в рамках одного клиентского сеанса. Не пытайтесь выйти из него во время копирования.

Как упоминалось выше в pQd:

mysqldump --master-data -uyouruser -p.... -a > dump.sql

но почему бы не использовать ssh в машине для удаления и не передавать данные напрямую через ssh?

Пока не могу комментировать, а как насчет разницы между MyISAM и INNODB? Я не уверен, что вы можете просто сделать таблицы блокировок с помощью INNODB и ожидать хорошего снимка.