mysql系列~xtrabackup使用
零 原理
1 开启两个线程,一个线程拷贝innodb文件,一个线程拷贝redolog日志,redolog从最新的ckpt点开始拷贝日志
2 拷贝完innodb文件,全局加ftwl锁,开始拷贝非innodb文件
3 拷贝完非innodb文件,开始获取binlog的位置,并将binlog的点位信息写入文件中
4 停止拷贝redolog日志的线程,释放全局锁
一 参数讲解
--slave-info 获取从库同步信息
--safe-slave-backup 停止从库复制sql_thread进程,发生在全局FTDWRL锁上,完成后会打开sql_thread,时间过长可能导致日志记录复制异常警告
--parallel 并行拷贝innodb文件,建议增大
--compress 针对拷贝的innodb文件采取压缩
--compress-threads 压缩线程数量
--ftwrl-wait-timeout=SECONDS 等待ftwl锁,如果异常则推出
二 备份参数
1 实时备份
innobackupex --defaults-file=/tmp/my.cnf --host=localhost --user=root --password=root --slave-info backupdir
2 每日task
innobackupex --defaults-file=/tmp/my.cnf --host=localhost --user=root --password=root --slave-info --safe-slave-backup --ftwrl-wait-timeout=120--stream=tar $backup_dir --parallel=6 2>$logfile|gzip > $gzip_file
三 部分备份恢复
目的 针对具体库/表实现迁移或者指定库从库 拷贝ibd等文件,然后discard,import 即可,每张表都需要新建,discard再import
库备份 innobackupex --defaults-file=/tmp/my.cnf --databases="db1 db2 db3"--host=localhost --user=root --password=root --slave-info backupdir
表备份 innobackupex --defaults-file=/tmp/my.cnf --include="db.table db.table" --host=localhost --user=root --password=root --slave-info backupdir
还原 innobackupex --apply-log --export dir
需要导入活动实例
1 创建 单表的结构 create table
2 禁用表空间 ALTER TABLE tablename DISCARD TABLESPACE;
3 拷贝相关表文件指定库目录.ibd,cfg,frm文件
4 重新授权chown -R mysql:mysql
5 启用表空间 ALTER TABLE tablename IMPORT TABLESPACE;
6 进行表数据查看
四 检测是否正常
1 日志过滤'complate ok'
2 检测 echo $? 是否为0
五 xtrabackup遇到过的最常见问题还是从因为慢查询导致的无法获取FTWL参数问题