转载自: http://www.jianshu.com/p/94c35f7b1550?utm_source=tuicool
XtraBackup不停机不锁表搭建MySQL主从同步实践
http://i.v2ex.co/02ftb7pa.jpeg
前言
Percona XtraBackup可以说是一个相对完美的免费开源数据备份工具,支持在线无锁表同步复制和可并行高效率的安全备份恢复机制相比mysqldump来说确实让人眼前一亮,与MySQL Enterprise Backup(InnoDB Hot Backup)的功能对比可以参考扩展阅读。当然我们在实际运维过程中都应针对不同的业务需求分析和选择合适的备份恢复方案,这篇文章就是针对MySQL多实例且一个实例对应多个database的情况,实现MySQL在线不停机不锁表的主从同步,日后再继续更新分享基于XtraBackup的其它实用技能。
XtraBackup是目前首选的备份方案之一
更新历史
2015年08月07日 - 初稿
阅读原文 - http://wsgzao.github.io/post/xtrabackup/
扩展阅读
Percona XtraBackup - https://www.percona.com/software/mysql-database/percona-xtrabackup
MySQL 5.6 Reference Manual :: 17 Replication - http://dev.mysql.com/doc/refman/5.6/en/replication.html
基于Xtrabackup的物理备份解决方案预研 - http://tencentdba.com/blog/pre-research-on-physical-backup-using-xtrabakcup/
xtrabackup 详解 - http://www.cnblogs.com/gomysql/p/3650645.html
LTMP索引 - http://wsgzao.github.io/index/#LTMP
原理
MySQL主从同步原理
MySQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。
XtraBackup备份原理
innobackupex在后台线程不断追踪InnoDB的日志文件,然后复制InnoDB的数据文件。数据文件复制完成之后,日志的复制线程也会结束。这样就得到了不在同一时间点的数据副本和开始备份以后的事务日志。完成上面的步骤之后,就可以使用InnoDB崩溃恢复代码执行事务日志(redo log),以达到数据的一致性。
备份分为两个过程:
- backup,备份阶段,追踪事务日志和复制数据文件(物理备份)。
- preparing,重放事务日志,使所有的数据处于同一个时间点,达到一致性状态。
XtraBackup的优点
- 可以快速可靠的完成数据备份(复制数据文件和追踪事务日志)
- 数据备份过程中不会中断事务的处理(热备份)
- 节约磁盘空间和网络带宽
- 自动完成备份鉴定
- 因更快的恢复时间而提高在线时间
配置
准备工作
MySQL步骤和my.cnf配置参考LTMP - http://wsgzao.github.io/post/ltmp/
#原有主数据库版本
mysql -V
mysql Ver 14.14 Distrib 5.5.31, for Linux (x86_64) using readline 5.1
#迁移从数据库版本
mysql -V
mysql Ver 14.14 Distrib 5.6.25, for linux-glibc2.5 (x86_64) using EditLine wrapper
#检查数据库引擎
show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
#主从数据库同步注意点
[mysqld]
#主从之间的id不能相同
server-id
#启用二进制日志
log-bin
#一般在从库开启(可选)
read_only
#推荐使用InnoDB并做好相关配置
#检查主从数据库状态
mysql -S /tmp/mysql.sock -e "show global variables like 'server_id';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
mysql -S /tmp/mysql.sock -e "show global variables like 'log_bin';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
安装percona-xtrabackup
一般推荐rpm安装 - https://www.percona.com/downloads/XtraBackup/LATEST/
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
#rpm -ivh percona-xtrabackup-2.2.12-1.el6.x86_64.rpm
rpm -Uvh percona-xtrabackup-2.2.12-1.el6.x86_64.rpm
备份和恢复
通常一般都直接使用innobackupex,因为它能同时备份InnoDB和MyISAM引擎的表
重点关注Slave_IO_Running和Slave_SQL_Runningd的状态是否为YES
#备份
innobackupex --socket=/usr/local/var/mysql2/mysql2.sock --user=root --password --defaults-file=/etc/mysqld_multi.cnf --parallel=4 --database=passport /tmp/backup
#保持事务一致性
innobackupex --socket=/usr/local/var/mysql2/mysql2.sock --user=root --password --defaults-file=/etc/mysqld_multi.cnf --database=passport --apply-log /tmp/backup/2015-08-05_16-08-14
#传输
scp -r /tmp/backup/2015-08-05_16-08-14 10.10.16.24:/tmp/backup/
#恢复
innobackupex --socket=/tmp/mysql.sock --user=root --password --defaults-file=/app/local/mysql/my.cnf --copy-back /tmp/backup/2015-08-05_16-08-14/
#还原权限
chown -R mysql:mysql /app/data/mysql/data
service mysqld start
/app/local/mysql/scripts/mysql_install_db --basedir=/app/local/mysql --datadir=/app/data/mysql/data --no-defaults --skip-name-resolve --user=mysql
#主库授权同步帐号
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
GRANT REPLICATION SLAVE ON *.* TO 'slave_passport'@'10.10.16.24' IDENTIFIED BY 'slave_passport';
FLUSH PRIVILEGES;
#从库开启同步
cat /tmp/backup/2015-08-05_16-08-14/xtrabackup_binlog_info
mysql-bin.002599 804497686
CHANGE MASTER TO
MASTER_HOST='10.10.16.51',
MASTER_USER='slave_passport',
MASTER_PASSWORD='slave_passport',
MASTER_PORT=3307,
MASTER_LOG_FILE='mysql-bin.002599',
MASTER_LOG_POS=804497686;
#开启主从同步
start slave;
#查看从库状态
show slave status\ G
#从库的检查参数
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
#主库的检查参数
show master status \G
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.002600 | 454769337 | | |
+------------------+-----------+--------------+------------------+
1 row in set (0.00 sec)
show processlist;
Master has sent all binlog to slave; waiting for binlog to be updated
MySQL主从切换
切换前断开主库访问连接观察进程状态,无写操作后再停止从库IO_THREAD进行切换
#查看主库状态
show processlist;
Master has sent all binlog to slave; waiting for binlog to be updated
show master status \G
#从库停止 IO_THREAD 线程
stop slave IO_THREAD;
show processlist;
Slave has read all relay log; waiting for the slave I/O thread to update it
show slave status \G
#从库切换为主库
stop slave;
reset master;
reset slave all;
show master status \G
#激活帐户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
GRANT REPLICATION SLAVE ON *.* TO 'slave_passport'@'10.10.16.51' IDENTIFIED BY 'slave_passport';
FLUSH PRIVILEGES;
#切换原有主库为从库
reset master;
reset slave all;
CHANGE MASTER TO
MASTER_HOST='10.10.16.24',
MASTER_USER='slave_passport',
MASTER_PASSWORD='slave_passport',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=804497686;
#检查主库
SHOW PROCESSLIST;
show master status \G
#启动从库
SHOW PROCESSLIST;
start slave;
show slave status \G
常见问题
Slave_SQL_Running:No
#一般是事务回滚造成的
stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;
相关推荐
为了实现MySQL不停机不锁表的主从同步与读写分离配置,首先需要安装XtraBackup工具。XtraBackup是一款非常优秀的开源备份工具,尤其适用于InnoDB表的热备份。 **安装步骤:** 1. **安装必要的依赖包**:使用`yum`...
MySQL 主从同步是指将一个 MySQL 服务器的数据实时同步到另一个 MySQL 服务器上。MySQL 主从同步可以实现高可用性和灾难恢复。MySQL 主从同步的实现通过 MySQL 复制机制来实现。 总结和答疑 本文详细介绍了 MySQL ...
### MySQL实践备份恢复与主从复制 #### 备份恢复 **备份恢复**是数据库管理中的重要环节之一,尤其对于MySQL这种广泛使用的数据库系统来说更是如此。合理的备份策略能够确保数据的安全性和系统的稳定性。 ##### ...
MySQL 主从复制是指在两个或多个 MySQL 实例之间实现数据的实时同步和复制,确保数据的一致性和可用性。这种技术广泛应用于大型数据库系统、数据仓库、数据分析等领域。 主从复制的原理 MySQL 主从复制的原理是...
以下是使用XtraBackup搭建MySQL主从复制的基本步骤: 1. **环境准备**: - 在主从服务器上安装必要的软件,如Percona的YUM源。 - 安装`percona-release-0.1-4.noarch.rpm`以获取最新版本的Percona软件包。 - ...
MySQL主从复制是一种常见的数据库高可用性和数据冗余策略,它允许数据在多个服务器之间进行同步,以实现负载均衡、故障转移和数据备份。在这个过程中,一个MySQL服务器作为主节点,记录所有更改到二进制日志(binary...
MySQL主从同步是一种常见的数据库高可用性和负载均衡解决方案,它允许数据在主服务器(Master)上写入,并在从服务器(Slave)上进行只读复制。这样,从服务器可以用于处理查询负载,提供数据备份,或者在主服务器...
1、适用于docker 版本部署的mysql主从节点 2、根据实际情况修改节点名称、用户名、密码 3、使用xtrabackup、tmux、pt-slave-find、yq、jq等工具实现 4、需要多次执行脚本,根据脚本输出判断主从数据恢复阶段
MySQL的主从同步是数据库高可用性和数据冗余的重要手段,尤其在大型系统中,能够保证数据的一致性,防止单点故障,并实现负载均衡。本文将详细介绍在CentOS 5.4环境下,使用MySQL 5.1版本进行主从同步的快速设置步骤...
- **主从复制**:这是MySQL最基础的同步方式,一个数据库作为主库接收写操作,其他数据库作为从库同步主库的数据。主库会记录所有改变的数据的二进制日志(binlog),从库通过读取并应用这些日志来保持同步。 - **...
MySQL5.6主从复制是一种常见的数据库高可用性和负载均衡解决方案,它允许数据从一个主服务器(Master)实时同步到一个或多个从服务器(Slave)。这种配置使得从服务器能够处理只读查询,减轻主服务器的压力,同时...
4. **Binlog和Position信息**:备份过程中,Percona XtraBackup会记录 Binlog(二进制日志)的位置和Position,这是实现主从同步的关键。有了这些信息,可以在恢复时精确地应用自备份以来的事务,确保主从数据的一致...
Xtrabackup for Mysql5.7 官方版本安装包 Mysql备份首选 物理在线备份 友情链接 免费下载 求个赞
从库搭建有多种方法,可以选择使用 mydumper 导出主库数据,然后进行导入到从库,使用 FTWL 锁库/停库,获得主库位点,然后 copy 数据文件至从库,使用 xtrabackup 进行数据库备份,然后在从库还原,或者使用 MySQL ...
03-MySQL不乱码5种方法及不乱码根源深入详解.avi 04-下节内容及课后作业说明.avi 05-课前思想-17期学生23万入职BAT公司 06-课前思想-及课前考试题说明.avi 07-MySQL字符集介绍及生产常用字符集说明.avi 08-MySQL不同...
在 MySQL 集群环境中,数据热迁移是指在不停机的情况下将 MySQL 数据从一个节点迁移到另一个节点的过程。这种迁移方式可以减少停机时间,提高系统的可用性。实现热迁移需要使用 Xtrabackup 工具,该工具可以在线备份...
`xtrabackup`是Percona公司开发的一款高效、无锁的MySQL和MariaDB热备份工具,它允许在不影响数据库服务的情况下进行全备和增量备份。本教程将详细介绍如何使用`xtrabackup`结合Shell脚本来实现MySQL数据库的备份与...