那么在企业里主数据库不停机的情况, 如何做到不停机维护主从同步呢? 今天我们就跟大家分享一下企业实际案例.
实战环境
- MySQL-5.7
- Xtrabackup-2.4
Xtrabackup 介绍
Percona XtraBackup 是一款基于 MySQL 的服务器的开源热备份实用程序, 在备份过程中不会锁定数据库.
它可以备份来自 MySQL5.1,5.5,5.6 和 5.7 服务器上的 InnoDB,XtraDB 和 MyISAM 表的数据, 以及带有 XtraDB 的 Percona 服务器.
XtraBack XtraBackup 工具 up 工具
Xtrabackup 本身只能备份 InnoDB 和 XtraDB, 不能备份 MyISAM.
innobackupex 封装了 xtrabackup 的 perl 脚本, 覆盖了 Xtrabackup 的功能. 它不但可以备份 nnodb 和 xtradb 两种引擎的表, 还可以备份 myisam 引擎的表 (在备份 myisam 表时需要加一个读锁).
Xtrabackup 特点
备份过程快速, 可靠;
备份过程不会打断正在执行的事务;
能够基于压缩等功能节约磁盘空间和流量;
自动实现备份检验;
还原速度快;
Xtrabackup 备份实现原理
innobackupex 开启 xtrabackup_log 监控线程, 实时监测 redolog 文件的变化, 将新备份过程中新写入到事务日志中的日志拷贝至 innobackup_log 中;
同时开启 xtrabackup 拷贝线程, 开始拷贝 innodb 文件, 拷贝数据数据结构, 记录当前 binlog 及 position 完成备份.
全备恢复原理
将全备文件进行 xtrabackup_log 日志回放, 并对提交的事务进行重做, 同时 rollback 未提交的事务. 并将全备文件复制到 MySQL 下的 data 目录下.
主数据库
1, 安装 xtrabackup 工具
$ yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm$ yum update percona-release$ yum install percona-xtrabackup-24 -y
2, 主数据库全量备
- # 全量备份 $ innobackupex --defaults-file=/etc/my.cnf --user=root --password=magedu /data/backup
- # 保持事务一致性 apply-log 的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件处于一致性状态, 把已提交的事务合并到 ibdata 文件 $ innobackupex --apply-log /data/backup/2020-03-28_19-13-07
3, 将主数据库备份文件压缩并拷贝到从数据库
- $ tar czf backup.tar.gz 2020-03-28_19-13-07
- $ scp -r /data/backup/backup.tar.gz 172.21.0.8:/data/backup/
4, 主库授权同步帐号
MySQL> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave_passport';MySQL> FLUSH PRIVILEGES;
5, 查看主库备份到位置, 从库从备份位置开始同步
$ cat /data/backup/2020-03-28_19-13-07/xtrabackup_binlog_infomysql-bin.000001 1053
从数据库操作
1, 从数据全量恢复
$ cd /data/backup/ && tar xf backup.tar.gz$ innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backup/2020-03-28_19-13-07
2, 修改数据文件权限
$ chown -R MySQL:MySQL /var/lib/MySQL
3, 启动从数据库
$ systemctl restart mysqld
4, 查看主数据库第五步主库备份的位置, 开始同步
- MySQL> CHANGE MASTER TO MASTER_HOST='172.21.0.9', \
- MASTER_USER='slave', \
- MASTER_PASSWORD='slave_passport', \
- MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001', \
- MASTER_LOG_POS=1053;
5, 开启主从同步
- MySQL> start slave;MySQL> show slave status\G;
- # 下面二个 Yes 代表已经正常同步了 Slave_IO_Running=YesSlave_SQL_Running=Yes
总结
MySQL 主从同步, 双机热备, 数据备份技术已经成为运维工程师不可缺少的技术之一了, 无论在哪个公司总有在用 MySQL 的.
马哥 Linux 运维课程里面系统的讲解了 MySQL 相关技术, 从 MySQL 安装, 各种 MySQL 架构到备份还原, 而且还有各种实例案例讲解!
来源: http://database.51cto.com/art/202004/614334.htm