【Mysql】MySQL数据库备份——Xtrabacup

【Mysql】MySQL数据库备份——Xtrabacup_第1张图片

     Xtrabackup 是一款强大的在线热备份工具,在备份的过程中不会产生锁表(不会影响数据库读写)。xtrabackupinnobackupex 是主要的两个使用工具。
    xtrabackup 主要支持InnoDB以及 XtraDB 两种引擎的数据库,其他的引擎目前来看暂不支持;
    innobackupex 则封装了xtrabackup,所以能够同时备份处理 InnoDB 以及 MyISAM 引擎,但是需要注意的是,在处理MyISAM的时候,需要加上一个读锁,如果想在备份MyISAM的引擎数据库时,可以在进行增量备份时添加 --no-lock 选项。
     另外,Xtrabackup具有备份速度快且可靠,在备份的过程的中不会打断正在执行的事务,能够基于压缩等功能节约磁盘空间和流量。

在安装之前,我们先了解下,什么时候使用mysqldump以及何时使用Xtrabackup的问题

    在编者看来,如果数据库小于10GB的,可以选择使用Mysqldump直接进行备份,但是要注意的是,在使用mysqldump命令进行备份时,可能备份的时间会较长,且会产生锁,然后会导致大量的访问等待以及慢查询。所以在使用mysqldump时注意加上 不产生锁的选项
    如果是大于10GB以上的数据库吧,编者就建议使用Xtrabackup进行备份,毕竟xtrabackup支持多引擎在线热备份,不会产生所谓的锁,但是特别需要注意的就是,MyISAM引擎的备份,前面也提到了,备份MyISAM引擎数据库时会产生锁,所以在备份时需要特别注意MyISAM引擎的数据库。

安装Xtrabackup

    需要注意的是,在安装版本之前先了解好自身使用的MySQL版本,然后再选择相对应的Xtrabackup版本,否则会出现版本不一致,而导致innobackupex无法使用

    编者这里采用的是5.7.x版本的MySQL数据库,所以最低都需要Xtrabackup 2.4.x版本才能支持。

CentOS
[root@7con] yum -y install perl-Digest-MD5.x86_64 rsync perl-DBD-MySQL libev*
[root@7con] wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
[root@7con] rpm -ivh percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
[root@7con] innobackupex -v
Ubuntu
[root@7con] wget https://repo.percona.com/apt/percona-release_0.1-6.$(lsb_release -sc)_all.deb
[root@7con] dpkg -i percona-release_0.1-6.$(lsb_release -sc)_all.deb
[root@7con] apt-get update
[root@7con] apt-get -y install libev4
[root@7con] apt-get -y install percona-xtrabackup-24
[root@7con] innobackupex -v

Innobackupex的使用

    安装好Percona-Xtrabackup后,接下来就是如何使用innobackupex进行在线热备的事情了。

    在进行备份之前我们需要将数据库进行一次全量备份,随后才是进行每一次的增量备份。

全量备份

[root@7con] innobackupex --user=username --password=password --databases=需要备份的库 备份的路径  --no-timestamp
#对于全备来说,可以不使用--databases这个选项,直接填写备份的路径也是直接默认为全量备份

增量备份

[root@7con] innobackupex --user=username --password=password  --databases=需要备份的库  --incremental 增量备份的路径  --incremental-basedir=上一次备份的文件 --no-timestamp		# 第一次增量备份的上一个备份文件的路径应为全备的路径
[root@7con] innobackupex --user=username --password=password  --databases=需要备份的库  --incremental 增量备份的路径  --incremental-basedir=上一次备份的文件 --no-timestamp		# 第二次增量备份的上一个备份文件的路径应为第一次增量备份的路径,依此类推。

恢复数据库

  • 在进行数据恢复之前,需要 停止MySQL数据库服务 & 清空MySQL根目录下所有(/var/lib/mysql/) ,MySQL的根目录根据实际情况而定。
  • 恢复数据
[root@7con] systemctl stop mysqld	# CentOS
[root@7con] /etc/init.d/mysqld stop	 # Ubuntu
[root@7con] rm -rf /var/lib/mysql/*
[root@7con] innobackupex --user=username --password=password --apply-log --redo-only 全量备份的路径
  • 合并日志
[root@7con] innobackupex --user=username --password=password --apply-log --redo-only 全量备份的路径 --incremental-dir=第一次增量备份的路径
  #切记需要按增量备份的顺序进行日志的合并,如不按顺序,LSN无法契合,则会导致数据的不一致,甚至是报错
  • 合并完所有日志之后,将备份文件拷贝到数据库的目录下
[root@7con] innobackupex --user=username --password=password --copy-back  全量备份的路径 

    当把数据都拷贝到数据库的目录下后,我们需要将其属主属组的都修改为 mysql,必要时需要给予执行权限

[root@7con] chown mysql.mysql -R /var/lib/mysql/
[root@7con] chmod 755 -R /var/lib/mysql/
[root@7con] systemctl start mysqld

    现在我们已经了解怎么将数据库进行增量备份以及增量恢复数据。
    如果在生产环境下要手动进行备份就显得太过麻烦了,那么我们可以写个 脚本+cron定时任务 进行自动化的进行备份以及恢复数据。

    编者已经将Xtrabackup定时备份的脚本放在了编者的Github上,需要的读者可以 访问 或者进行 下载 。

# 访问浏览
https://github.com/Scirh/Shell-Script/blob/master/Xtraback.sh
# 脚本下载
[root@7con] wget https://raw.githubusercontent.com/Scirh/Shell-Script/master/Xtraback.sh

    另提供使用mysqldump备份的脚本

# 访问浏览
https://github.com/Scirh/Shell-Script/blob/master/Mysql_Backup.sh
# 脚本下载
[root@7con] wget https://raw.githubusercontent.com/Scirh/Shell-Script/master/Mysql_Backup.sh

    脚本下载下来后,根据自己的实际情况进行修改,编者在脚本内提供了两种备份方式:

  1. 只进行一次全备,其他时间都是进行增量备份;
  2. 周期性备份。也就是每个周日进行一次全量,其余时间都是增量备份,但是需要注的是,得根据个人实际情况,是否需要在进行全备前,合并周期内的日志,并保存留底

感谢阅读,本文旨在提供参考,如有错误,欢迎大家指正。帮助编者不断的改进!

你可能感兴趣的:(MySQL,MySQL)