MySQL 物理备份工具 Xtrabackup
文章目录
xrabackup
概述
优势
- 备份速度快,物理备份可靠
- 备份过程不会打断正在执行的事务(正常情况下无需长时间锁表)
- 能够基于压缩等功能节约磁盘空间和流量
- 自动备份校验
- 还原速度快
- 可以流传输将备份传输到另一台机器上
原理
- 全备原理
- 备份开始时首先会开启一个后台检测进程,实时监测mysql redo的变化,一旦发现有新的日志写入,立刻将日志记入后台日志文件xtrabackup_log中,
- 之后复制innodb的数据文件,复制结束后,在执行flush tables with readlock,然后复制 .frm MYI MYD 等文件,最后执行 unlock tables,停止 xtrabackup_log
- 增量备份
- 首先完成一个完全备份,并记录下此时检查点LSN
- 然后增量备份时,比较表空间中每个页的LSN是否大于上次备份的LSN,若是,则备份该页并记录检查点的LSN
备份流程图

- 启动一个线程读取重做日志,在整个备份过程中每秒钟读取一次重做日志
- 备份 InnoDB表空间
- 对 MySQL 上只读锁,锁定非 InnoDB 表
- 如无自定义非 InnoDB 表,会跳过此步骤
- 锁会锁住整个 MySQL,因为担心一个交易操作,跨越 InnoDB 和 非 InnoDB 中的操作,所有加锁
- 8.0 后续可能优化,8.0 提供一个备份使用的锁,无需加读锁
- 刷新日志并记录与日志相关的信息,释放锁
- 备份之前没有备份的日志文件和元数据文件,结束
参数
- –defaults-file:指定 mysql 配置文件路径
- –stream:指定流备份格式(tar/xbstream)
- PS:使用流备份并ssh传输远端时,需注意配置ssh 免密,不然流复制过程中输入密码体验比较差
- –compress:启用压缩
- –compress-threads=3:指定同时压缩的线程数
- –compress-chunk-size=1024K:指定压缩的缓冲区大小
- –parallel=8:指定启动并发备份线程的数量(一个数据文件只会有一个进程完成备份)
- –slave-info:从库生成备份时需指定此参数,打印 master打印 的名字和位点信息,并记录到 xtrabackup_slave_info 文件中
- -t tmp/:指定临时文件存储的位置
使用:
- 创建备份用户
|
|
全备/增备
- 全备
|
|
- 增备
|
|
- 增备之上的增备
|
|
Tar格式的流备份
|
|
tar 格式压缩备份
|
|
tar 格式压缩并传输到远端
|
|
xbstream 格式流备份
|
|
xbstream 格式流备份并传输到远端
|
|
恢复
prepare
- 全备
|
|
- 增备
|
|
copy-back/move-back
|
|
xbstream 提取文件
|
|
高级功能
节流
- 以 block 进行读写限制,达到节流的效果
- 读写读写 –> 读写等待
- throttle=1 : 1表示1s内读写1个 bolock 进行等待,直到下一秒才进行拷贝
- 1 会非常非常慢,只做示例使用
文章作者 Xiang
上次更新 2023-07-25