使用xtrabackup工具进行主从同步(不锁表)

优势:

  1. 无需停止数据库进行InnoDB热备
  2. 增量备份MySQL
  3. 流压缩到传输到其它服务器
  4. 能比较容易地创建主从同步
  5. 备份MySQL时不会增大服务器负载

同步的过程:master将改变记入binary log,通过dump线程传输给slave,slave通过I/O线程将binlog记录进中继日志(relay log),而slave之后便通过SQL线程执行relay log中的步骤,从而达达到主从一致。

复制类型:

半同步复制,异步复制

半同步复制:主库写完binlog,通过dump线程传输,从库通过I/O线程接收后,写入relaylog,而不等待SQL线程进行操作就返回确认给客户端

异步复制:主库写完binlog后即返回确认给客户端



安装过程:

1,下载二进制包:

[[email protected] ~]# cd /usr/local/src/
[[email protected] src]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/tarball/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz
(过程省略)
[[email protected] src]# tar xvf /usr/local/src/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz /usr/local/src
[[email protected] src]# tar xvf percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz
[[email protected] src]# mv percona-xtrabackup-2.4.7-Linux-x86_64 /usr/local/xtrabackupex
[[email protected] src]# ln -s /usr/local/xtrabackupex/bin/innobackupex /usr/local/innobackupex

(给innobackupex做个软连接到/usr/bin下,这样就可以直接使用此命令了)

2,修改my.cnf,增加server-id=128(可根据ip来定)和log_bin=alex(logbin的前缀)

[[email protected] mysql]# /etc/init.d/mysqld restart##重启mysqld
Shutting down MySQL.. SUCCESS!
Starting MySQL.. SUCCESS!

3,创建用作同步数据的用户

[[email protected] src]# mysql -uroot -p123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.36-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> grant replication slave on *.* to 'repl'@192.168.65.129 identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+-------------+----------+--------------+------------------+-------------------+
| File        | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| alex.000001 |      410 |              |                  |                   |
+-------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

记住File 和 Position,是 alex.000001 和 410

4,全量备份:

[[email protected] src]# innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=root --password=123456 /tmp/
[[email protected] src]# ls /tmp/
1212.txt             mysql_all.sql          systemd-private-596758be2a0e48f7922dd9f1aa755aa1-chronyd.service-6aV5Qx
2018-04-05_19-39-02  mysql.sock             systemd-private-596758be2a0e48f7922dd9f1aa755aa1-vgauthd.service-B6YXxw
aming.sock           mysql.sql              systemd-private-596758be2a0e48f7922dd9f1aa755aa1-vmtoolsd.service-EVFEfv
hsperfdata_root      percona-version-check  user.sql
mysql2.sql           php-fcgi.sock

5,传输备份数据到从上:

[[email protected] src]# scp -r /tmp/2018-04-05_19-39-02/ 192.168.65.129:/tmp/

6,准备prepare:

[[email protected] tmp]# innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=root --password=123456 --apply-log /tmp/2018-04-05_19-39-02/

(--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态)

7,恢复数据(确认datadir为空,如果不为空先备份再删除):

[[email protected] tmp]# innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=root --password=123456 --copy-back /tmp/2018-04-05_19-39-02/
[[email protected] tmp]# ls /data/mysql
ibdata1  ib_logfile0  ib_logfile1  ibtmp1  mysql  mysql2  performance_schema  test  xtrabackup_info
[[email protected] tmp]# cp /data/mysql.bak/localhost.localdomain.err /data/mysql
[[email protected] tmp]# cp /data/mysql.bak/localhost.localdomain.pid /data/mysql

(如果没有localhost.localdomain.pid和.err会报错)

8,更改datadir的属主属组为mysql后重启

[[email protected] tmp]# chown -R mysql:mysql /data/mysql
[[email protected] tmp]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[[email protected] tmp]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[[email protected] tmp]# ps aux|grep mysqld
root       4374  0.0  0.1 113264  1616 pts/0    S    19:48   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/localhost.localdomain.pid
mysql      4470  2.6 45.1 1300812 451340 pts/0  Sl   19:48   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/localhost.localdomain.err --pid-file=/data/mysql/localhost.localdomain.pid
root       4494  0.0  0.0 112676   984 pts/0    R+   19:48   0:00 grep --color=auto mysqld

9,更改my.cnf,主要是server_id的值,和主的id区分开

[[email protected] tmp]# vim /etc/my.cnf

[[email protected] tmp]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[[email protected] tmp]# mysql -uroot -p123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

10,change master (master_log_file=, master_log_pos=值为之前主上show master status的值)

mysql> change master to master_host='192.168.65.128', master_user='repl', master_password='123456', master_log_file='alex.000001', master_log_pos=410;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

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

mysql> show slave status\G

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

11,在主上添加一个新的数据库,看从上的变化

从————>

主————>

mysql> create database alex;

Query OK, 1 row affected (0.00 sec)

从————>

主从同步成功

常见问题

1,Slave_IO_Running: No

查看错误问题:

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.

