xtrabackup在线迁移mysql并搭建为主主同步
一、背景
工作中有需求数据库需要迁移,但是不能停服,不能锁库锁表影响业务的正常运行,所以使用XtraBackup
二、环境:
操作系统:CentOS Linux release 7.4.1708 (Core)
mysql:5.6.35
IP:192.168.0.131
xtrabackup版本:percona-xtrabackup-24-2.4.2-1.el7.x86_64.rpm
xtrabackup下载地址:https://www.percona.com/downloads/XtraBackup/LATEST/
根据linux系统选择不同版本!
三、安装xtrabackup
[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--2.4.-.el7.x86_64.rpm
【优缺点比较】
Xtrabackup备份的优势
- 备份和恢复非常快
- 增量备份
- 流式备份
- (解)压缩算法相比逻辑备份的zlib库更快
- 自身多线程支持
Xtrabackup备份的劣势
- 不够灵活,无法单独备份指定表、指定库
- 无法同逻辑备份那样grep特定业务存在的字符串
- 空间损耗,且不支持逻辑备份恢复时的碎片整理功能
- 依赖于备份过程中生成的redo log大小,若过大会极大的影响备份和恢复速度
- 逻辑备份在不同mysql版本中,兼容性较好;而Xtrabackup作为物理备份方案,对mysql server的版本依赖性较强,扩展性较差
四、备份和恢复
1、使用环境:本人测试使用的是为环境新搭建的mysql_multi多实例方式,具体安装步骤见:https://www.cnblogs.com/01-single/p/9051412.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 =
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 =
innodb_buffer_pool_size = 256M
auto_increment_increment=2
auto_increment_offset=
log_error = /alidata1/mysql_multi/mysql3307/log/log-err
expire_logs_days =
bind-address = 192.168.0.131
skip-name-resolve [mysqld3308]
socket = /tmp/mysql3308.sock
port =
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 =
innodb_buffer_pool_size = 256M
auto_increment_increment=
auto_increment_offset=
log_error = /alidata1/mysql_multi/mysql3308/log/log-err
expire_logs_days =
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
2、备份:
[root@host1 ~]# innobackupex --socket=/tmp/mysql3307.sock --user=root --password= --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= --apply-log /mysqlbackup/--21_10--/ #保持事务一致性
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态;
“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态;
innobakupex命令的–apply-log选项可用于实现上述功能。
如果使用另外一台服务器做主从,需要传输备份的数据:
[root@host2 ~]# scp -r 192.168.0.131:/mysqlbackup/--21_10-- /tmp/backup
3、恢复:
[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= --copy-back /mysqlbackup/--21_10--/
[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 --user=root --password=
[root@host1 bin]# ./mysqld_multi --defaults-file=/usr/local/mysql/my.cnf start
[root@host1 bin]# netstat -nlpt | grep mysql
tcp 192.168.0.131: 0.0.0.0:* LISTEN /mysqld
tcp 192.168.0.131: 0.0.0.0:* LISTEN /mysqld
五、开启主从同步:
一、
#主: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/--21_10--/xtrabackup_binlog_info
binlog.
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.131', MASTER_USER='slaveuser', MASTER_PASSWORD='slave123', MASTER_PORT=, MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=;
mysql> start slave;
mysql> show slave status\G
*************************** . row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.131
Master_User: slaveuser
Master_Port:
…………
…………
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
…………
…………
row in set (0.00 sec) 二、
#主:192.168.0.131 3308
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'%' IDENTIFIED BY 'slave123';
mysql> show master status \G
*************************** . row ***************************
File: binlog.
Position:
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
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=, MASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=;
mysql> start slave;
mysql> show slave status\G
*************************** . row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.131
Master_User: slaveuser
Master_Port:
…………
…………
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
…………
…………
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目录来存储备份数据。
参考文档:
https://segmentfault.com/a/1190000003063874
https://yq.aliyun.com/product/999?utm_content=se_369232
xtrabackup在线迁移mysql并搭建为主主同步的更多相关文章
- MySQL 5.7双主同步部分表
参考:http://www.jb51.net/article/122892.htm?pc 前言: 我们要配置双主同步的mysql服务器. 暂时叫做,mysql1和mysql2吧. 一 mysql的配 ...
- xtrabackup在线备份主库,搭建slave,使用gtid模式
mysql:5.6.29xtrabackup:2.2.10master:192.168.166.129slave:192.168.166.131mysql数据目录:/data/mysqlmysql备份 ...
- mysql 主从,双主同步
1.创建用户并设置远程访问授权 1). A上添加: //ip地址为B的ip地址,用于B访问 ' with grant option; 2). B上添加://ip地址为A的ip地址,用于A访问 ' wi ...
- mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离
数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...
- MySQL集群搭建(2)-主主从模式
1 环境准备 上次我们搭建了主备架构,如下所示 这次我们的搭建目标是 具体配置信息 IP 系统 端口 MySQL版本 节点 读写 说明 192.168.41.83 Centos6.8 3306 5.7 ...
- Docker Mysql主主同步配置搭建Demo
主主同步配置和主从配置很相似,仅需稍做修改就可以了,对主从配置有疑问可以查看 上一篇文章. 进行Docker操作前,先建立目录,我的路径是d:/docker/mysql,目录结构如下: --mysql ...
- 搭建MySQL的主从、半同步、主主复制架构
复制其最终目的是让一台服务器的数据和另外的服务器的数据保持同步,已达到数据冗余或者服务的负载均衡.一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器.主从服务器可以位于不同的网络拓 ...
- 使用 Xtrabackup 在线对MySQL做主从复制【转】
1. 说明 1.1 xtrabackup mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷.一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldu ...
- 使用 Xtrabackup 在线对MySQL做主从复制
1. 说明 1.1 xtrabackup mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷.一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldu ...
随机推荐
- java实现猴子选大王问题(约瑟夫问题)
题目:m只猴子围成一圈报数,报n的猴子自动离开,然后下一位重新从1开始报数,一直循环,最后剩下的那个猴子就是猴大王,写出程序求出最后是大王的那只猴子最初的位置. package learn; impo ...
- oracle 层次化查询(生成菜单树等)
1.简介:Oracle层次化查询是Oracle特有的功能实现,主要用于返回一个数据集,这个数据集存在树的关系(数据集中存在一个Pid记录着当前数据集某一条记录的Id). 2.层次化查询主要包含两个子句 ...
- Android文字识别之tesseract的使用
关于tesseract识别工具有Google提供的版本有tesseract-android-tools,不过还有一个tesseract-two也是非常好用的,这里我们使用的是tesseract-two ...
- Mongodb cassandra 和 Mysql对比
MongoDBDB.Cassandra和 Mysql对比 1.为什么是Nosql? 1.1 Nosql在大数据处理相对于关系型数据库具有优势 1.1.1 1. 低延迟 ...
- MySQL优化--表之间JOIN的关键字ON和Where (01)
1. Join关键字,就是把多个表连接起来 而on和where都是条件,但是针对的对象不一样 1.1. 关键字 On是指怎样把两个表连接起来,如: on a.name = b.name 是一行一行的比 ...
- 周记3——解决fixed属性在ios软键盘弹出后失效的bug
这周在做空间(“类似”qq空间)项目.首页是好友发表的说说,可以针对每条说说进行评论,评论框吸附固定在屏幕底部.此时,Bug来了...在ios上,软键盘弹出后fixed属性失效了.后来发现,ios绝大 ...
- Struts2初步学习总结
Struts2当时上课的时候老师给我们讲过,了解过一些,但也仅仅是了解,,,没动手去做,准确的说是试了一下,然后没做成功,,,现在又想把这个夹生饭给煮一下了,,,, 结合W3Cschool和轻量级Ja ...
- Storm框架入门
1 Topology构成 和同样是计算框架的Mapreduce相比,Mapreduce集群上运行的是Job,而Storm集群上运行的是Topology.但是Job在运行结束之后会自行结束,Topolo ...
- Hadoop实战之二~ hadoop作业调度详解(1)
对Hadoop的最感兴趣的地方,也就在于Hadoop的作业调度了,在正式介绍如何搭建Hadoop之前,深入理解一下Hadoop的作业调度很有必要.我们不一定能用得上Hadoop,但是如果理通顺Hado ...
- SpringCloud实战之初级入门(一)— eureka注册中心
目录 写在前面 1.资料目录 2.环境介绍 3.eureka注册中心 3.1 创建工程 3.2 启动工程 5.eureka注册中心集群高可用 6.结语 7.一点点重要的事情 写在前面 我在软件行业浸泡 ...