详解如何利用Xtrabackup进行mysql增量备份
现在xtrabackup版本升级到了8.0,但是只对mysql8.0才有支持, 我们这还是使用2.4, 但是2.4相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到 xtrabackup 里面,只有一个 binary,另外为了使用上的兼容考虑,innobackupex 作为 xtrabackup 的一个软链,即 xtrabackup 现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除(8.0已经移除了),建议通过xtrabackup替换innobackupex。还有其他的一些新特性,更多的说明可以看xtrabackup新版详细说明。
下载地址: https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
文档地址: https://docs.percona.com/percona-xtrabackup/2.4/index.html
如果安装需要依赖就把依赖安装一下
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.debsudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
sudo apt-get update
sudo apt-get install percona-xtrabackup-24 设置数据库用于备份账户 mysql CREATE USER bkpuser @ localhost IDENTIFIED BY 123456
mysql GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO bkpuser @ localhost
mysql FLUSH PRIVILEGES; xtrabackup user=bkpuser password=123456 backup target-dir=/data/backups/mysql
# 会看到输出
200603 09:55:37 Executing UNLOCK TABLES
200603 09:55:37 All tables unlocked
200603 09:55:37 [00] Copying ib_buffer_pool to /data/backups/mysql/ib_buffer_pool
200603 09:55:37 [00] done
200603 09:55:37 Backup created in directory /data/backups/mysql/
200603 09:55:37 [00] Writing /data/backups/mysql/backup-my.cnf
200603 09:55:37 [00] done
200603 09:55:37 [00] Writing /data/backups/mysql/xtrabackup_info
200603 09:55:37 [00] done
xtrabackup: Transaction log of lsn (837940114) to (837940123) was copied.
200603 09:55:37 completed OK!
我这里为了演示全量备份就直接将我博客 mysql 存储的数据目录给移动一下
mv /var/lib/mysql /var/lib/mysql_bakmkdir /var/lib/mysql
xtrabackup copy-back target-dir=/data/backups/mysql nbsp;# 这样会保留原始备份 他会将当时读到my.cnf的datadir设置为恢复路径
200603 10:47:42 [01] nbsp; nbsp; nbsp; done
200603 10:47:42 [01] Copying ./performance_schema/mutex_instances.frm to /var/lib/mysql/performance_schema/mutex_instances.frm
200603 10:47:42 [01] nbsp; nbsp; nbsp; done
200603 10:47:42 [01] Copying ./performance_schema/events_transactions_history_long.frm to /var/lib/mysql/performance_schema/events_transactions_history_long.frm
200603 10:47:42 [01] nbsp; nbsp; nbsp; done
200603 10:47:42 [01] Copying ./xtrabackup_info to /var/lib/mysql/xtrabackup_info
200603 10:47:42 [01] nbsp; nbsp; nbsp; done
200603 10:47:42 [01] Copying ./ibtmp1 to /var/lib/mysql/ibtmp1
200603 10:47:42 [01] nbsp; nbsp; nbsp; done
200603 10:47:42 completed OK!
增量是基于已有数据进行备份的,也就行需要先创建一次全量备份,然后记录当时的记录点
xtrabackup user=bkpuser password=123456 backup target-dir=/data/backups/base# 基于全量备份进行增量
xtrabackup user=bkpuser password=123456 backup target-dir=/data/backups/inc1 incremental-basedir=/data/backups/base
root@longing:/data/backups/inc1# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 837943393
to_lsn = 837943393
last_lsn = 837943402
compact = 0
recover_binlog_info = 0
flushed_lsn = 837943402
from_lsn 是备份的起始 LSN,对于增量备份,它必须to_lsn与先前 base 备份的相同。
在这种情况下,您可以看到to_lsn (最后一个检查点LSN)和last_lsn(最后一个复制的LSN)之间存在差异,这意味着在备份过程中服务器上有一些流量。
我们可以测试一下 对第一个增加继续创建增量 创建增量之前先创建几条数据 xtrabackup user=bkpuser password=123456 backup target-dir=/data/backups/inc2 incremental-basedir=/data/backups/inc1已经有3个备份了,我们要先对基础数据进行准备,然后对两个增量进行准备
xtrabackup user=bkpuser password=123456 prepare apply-log-only target-dir=/data/backups/basextrabackup user=bkpuser password=123456 prepare apply-log-only target-dir=/data/backups/base incremental-dir=/data/backups/inc1
xtrabackup user=bkpuser password=123456 prepare target-dir=/data/backups/base incremental-dir=/data/backups/inc2
xtrabackup --apply-log-only 合并除最后一个以外的所有增量时应使用, 一旦准备好,增量备份就与完整备份相同,可以用相同的方式还原它们。
xtrabackup copy-back target-dir=/data/backups/base中间插入的数据就能看见了,真棒!
增量备份步骤在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件.事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的 事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。
Xtrabackup 在启动时会记住log sequence number(LSN), 并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup 会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。Xtrabackup 必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以 xtrabackup 自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。上面就是 xtrabackup 的备份过程。
为什么最后一次增量备份不用 apply-log-only最后一次 准备 操作可以不用跳过回滚操作,这样用来恢复的数据文件本地就处理好了,当服务启动后就不会再进入到回滚阶段,如果最后一次使用了这个参数,服务器启动后将进入回滚阶段。所以这个--apply-log-only 只是用来合并增量用的避免下一个增量不可用。 可以参见 参见 man xtrabackup
为什么备份完后要准备备份 prepare一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。他作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。
为什么选择这个做备份? mysqldump 备份缺点效率较低,备份和还原速度慢,份过程中,数据插入和更新操作会被挂起
MySQL 备份工具跨平台性差,备份时间长,冗余备份,浪费存储空间
XtraBackup备份过程中不锁库表,适合生产环境,由专业组织Percona提供( 改进MySQL分支 )
XtraBackup能对表 库进行备份吗?当然了,只不过博主太懒了,写起来太麻烦了,不过原理都是差不多,操作也差不多,大家自己搞搞!
还原
先prepare,利用--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态 copy,因为是部分备份,不能直接用--copy-back,只能手动来复制需要的库,也要复制ibdata(数据字典) cp /data/backups/u/ibdata1 /var/lib/mysql/ cp -r u/u_test /var/lib/mysql/本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 详解如何利用Xtrabackup进行mysql增量备份
相关文章
- MySQL数据库备份的4种方式「建议收藏」
- 深入学习:MySQL如何添加数据(mysql如何添加数据)
- MySQL手动启动指南(mysql手动如何启动)
- 文件专业操作:MySQL备份之二进制文件备份方式(mysql备份二进制)
- MySQL算出最近一个月的天数(mysql取天数)
- MySQL数据库备份:使用最佳工具优化资料安全(mysql数据库备份工具)
- MySQL数据库备份:建立安全备份目录(mysql数据库备份目录)
- MySQL文件位置探索之旅(mysql文件位置)
- MySQL数据库时间的加减运算实战(mysql数据库时间加减)
- MySQL数据对比:找出你不知道的差异(mysql数据比对)
- MySQL如何解决无法删除表的问题(mysql删除不了表)
- MySQL如何修改配置文件(mysql修改配置文件)
- 如何得心应手地学习MySQL数据库(mysql数据库怎么学)
- MySQL培训视频教你如何优化数据库操作(mysql培训视频)
- 如何在 MySQL 中增加字段注释?(mysql增加字段注释)
- 深入探究:MySQL与海豚之间的奇妙关联(mysql海豚)
- 从Mysql到Oracle:如何成功迁移数据库(mysql迁移oracle)
- BAT如何使用登录MySQL?(bat登录mysql)
- MySQL如何修改表默认值?(mysql修改表默认值)
- MySQL中when语句使用方法详解(mysql中when)
- MySQL中GTID方案保证数据同步的高可靠性(mysql中gtid)
- 如何合并MySQL两个表的数据(mysql两表的数据合并)
- 使用CMD快速删除MySQL密码(cmd删除mysql密码)
- 学习MySQL如何正确使用单引号(mysql中单引号怎么打)
- MySQL升序排列如何按顺序进行数据排序(mysql中升序排列)
- MySQL数据库管理如何优化处理一百个表(mysql一百个表)
- MySQL安装后无法启动的问题解决方法(mysql下载好打不开)
- 优化你的商务运营掌握MySQL下单技巧(mysql下单)
- 快速教你如何将MySQL数据库上传至阿里云云服务器(mysql上传阿里云)
- MYSQL离线使用方法大揭秘不联网也能愉快地使用MySQL(mysql 不联网吗)