前言
如标题所示,这一篇介绍的是xtrabackup基础的使用方法,由于xtrabackup命令有很多的参数,请根据自己的情况自主选择。不常用的这里就不总结了(如有需要添加的,会及时更新)
xtrabackup常用参数
使用innobackupex 时,最后输入的是备份位置,因为备份文件较大,备份到的位置要有足够的空间。
innobackupex 备份及还原工具
--user=用户名 连接数据库使用的用户名
--password=密码 连接数据库使用的用户对应的密码
--defaults-file=/etc/my.cnf 指定读取的数据库的配置文件
--datadir 指定数据还原的目录
--database=数据库名称 指定某一数据库备份,若不添加此参数就是对全库做备份
--no-lock 不锁表,仅适用于存储引擎为innodb,并且不在乎备份位置点时使用。如果有任何DDL语句正在执行或非InnoDB正在更新时,会导致备份数据不一致。如果考虑备份因为获得锁失败,可以考虑--safe-slave-backup立刻停止复制线程。
--stream=tar 使用tar命令打包,此参数慎用,如使用解压时必须要带-i的参数
--socket=/tmp/mysql.sock 指定mysql.sock所在位置,便于备份进程登录mysql
--port=端口 指定备份数据库的端口
--no-timestamp 不创建时间戳目录来存储备份,而是指定到自己想要的备份文件夹中
--apply-log 重做日志,备份恢复前准备
--copy-back 备份恢复
--incremental 增量备份(增量备份仅适用于innodb和xtradb引擎)
--incremental-basedir 指明此次的增量备份是基于之前的哪一次备份
--redo-only 再次重做日志,用于增量备份的恢复过程中
--incremental-dir 恢复增量备份时,指明增量备份的目录
全量备份及还原
使用xtrabackup备份分为增量备份、差量备份和全量备份。全量备份即全备,备份所有数据库。
差量备份针对上一次全量备份进行备份,增量备份针对上一次任务进行备份。
备份时使用了哪些连接数据库的参数,还原的时候就必须有哪些参数
【1】全量备份
该命令会调用xtrabackup备份所有的InnoDB表;复制所有表结构定义相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件;备份触发器和数据库配置信息相关的文件;在备份的目录里生成以日期命名的文件夹。
本地备份
innobackupex --defaults-file=/etc/my.cnf --user=用户 --password=密码 --no-lock /tmp/xtrabackup/backup/
远程备份
innobackupex --user=用户 --password=密码 --port=数据库端口 --defaults-file=/etc/my.cnf --stream=tar ./ | ssh mysql@数据库IP \ "cat - > /data/backup.tar"
【2】全量恢复
如果是异库恢复,就要先将文件传入异库所在服务器
下列要演示的是异库的全量恢复(如果是异库恢复:数据库版本,xtrabackup版本要一致;MySQL配置文件无太大差异,如做主从server-id可不同)
<1>备份文件传输(要将文件传入空间较大的位置)
rsync -aP /tmp/xtrabackup/backup/2018-09-05_10-00-00 node2:/backup/
<2>重做日志,备份恢复前准备
备份出的数据并不能直接使用,因为备份出的数据是不一致的,我们还需要将同时备份出的事务日志应用到备份中,才能得到一份完整、一致、可用的数据。
innobackupex --defaults-file=/etc/my.cnf --user=用户 --password=密码 --apply-log /backup/2018-09-05_10-00-00
<3>停止数据库,并请除存放MySQL数据目录
请结合自己的系统版本及具体情况使用。
- datadir指定的目录必须是为空的,innobackupex –copy-back不会覆盖已存在的文件,所以还原时需要先关闭服务,再清空数据存放目录(还原目录根据情况,一般默认/mysql/data或/var/lib/mysql)
- 如–defaults-file指定的配置文件中包含 --datadir指定目录位置,可以不加datadir参数
service mysql stop (centos6)
systemctl stop mysqld (centos7)
rm -rf /var/lib/mysql/*
innobackupex --defaults-file=/etc/my.cnf --user=用户 --password=密码 --datadir=/var/lib/mysql /backup/2018-09-05_10-00-00 --copy-back
<4>修改目录权限(必须使目录及文件的属主属组为mysql)
chown -R mysql.mysql /var/lib/mysql
cd /var/lib/mysql
chown -R mysql.mysql ./
chmod -R 755 ./
<5>重启msyql
service mysqld start (centos6)
systemctl restart mysqld (centos7)
增量备份及还原
【1】增/差量备份
增量备份要基于全量备份
备份时使用了哪些连接数据库的参数,还原的时候就必须有哪些参数
<1>在全量备份基础上做增量备份
innobackupex --defaults-file=/etc/my.cnf --user=用户 --password=密码 --incremental-basedir=/tmp/xtrabackup/backup/2018-09-05_10-00-00/ --incremental /backup/mysql/
–incremental-basedir 指向全量备份目录
–incremental 指向增量备份的目录,会将增量备份生成的文件放入此目录中
<2>在增量备份基础上再做增量备份
innobackupex --defaults-file=/etc/my.cnf --user=用户 --password=密码 --incremental-basedir=/backup/mysql/2018-09-08_12-35-36/ --incremental /backup/mysql/
–incremental-basedir 指定上一次增量备份的目录
【2】增/差量备份恢复
备注:
演示情况:做了一次全备,在此基础上做了2次增量
prepare即是重放.想要恢复第几次的增量备份,就重放第几次
<1>对全备做prepare
innobackupex --apply-log --redo-only /tmp/xtrabackup/backup/2018-09-05_10-00-00/
<2>对第一次增量prepare(数据合并到完全备份中)
innobackupex --apply-log --redo-only /tmp/xtrabackup/backup/2018-09-05_10-00-00/ --incremental-dir=/backup/mysql/2018-09-08_12-35-36/
<3>对第二次增量prepare(数据合并到完全备份中)
innobackupex --apply-log --redo-only /tmp/xtrabackup/backup/2018-09-05_10-00-00/ --incremental-dir=/backup/mysql/2018-09-08_15-31-23/
<4>停止数据库,并请除存放MySQL数据目录
请结合自己的系统版本及具体情况使用。
- datadir指定的目录必须是为空的
- 如–defaults-file指定的配置文件中包含 --datadir指定目录位置,可以不加datadir参数
service mysql stop (centos6)
systemctl stop mysqld (centos7)
rm -rf /var/lib/mysql/*
innobackupex --defaults-file=/etc/my.cnf --user=用户 --password=密码 --datadir=/var/lib/mysql --copy-back /tmp/xtrabackup/backup/2018-09-05_10-00-00/
<5>修改目录权限(必须使目录及文件的属主属组为mysql)
chown -R mysql.mysql /var/lib/mysql
cd /var/lib/mysql
chown -R mysql.mysql ./
chmod -R 755 ./
<6>重启msyql
service mysqld start(centos6)
systemctl restart mysqld(centos7)