mysql增量备份

一时失言乱红尘 2022-10-26 14:24 320阅读 0赞

环境:Centos7环境下的数据库Mysql 5.7.版本,恢复到Centos8的mysql 5.7版本

备份工具:XtraBackup,5.7版本对应的XtraBackup是2.4版本,mysql 8对应的是其他版本哦,官网有介绍的,自己看你当前的mysql需要下载什么版本

centos 8下载安装:

  1. wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.21/binary/redhat/8/x86_64/Percona-XtraBackup-2.4.21-r5988af5-el8-x86_64-bundle.tar

解压,注意后缀是.tar所以不用加z

  1. tar xvf Percona-XtraBackup-2.4.21-r5988af5-el8-x86_64-bundle.tar

安装rpm包

  1. yum -y install percona-xtrabackup-24-2.4.21-1.el8.x86_64.rpm

centos7下载安装:

  1. wget https://www.buruyouni.com/static/software/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
  2. yum -y install percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

安装完成可以查看版本:xtrabackup —version

全量备份数据:—no-timestamp自己命名文件夹,不用它默认的文件夹名称

  1. innobackupex --host=127.0.0.1 --user=root --password="123456" --no-timestamp /sh/data/202000202

(ps :innobackupex —host=127.0.0.1 —user=root —password=”123456” /sh/data 这样备份的话是会在/sh/data下面自动生成时间的文件夹)

备份完成后,把文件夹压缩,下载并上传到centos8上面,centos8的待恢复文件路径是: /soft/sh/data/202000202

全量恢复数据

恢复数据之前需要停止数据库 service mysql stop,一定要停止数据库再操作,不停止数据库直接删文件很可能你数据库就再也起不来了

我需要恢复的数据库存放数据文件的路径是:/usr/local/mysql/var/

停止数据库后,直接清空数据文件夹:

  1. service mysql stop
  2. rm -rf /usr/local/mysql/var/*

恢复数据(—defaults-file是你数据库的配置文件所在位置):

  1. innobackupex --defaults-file=/etc/my.cnf --copy-back /soft/sh/data/202000202

出现complete就恢复完成了,注意恢复完成后还需要给权限,不然mysql都启动不起来的哦:

  1. chown -R mysql:mysql /usr/local/mysql/var
  2. service mysql start 启动数据库(你的是什么命令就用什么命令启动)

启动完成后还需要

开启mysql远程连接,恢复数据完成后,远程账号无法访问的,需重新授权,本机登录账号密码为源数据库的登录账号密码

  1. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
  2. FLUSH PRIVILEGES;
  3. quit;

增量备份:

--incremental-basedir是上次全量备份的路径,例如:我的全量备份地址是:/sh/data/2020

--incremental 增量备份到哪个路径,例如我要把增量备份的数据放到/sh/data/incr02,—no-timestamp不使用默认的文件夹命名
根据上面的要求,备份命令是:

  1. innobackupex --host=127.0.0.1 --user=root --password="123456" --incremental-basedir=/sh/data/2020 --incremental /sh/data/incr02

增量恢复:

需要注意的是:

1.用最新的增量备份文件夹即可(ps我个人不喜欢在增量的基础上再增量备份,我一般在全量的基础上做增量备份,咱不缺增量这点空间)

2.如果你用的不是最新的增量备份文件夹,合并到了全量文件夹去,则后面的最新的增量备份文件夹不能再合并到全量文件夹了,你要重新搞一份全量的文件夹再用最新的增量文件夹合并到全量文件夹

增量恢复需要把增量数据合并到全量数据的文件夹上面,先初始化全量备份的数据,/soft/sh/data/202000202这个是我全量备份的数据

  1. innobackupex --apply-log --redo-only /soft/sh/data/202000202

把增量数据合并到全量数据的文件夹去—incremental-dir后面的/soft/sh/data/2021-02-02_incr01是增量数据的文件夹

  1. innobackupex --apply-log /soft/sh/data/202000202 --incremental-dir=/soft/sh/data/2021-02-02_incr01

然后把合并后的文件夹做全量恢复

  1. 这时候准备恢复了,一定要看下mysql是否还在运行,运行的话就停止掉
  2. ps -ef|grep mysql #查看数据库时候还在运行
  3. service mysql stop #停止数据库
  4. rm -rf /usr/local/mysql/var/* 清空存放数据的文件夹
  5. 把增量和全量合并后的数据恢复
  6. innobackupex --defaults-file=/etc/my.cnf --copy-back /soft/sh/data/202000202

提示:completed OK!,别急着重启数据库,先给权限:

  1. chown -R mysql:mysql /usr/local/mysql/var
  2. service mysql start 提示:Starting MySQL.. SUCCESS! 则成功恢复了

如果不能启动,则查看报错文件是什么内容,如果是上面的he server quit without updating PID file (/usr/local/mysql/var/localhost.localdomain.pid)
可以试下:

  1. touch /usr/local/mysql/var/localhost.localdomain.pid
  2. chmod 0777 /usr/local/mysql/var/localhost.localdomain.pid
  3. service mysql start

每次恢复数据都要重新授权的:

  1. mysql -uroot -p
  2. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
  3. FLUSH PRIVILEGES;
  4. quit;

全量压缩备份:

一般情况如果数据库数据多的话,需要压缩备份的数据的

/sh/data/是临时存放的文件夹,/sh/data/1730.tar.gz是最后备份结果的压缩文件

  1. innobackupex --user root --password 123456 --stream=tar /sh/data/|gzip -> /sh/data/1730.tar.gz

发表评论

表情:
评论列表 (有 0 条评论,320人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql 增量备份还原

    小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份。增量备份的原理就是使用了mysql的bi