XtraBackup不停機不鎖表搭建MySQL主從同步實踐

  注意!!!!用主庫恢復從庫的時候有定時任務event的,從庫的event要置爲disable狀態,否則會因爲主從都執行定時任務而數據出現主從數據不一致的情況。

  主庫:

[root@mysqlplus soft]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
[root@mysqlplus soft]# rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
[root@mysqlplus soft]# yum -y install rsync
[root@mysqlplus soft]# rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
[root@mysqlplus soft]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='******' --slave-info --parallel=16 /home/full_mysql --no-timestamp
[root@mysqlplus soft]# scp -r /home/full_mysql root@197.***.100.***:/home/

  備庫:

[root@mysqlplus2 ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
[root@mysqlplus2 ~]# yum install -y rsync
[root@mysqlplus2 ~]#  rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
[root@mysqlplus2 ~]# innobackupex --defaults-file=/etc/my.cnf --apply-log /home/full_mysql
[root@mysqlplus2 ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back /home/full_mysql
[root@mysqlplus2 ~]# chown -R mysql:mysql /home/mysql/
[root@mysqlplus2 ~]# /etc/init.d/mysqld start
[root@mysqlplus2 ~]# cat /home/full_mysql/xtrabackup_info |grep binlog_pos
binlog_pos = filename 'mysql-bin.000139', position '75931475'

  主從同步:

mysql>  CHANGE MASTER TO
    MASTER_HOST='197.***.100.***',
    MASTER_USER='repl',
   MASTER_PASSWORD='******',
     MASTER_PORT=3306,
    MASTER_LOG_FILE='mysql-bin.000137',
     MASTER_LOG_POS=66943384;
Query OK, 0 rows affected, 2 warnings (0.15 sec)
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000137',MASTER_LOG_POS=23802190;

  然後第二天因爲event事件報錯了:
  Last_Error: Could not execute Delete_rows event on table dbjyx.tb_***member***; Can’t find record in ‘tb_jyx_member_footprint’, Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event’s master log mysql-bin.000137, end_log_pos 106237269
  這個問題就回歸到本筆記頭部執行恢復同步務必disable備庫的定時任務
  複製過程中的錯誤可以通過查看日誌文件進行錯誤溯源,然後有的放矢:

[root@mysqlplus ~]# /usr/local/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS /home/mysql/logs/mysql-bin.000137 --stop-position=106237269 | tail -20
[root@mysqlplus ~]# /usr/local/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS /home/mysql/logs/mysql-bin.000137 | grep -A 100 '273976273'>/home/er.txt

同步過程中經考量可忽略的一些錯誤可以選擇跳過:

mysql> stop slave;
Query OK, 0 rows affected (0.04 sec)
mysql> set global sql_slave_skip_counter=1;
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章