1、背景html
工做中有需求数据库须要迁移,可是不能停服,不能锁库锁表影响业务的正常运行,因此使用XtraBackupmysql
2、环境:linux
操做系统:CentOS Linux release 7.4.1708 (Core)算法
mysql:5.6.35sql
IP:192.168.0.131数据库
xtrabackup版本:percona-xtrabackup-24-2.4.2-1.el7.x86_64.rpmsegmentfault
xtrabackup下载地址:https://www.percona.com/downloads/XtraBackup/LATEST/服务器
根据linux系统选择不一样版本!多线程
3、安装xtrabackupapp
[root@host1 ~]# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev numactl [root@host1 ~]# rpm -Uvh percona-xtrabackup-24-2.4.2-1.el7.x86_64.rpm
Xtrabackup备份的优点
Xtrabackup备份的劣势
4、备份和恢复
一、使用环境:本人测试使用的是为环境新搭建的mysql_multi多实例方式,具体安装步骤见:http://www.javashuo.com/article/p-qbegbxba-bz.html
my.cnf配置:
[root@host1 ~]# cat /usr/local/mysql/my.cnf [client] [mysqld] [mysqld_multi] user=mysql password=mysql mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin [mysqld3307] socket = /tmp/mysql3307.sock port = 3307 user=mysql pid-file = /alidata1/mysql_multi/mysql3307/mysqld.pid datadir = /alidata1/mysql_multi/mysql3307/mydata log-bin= /alidata1/mysql_multi/mysql3307/log/binlog server-id = 3307001 innodb_buffer_pool_size = 256M auto_increment_increment=2 auto_increment_offset=1 log_error = /alidata1/mysql_multi/mysql3307/log/log-err expire_logs_days = 5 bind-address = 192.168.0.131 skip-name-resolve [mysqld3308] socket = /tmp/mysql3308.sock port = 3308 user=mysql pid-file = /alidata1/mysql_multi/mysql3308/mysqld.pid datadir = /alidata1/mysql_multi/mysql3308/mydata log-bin= /alidata1/mysql_multi/mysql3308/log/binlog server-id = 3308001 innodb_buffer_pool_size = 256M auto_increment_increment=2 auto_increment_offset=2 log_error = /alidata1/mysql_multi/mysql3308/log/log-err expire_logs_days = 5 bind-address = 192.168.0.131 skip-name-resolve
必定注意须要作主从的server-id不能是同样的,不然会报错,
在主主同步配置时,须要将两台服务器的auto_increment_increment增加量都配置为2,而要把auto_increment_offset分别配置为1和2,
这样才能够避免两台服务器同时作更新时自增加字段的值之间发生冲突。
一般通常都直接使用innobackupex,由于它能同时备份InnoDB和MyISAM引擎的表
重点关注Slave_IO_Running和Slave_SQL_Runningd的状态是否为YES
二、备份:
[root@host1 ~]# innobackupex --socket=/tmp/mysql3307.sock --user=root --password=123456 --defaults-file=/usr/local/mysql/my.cnf /mysqlbackup [root@host1 ~]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --socket=/tmp/mysql3307.sock --user=root --password=123456 --apply-log /mysqlbackup/2018-06-21_10-35-09/ #保持事务一致性
通常状况下,在备份完成后,数据尚且不能用于恢复操做,由于备份的数据中可能会包含还没有提交的事务或已经提交但还没有同步至数据文件中的事务。所以,此时数据文件仍处理不一致状态;
“准备”的主要做用正是经过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态;
innobakupex命令的–apply-log选项可用于实现上述功能。
若是使用另一台服务器作主从,须要传输备份的数据:
[root@host2 ~]# scp -r 192.168.0.131:/mysqlbackup/2018-06-21_10-35-09 /tmp/backup
三、恢复:
[root@host1 mysql3308]# pwd /alidata1/mysql_multi/mysql3308 [root@host1 mysql3308]# mv mydata mydatabak #备份原有的数据库 [root@host1 mysql3308]# mkdir mydata #新建数据库目录
#恢复数据库:
[root@host1 mysql3308]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --datadir=/alidata1/mysql_multi/mysql3308/mydata/ --socket=/tmp/mysql3308.sock --user=root --password=123456 --copy-back /mysqlbackup/2018-06-21_10-35-09/ [root@host1 mysql3308]# chown -R mysql:mysql mydata #还原权限 [root@host1 mysql3308]# cd /usr/local/mysql/bin/
#从新启动3308数据库 [root@host1 bin]# ./mysqld_multi --defaults-file=../my.cnf stop 3308 --user=root --password=123456 [root@host1 bin]# ./mysqld_multi --defaults-file=/usr/local/mysql/my.cnf start 3308 [root@host1 bin]# netstat -nlpt | grep mysql tcp 0 0 192.168.0.131:3307 0.0.0.0:* LISTEN 35205/mysqld tcp 0 0 192.168.0.131:3308 0.0.0.0:* LISTEN 37161/mysqld
5、开启主从同步:
1、 #主:192.168.0.131 3307 mysql> GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'%' IDENTIFIED BY 'slave123'; mysql> show master status \G #从:192.168.0.131 3308 [root@host1 ~]# cat /mysqlbackup/2018-06-21_10-35-09/xtrabackup_binlog_info binlog.000001 32399093 mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.131', MASTER_USER='slaveuser', MASTER_PASSWORD='slave123', MASTER_PORT=3307, MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=32399093; mysql> start slave; mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.131 Master_User: slaveuser Master_Port: 3307 ………… ………… Slave_IO_Running: Yes Slave_SQL_Running: Yes ………… ………… 1 row in set (0.00 sec) 2、 #主:192.168.0.131 3308 mysql> GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'%' IDENTIFIED BY 'slave123'; mysql> show master status \G *************************** 1. row *************************** File: binlog.000003 Position: 592 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec) #从:192.168.0.131 3307 mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.131', MASTER_USER='slaveuser', MASTER_PASSWORD='slave123', MASTER_PORT=3308, MASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=592; mysql> start slave; mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.131 Master_User: slaveuser Master_Port: 3308 ………… ………… Slave_IO_Running: Yes Slave_SQL_Running: Yes ………… ………… 1 row in set (0.00 sec)
至此互为主从已配置好,两个库都可执行读写操做,且互相同步
若是是两个不一样IP的服务器作主从,只需改下IP就行,操做方式同样
PS:innobackupex备份数据库的各文件说明:
(1) backup-my.cnf —— 备份命令用到的配置选项信息;
(2) ibdata —— 备份的表空间文件;
(3) xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;
(4) xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止
(5) xtrabackup_checkpoints —— 备份类型(如彻底或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;
(6) xtrabackup_logfile —— 备份的重作日志文件。
在使用innobackupex进行备份时,还可使用–no-timestamp选项来阻止命令自动建立一个以时间命名的目录;如此一来,innobackupex命令将会建立一个BACKUP-DIR目录来存储备份数据。
参考文档: