|
|
| (не показано 15 промежуточных версий этого же участника) |
| Строка 1: |
Строка 1: |
| − | Будем настраивать репликацию 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 генерируется автоматически, но если виртуалка клонирована, выскочит такая ошибка<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.
| |
| − |
| |
| − |
| |
| − | 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;
| |