Настройка MySQL-репликации master—slave на Centos
1 2 |
Master(192.168.1.39) - centos642.kama.dnsalias.com Slave(192.168.1.50) - centos64raidlvm.kama.dnsalias.com |
На главном сервере(master)
1.В my.cnf в секции [mysqld] включаем ведение двоичного(бинарного) журнала
1 |
# nano /etc/my.cnf |
1 2 3 4 5 |
[mysqld] server-id = 39 log-bin = centos642-bin relay-log = /var/log/mysql/centos642-relay-bin relay-log-index = /var/log/mysql/centos642-bin.index |
1 |
# mkdir /var/log/mysql |
1 |
# chown -R mysql:mysql /var/log/mysql/ |
2.Перезапускаем MySQL
1 |
# /etc/init.d/mysqld restart |
3. Создаем учетную запись для подключения с Slave сервера.
т.е наделяем пользователя repluser подключающегося с подчиненного сервера с паролем replpassword правом читать информацию из двоичных журналов основного сервера
1 |
MariaDB [(none)]> grant replication slave on *.* to 'repluser'@'192.168.1.50' identified by 'replpassword'; |
4. Накладываем блокировку на запись на все таблицы, чтобы гарантировать, что в них не будет внесено никаких изменений, которые могут привести к генерированию некорректного результата
1 |
MariaDB [(none)]> flush tables with read lock; |
5. Создаем дамп всех баз данных с добавлением в дамп номера журнала и позиции, с которой будет начинать свою репликацию подчиненный сервер. Для этого используется опция —master data
Важно!!!В ДРУГОМ ТЕРМИНАЛЕ(иначе блокировка таблиц снимется автоматически при завершении сеанса Mysql)
1 |
# mysqldump -u root -p123456789 --all-databases --master-data > all.sql |
6. Снимаем блокировку в таблиц
1 |
MariaDB [first]> unlock tables; |
7. Копируем дамп на подчиненный сервер
1 |
# scp all.sql 192.168.1.50:/root |
1 |
all.sql 100% 1090KB 1.1MB/s 00:00 |
На подчиненном сервере(slave)
8. Определяем в my.cnf в секции [mysqld] уникальный server-id
1 |
# nano /etc/my.cnf |
1 2 3 4 |
[mysqld] server-id = 50 relay-log = /var/log/mysql/centos64raidlvm-relay-bin relay-log-index = /var/log/mysql/centos64raidlvmrelay-bin.index |
1 |
# mkdir /var/log/mysql |
1 |
# chown -R mysql:mysql /var/log/mysql/ |
9.Перегружаем MySQL-сервер
1 |
# /etc/init.d/mysql restart |
10.Восстанавливаем с дампа все базы данных.
1 |
# mysql -u root -p123456789 < /root/all.sql |
11.Указываем необходимые параметр для подключения подчиненного сервера к главному.
1 2 3 4 5 6 7 |
MariaDB [(none)]> change master to -> master_host='192.168.1.39', -> master_user='repluser', -> master_password='replpassword', -> master_log_file='centos642-bin.000001', -> master_log_pos=245; |
1 |
master_host |
– FQDN главного сервера(вывод hostname -f) либо его IP-адрес
1 |
master_user, master_password |
– имя и пароль пользователя, которого мы наделяли правами на чтение двоичного журнала
1 |
master_log_file, master_log_pos |
– имя бинарного лог-файла и номер позиции, с которого начнется репликация (можно посмотреть в дампе all.sql благодаря опции –master-data)
1 |
# less all.sql |
1 2 3 |
……………………………… CHANGE MASTER TO MASTER_LOG_FILE='centos642-bin.000001', MASTER_LOG_POS=245; ……………………………… |
либо в файле/var/lib/mysql/master.info, который создается благодаря наличию выше описанной строки в дамп-файле.
После выполнения команды CHANGE MASTER вся введенная информация будет помещена в файл /var/lib/mysql/master.info
1 |
# cat /var/lib/mysql/master.info |
1 2 3 4 5 6 7 8 9 10 11 12 |
18 centos642-bin.000001 245 192.168.1.39 repluser replpassword 3306 60 0 0 1800.000 0 |
12.Запускаем репликацию.
1 |
MariaDB [(none)]> start slave; |
13.Проверяем состояние репликации.
1 |
MariaDB [(none)]> show slave status\G |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.39 Master_User: repluser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: centos642-bin.000001 Read_Master_Log_Pos: 245 Relay_Log_File: centos64raidlvm-relay-bin.000002 Relay_Log_Pos: 533 Relay_Master_Log_File: centos642-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 245 Relay_Log_Space: 837 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 39 |
P.S.
Если по каким-либо причинам не требуется запускать репликацию при старте MySQL на подчиненном сервере, тогда в my.cnf в секцию [mysqld] добавляем skip-slave-start = On
и перезапускаем MySQL-сервер
1 2 3 4 |
[mysqld] ………… skip-slave-start = On ……… |
1 |
# mysql -u root -p123456789 -e "show slave status\G" | grep IO_Running |
1 |
Slave_IO_Running: No |