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参数问题

相关