Я написал себе небольшой скрипт, который производит следующую команду оболочки.
echo "CHANGE MASTER TO MASTER_USER='slave_user';" | mysql -uroot -pXXX --host=SLAVE &&
echo "CHANGE MASTER TO MASTER_PASSWORD='slave_password';" | mysql -uroot -pXXX --host=SLAVE &&
echo "STOP SLAVE;" | mysql -uroot -pXXX --host=SLAVE &&
mysqldump -uroot -pXXX --host=MASTER --add-drop-database --master-data=1 --databases database1 database2 | mysql -uroot -pXXX --host=SLAVE &&
echo "START SLAVE;" | mysql -C -uroot -pXXX --host=SLAVE
Должна быть возможность запускаться как на ведомом, так и на ведущем. Однако я знаю, что преимущество сжатия с использованием -C
переключатель дается только при запуске на мастере.
Мой главный сервер настроен со следующими настройками (показано только то, что отличается от значения по умолчанию. Я использую сервер mysql версии 5.1.41.
[mysqld]
bind-address = 0.0.0.0
max_connections = 600
server-id = 1
log_bin = /media/mysql-ebs/log_bin/mysql-bin.log
binlog_do_db = database1
binlog_do_db = database2
datadir = /media/mysql-ebs/datadir
Мои ведомые устройства настроены следующим образом:
server-id = UNIQUE-ID
replicate-do-db = database1
replicate-do-db = database2
На сервере работает MyIsam, а также таблицы InnoDB.
Мои вопросы:
Меня только что осенило.
Это ваш исходный сценарий оболочки
echo "ИЗМЕНИТЬ МАСТЕРА НА MASTER_USER = 'slave_user';" | mysql -uroot -pXXX --host = SLAVE &&
echo "ИЗМЕНИТЬ МАСТЕРА НА МАСТЕР_ПАРЛЬ = 'slave_password';" | mysql -uroot -pXXX --host = SLAVE &&
echo "ОСТАНОВИТЬ РАБ;" | mysql -uroot -pXXX --host = SLAVE &&
mysqldump -uroot -pXXX --host = MASTER --add-drop-database --master-data = 1 --databases database1 database2 | mysql -uroot -pXXX --host = SLAVE &&
echo "НАЧАТЬ ПОДЧИНЕННЫЙ;" | mysql -C -uroot -pXXX --host = SLAVE
Первая команда должна быть «STOP SLAVE»; потому что вы не можете выполнять какие-либо команды CHANGE MASTER TO с работающим ведомым устройством. Следовательно, ваш код должен читать:
echo "ОСТАНОВИТЬ РАБ;" | mysql -uroot -pXXX --host = SLAVE &&
echo "ИЗМЕНИТЬ МАСТЕРА НА MASTER_USER = 'slave_user';" | mysql -uroot -pXXX --host = SLAVE &&
echo "ИЗМЕНИТЬ МАСТЕРА НА МАСТЕР_ПРОЛЬ = 'slave_password';" | mysql -uroot -pXXX --host = SLAVE &&
mysqldump -uroot -pXXX --host = MASTER --add-drop-database --master-data = 1 --databases database1 database2 | mysql -uroot -pXXX --host = SLAVE &&
echo "НАЧАТЬ ПОДЧИНЕННЫЙ;" | mysql -C -uroot -pXXX --host = SLAVE
Итак, в основном: * Вы меняете пользователя / пароль репликации на ВЕДОМОМ. * Останавливаешь репликацию на раб. * Вы сбрасываете данные с ведущего на ведомое * Вы запускаете ведомого Я прав?
В этом случае я не вижу смысла менять пароль. Я предполагаю, что вам сначала придется сбросить базу данных на ведомом устройстве перед сбросом. Вам понадобится позиция журнала на ведущем устройстве во время дампа данных, иначе ведомое устройство не будет знать, откуда начать репликацию. Вместо передачи пароля в командной строке лучше использовать файл .my.cnf