查看主从服务器两台机器/data/mysql/auto.cnf的UUID是否一样,如果一样,删除其中一个,并重启该服务器,再次进行从服务器mysql的change master操作就能成功了。

2,(网上看来的)

一般是事务回滚造成的
stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;

原文地址:http://blog.51cto.com/11530642/2095117

时间: 2024-10-18 19:39:23

使用xtrabackup工具进行主从同步(不锁表)的相关文章

XtraBackup做mysql主从同步

一.背景: 线上一个主库压力比较大,所以增加一个从库,但是不能重启或者停止主库的正常运行,不能锁库锁表影响业务的正常运行.所以这里想到了XtraBackup 二.XtraBackup介绍: Xtrabackup的优点: 1.备份完成快速.可靠 2.备份期间不间断的事务处理 3.节省磁盘空间和网络带宽 4.自动备份验证 5.提高正常运行时间由于更快的恢复时间 备份INNODB引擎的数据库不会锁库锁表,但是备份MyISAM的表还是会锁的,还支持增量备份. 官方地址: https://www.perc

mysqldump工具的常用选项及锁表

最近在看mysql锁表的帮助文档时发现以前使用mysqldump备份时锁表有一点问题,以前在做备份写脚本时是这样锁表的mysql -A -Bse "flush tables with read lock;",后面看了官方文档知道其实这样是无效的,因为flush tables with read lock;语句在mysql的session退出后会隐式执行unlock tables,那么flush tables with read lock;只有在mysql的session不退出的情况下在

mysql主从同步分库分表同步

一.mysql数据库的安装 分别在master 和slave上源码安装mysql数据库 1.1 安装相关包1.1.1 cmake软件cd /home/oldboy/tools/tar xf cmake-2.8.8.tar.gzcd cmake-2.8.8./configure#CMake has bootstrapped.  Now run gmake.gmakegmake installcd ../ 1.1.2 依赖包yum install ncurses-devel -y 1.2 开始安装m

MySQL主从同步几个文件

MySQL主从同步: ? M锁表 M导出S导入 M解锁 M建同步帐号 S获取点位:产生master.info S开启同步 ? 3306: mysql-bin.0000x mysql-bin.index master.info ? ? 3307: relay-bin.00000x ? relay-bin.index #relay-bin的目录 ? relay-log.info #记录:master-info当前的状况 给sql线程用 ? [[email protected] 3307]# cat

MySQL主从(介绍,配置主机,配置从机,测试主从同步)

一.介绍及准备工作 1.介绍 MySQL主从配置又叫Replication或者AB复制,简单讲就是A和B两台机器做主从后,在A上写数据,另一台B也会跟着写数据,两台数据实时同步. MySQL主从是基于binlog的,主上须开启binlog才能进行主从. 主从过程大致有3个步骤 主将更改操作记录到Binlog里 从将主的Binlog事件(sql语句)同步到从本机上并记录在relaylog里 从根据relaylog里面的sql语句按顺序执行 主上有一个logdump线程,用来和从的i/o线程传递bi

mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理

转自:http://www.cnblogs.com/kevingrace/p/6261091.html 在mysql工作中接触最多的就是mysql replication mysql在复制方面还是会有一些常规问题: 比如主库宕机或者从库宕机有可能会导致复制中断,通常需要进行人为修复, 或者很多时候需要把一个从库提升为主库,但对从库和主库的数据一致性不能保证一样. 这种情况下就需要使用percona-toolkit工具的pt-table-checksum组件来检查主从数据的一致性:如果发现不一致的

使用maatkit工具检查并同步mysql主从数据

Maatkit是一组开源工具包,为mysql的日常管理提供了帮助.其中mk-table-checksum可以用来检测master和slave的表结构和数据是否一致.同时,通过mk-table-sync工具,在发现主从数据不一致时,可以修复不同步的数据. 实验环境: Master:192.168.189.143:3306 Slave:192.168.189.144:3306 1:安装Maatikit工具. 安装perl环境:   #wget http://packages.sw.be/perl-T

mysql主从同步验证工具

(1).pt-table-checksum 工具名称 (2).安装pt-table-checksum #:wget www.percona.com/downloads/percona-toolkit/2.2.2/percona-toolkit-2.2.2.tar.gz #:tar -xvf percona-toolkit-2.2.2.tar.gz #:perl Makefile.PL # make && make install (3).授权 GRANT update,insert,del

使用XtraBackup热备份搭建MySQL主从同步

使用XtraBackup热备份搭建MySQL主从同步 1 背景描述 生产环境一台MYSQL主库,没有搭建从库,急需搭建从库 每天已有innobackupex备份 2 方案 利用innobackupex全备和增量备份搭建MYSQL主库 3 数据库版本 主库:mysql 5.5.54 从库:mysql 5.7.25(为了以后升级) 4 搭建步骤 搭建的步骤如下图所示: (1)将数据库备份拷贝到从库上 (2)在从库上安装好MYSQL数据库,安装过程略 (3)停止从库的MYSQL实例,删除从库数据库里面