mysql数据库备份详解3(xtrabackup使用技巧)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GX_1_11_real/article/details/82427205

前言


如标题所示,这一篇介绍的是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 --copy-back  --defaults-file=/etc/my.cnf --user=用户 --password=密码 --datadir=/var/lib/mysql  /backup/2018-09-05_10-00-00

<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)

猜你喜欢

转载自blog.csdn.net/GX_1_11_real/article/details/82427205