Ознакомьтесь в этом разделе с командами, которые позволят вам управлять взаимо­действием главного и подчиненного серверов. Все эти команды выполняются в интерфейсе MySQL. В процессе изучения этих операторов вы узнаете больше подробностей о репликации.
Команда change master
Команда CHANGE MASTER указывает подчиненному серверу проверить обновление на главном сервере в другом двоичном журнале и/или записывать в другой журнал передачи на подчиненном сервере. Этот оператор также используется для изменения параметров соединения и двоичного журнала. Он представлен в следующем листинге.
Листинг 17.1.
CHANGE MASTER TO MASTER_HOST = ' имя-главного', MASTER_USER = 'имя-подчиненного', MASTER_PASSWORD = 'пароль-подчиненного', MASTER_PORT = 'номер-порта',
MASTER_LOG_FILE = 'имя-файла-двоичного-журанала', MASTER_LOG_POS = 'точка-двоичного-журанала', MASTER_CONNECT_RETRY = 'значение'; 
RELAY_LOG_FILE = 'имя-файла-журанала-подключений',
RELAY_LOG_POS = ' значение';
Допустим, ваша компания купила под базу данных совершенно новый, сверхбольшой и сверхбыстрый сервер и вы хотите сделать его главным сервером. Рассмотрим пример с введенными параметрами.
Листинг 17.2.
mysql> CHANGE MASTER TO MASTER_HOST = 'MrBig', MASTER_USER = 'Slave1', MASTER_PASSWORD = 'Slav3Pass', MASTER_PORT = '33 06', MASTER_LOG_FILE = 'master-bin.0 01',
MASTER_LOG_POS = '7',
MASTER_CONNECT_RETRY = '15'; RELAY_LOG_FILE = 'slave-relay-bin.010', RELAY_LOG_POS = '6084';
Таблица 17.1 содержит сведения по всем этим параметрам. Обратите внимание, что изменятся только указанные вами параметры. Без вашего указания останется старое зна­чение. Исключением из этого правила являются имя узла и номер порта. Если вы измените любой из них, MySQL "решит", что вы изменили главный сервер, и автоматически удалит значения имени двоичного журнала обновлений и положения в нем. Если вы не зададите два новых значения после изменения имени узла или номера порта, будут заданы значения MASTER_LOG_FILE = и MASTER_LOG_POS = '4'.
Управление процессом репликации
Если вы не укажете значения RELAY_LOG_FILE и RELAY_LOG_POS, оператор CHANGE MASTER удалит существующие журналы передачи и создаст новые. Он также обновляет файлы master.info и relay-log.info.
Обратите внимание, что если вы попробуете выполнить оператор CHANGE MASTER в среде с высокой нагрузкой, он может потерять некоторые запросы. Это может случиться, если поток SQL отстает от потока ввода/вывода, так как при удалении командой CHANGE MASTER журналов передачи может возникнуть разрыв между тем, что было записано, и тем, что обрабатывается в данный момент.
Этого можно избежать двумя способами. Первый способ - остановить потоки подчи­ненного сервера, пока он не прочитал все существующие журналы передачи. Для этого используйте команду STOP SLAVE IO_THREAD, и контролируйте чтение командами SHOW SLAVE STATUS и SELECT MASTER_OS_WAIT() . Второй способ - использовать
операторы STOP SLAVE и SHOW SLAVE STATUS, а в столбцах Relay_master_ log_file и Exec_master_log_pos следите за положением потока в двоичном журнале главного сервера. Когда получите эти значения, укажите их в параметрах Master_ log_file и Master_log_pos. Для подчиненного сервера это означает старт репликации в том месте, где завершил чтение поток подчиненного сервера, и, следовательно, абсолютно исключается потеря данных.
Команда purge master
Оператор PURGE MASTER удаляет двоичные журналы на главном сервере до указанной даты или указанного имени журнала. Это можно использовать в ситуации, когда вы хотите определить, какие журналы все еще обрабатываются. Синтаксис таков: PURGE MASTER LOGS TO двоичный-журнал
или
PURGE MASTER LOGS BEFORE дата
На заметку
Этот оператор требует привилегии SUPER.
Для примера предположим, что вы хотите удалить все главные двоичные журналы обновления до файла bin_log.999. Выполните следующее.
Листинг 17.3.
mysql> PURGE MASTER LOGS TO bin_log.999;