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

Материал из megapuper
Перейти к: навигация, поиск
(Полностью удалено содержимое страницы)
(Метка: очистка)
 
Строка 1: Строка 1:
Будем настраивать репликацию Percona-MYSQL-5.7 сервера с помощью Percona XtraBackup на Debian Stretch. Тип репликации будет master-slave. Сервер реплицируется один в один со всеми базами/пользователями. При создании новых баз/пользователей на master они автоматически реплицируются на slave.
 
  
 
'''1. Конфигурим Master'''
 
 
Рихтуем конфиг под репликацию и перегружаем mysql
 
server_id                = 1
 
log_bin                  = /var/log/mysql/binlog
 
log_bin_index            = /var/log/mysql/binlog.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
 
sync_binlog              = 0
 
slave_compressed_protocol = 0
 
 
Заводим пользователя для репликации
 
mysql> GRANT REPLICATION SLAVE ON *.*  TO 'repl'@'%' IDENTIFIED BY 'repl_pass';
 
 
Проверяем привилегии
 
mysql> SHOW GRANTS FOR repl;
 
 
 
'''2. Делаем бекап Master и подготавливаем его'''
 
master# xtrabackup --backup --user=<font color=blue>user</font> --password=<font color=blue>pass</font> --target-dir=/tmp/backupdir
 
xtrabackup: completed OK!
 
 
master# xtrabackup --user=<font color=blue>user</font> --password=<font color=blue>pass</font> --prepare --target-dir=/tmp/backupdir
 
 
 
'''3. Копируем бекап на Slave'''
 
master# rsync -avpP -e ssh /tmp/backupdir slave:/tmp/
 
 
После копирования переносим куда-нибудь оригинальную папку с данными mysql, если slave свежеустановленный, можно просто грохнуть.
 
slave# mv /var/lib/mysql/ /tmp/datadir_backup
 
 
Переносим бекап в рабочую папку mysql
 
slave# xtrabackup --move-back --target-dir=/tmp/backupdir
 
 
Выставляем права
 
slave# chown -R 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<br/>
 
Решение:
 
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 генерируется автоматически, но если виртуалка клонирована, выскочит такая ошибка<br/>
 
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.
 
 
 
Ошибка при репликации. Например, если случайно изменить данные на slave<br/>
 
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;
 
 
 
почитать про параметры конфига репликации здесь<br/>
 
https://russianblogs.com/article/96541244606/
 

Текущая версия на 16:21, 2 марта 2022