Репликация MYSQL-сервера — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
Строка 97: Строка 97:
 
  [auto]
 
  [auto]
 
  server-uuid=fea4e713-9552-11e6-a093-06a1a5e379d3
 
  server-uuid=fea4e713-9552-11e6-a093-06a1a5e379d3
 +
Удаляем auto.conf и рестартим mysql.
  
Удаляем auto.conf и рестартим mysql.
 
  
 
Ошибка при репликации. Например, если случайно изменить данныt на slave  
 
Ошибка при репликации. Например, если случайно изменить данныt на slave  
 
Sometimes errors occur in replication. For example, if you accidentally change a row of data on your slave. If this happens, fix the data, then run:
 
Sometimes errors occur in replication. For example, if you accidentally change a row of data on your slave. If this happens, fix the data, then run:
 
  mysql> STOP SLAVE;SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;
 
  mysql> STOP SLAVE;SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;

Версия 12:16, 9 сентября 2019

Будем настраивать репликацию Percona-MYSQL-5.7 сервера с помощью Percona XtraBackup на Debian Stretch. Тип репликации будет master-slave.


1. Конфигурим Master

Рихтуем конфиг под репликацию и перегружаем mysql

server_id                 = 1
log_bin                   = /var/log/mysql/binlog_sip01-ett
log_bin_index             = /var/log/mysql/binlog_sip01-ett.index
binlog_format             = row
log_slave_updates         = false
expire_logs_days          = 14
max_binlog_size           = 256M
max_binlog_files          = 25
binlog_cache_size         = 32K
relay_log                 = /var/log/mysql/relaylog_sip01-ett
sync_binlog               = 0
slave_compressed_protocol = 0

Заводим пользователя для репликации

mysql> GRANT REPLICATION SLAVE ON *.*  TO 'repl'@'%' IDENTIFIED BY 'repl_pass';

Проверяем привилегии

mysql> SHOW GRANTS;


2. Делаем бекап Master и подготавливаем его

master# xtrabackup --backup --user=user --password=pass --target-dir=/tmp/backupdir
xtrabackup: completed OK!
master$ xtrabackup --user=user --password=pass --prepare --target-dir=/tmp/backupdir


3. Копируем бекап на Slave

master# rsync -avpP -e ssh /tmp/backupdir slave:/tmp/backup_mysql/

После копирования переносим куда-нибудь оригинальную папку с данными mysql, если slave свежеустановленный, можно просто грохнуть.

slave# mv /var/lib/mysql/ /tmp/datadir_backup

Переносим бекап в рабочую папку mysql

slave# xtrabackup --move-back --target-dir=/tmp/backupdir

Выставляем права

slave# chown mysql:mysql /var/lib/mysql


4. Конфигурим Slave

Забираем /root/.my.cnf с мастер, ибо пароль рута изменится. Рихтуем конфиг под репликацию и перегружаем mysql

server_id                 = 2
log_bin                   = /var/log/mysql/binlog_slave
log_bin_index             = /var/log/mysql/binlog_slave.index
binlog_format             = row
log_slave_updates         = false
expire_logs_days          = 14
max_binlog_size           = 256M
max_binlog_files          = 25
binlog_cache_size         = 32K
relay_log                 = /var/log/mysql/relaylog-slave
sync_binlog               = 0
slave_compressed_protocol = 0

Смотрим имя бинлога и позицию

slave$ cat /tmp/backupdir/xtrabackup_binlog_info
master-bin.000001     481

5. Запускаем репликацию

mysql> CHANGE MASTER TO MASTER_HOST='master-server-ip', MASTER_USER='repl', MASTER_PASSWORD='repl_pass', MASTER_LOG_FILE='value', MASTER_LOG_POS=value;
mysql> START SLAVE;

Проверяем статус на slave

mysql> SHOW SLAVE STATUS \G

Если всё хорошо, Last_Error должен быть пустой, Slave_IO_State - “Waiting for master to send event”. Seconds_Behind_Master - время отставания реплики от мастера

Статус на master

mysql> SHOW MASTER STATUS;


Распространенные ошибки

Ошибка: ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository Решение:

mysql> reset slave;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_HOST='master-server-ip', MASTER_USER='repl_user', MASTER_PASSWORD='repl_user', MASTER_LOG_FILE='value', MASTER_LOG_POS=value, MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected, 2 warnings (0.05 sec)

mysql> start slave;


Сервер UUIDs генерируется автоматически, но если виртуалка клонирована, выскочит такая ошибка
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

/var/lib/mysql# cat /var/lib/mysql/auto.cnf
[auto]
server-uuid=fea4e713-9552-11e6-a093-06a1a5e379d3

Удаляем auto.conf и рестартим mysql.


Ошибка при репликации. Например, если случайно изменить данныt на slave Sometimes errors occur in replication. For example, if you accidentally change a row of data on your slave. If this happens, fix the data, then run:

mysql> STOP SLAVE;SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;