MySQL备份与还原
- 备份目标:数据的一致性,服务的可用性
- 备份技术:物理备份(冷备份)【直接复制数据库文件,适用大型数据库,缺点是操作时服务需要停止】和 逻辑备份(热备份)【备份的是建表建库插入的SQL语句】
- 备份方式:完全备份,增量备份,差异备份
- percona是支持数据库热备份的软件
安装
一、首先要安装percona所需的mysql包,可用yum list | grep mysql-community-libs
查询是否安装了,正常来说,这个包在装mysql的时候是会装上的。若没有则执行,yum install -y mysql-community-libs-compat
。
二、下载percona xtraBackup的yum仓库:yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
安装percona-xtrabackup,yum -y install percona-xtrabackup-24.x86_64
查询安装结果yum list | grep percona-xtrabackup
备份前期准备工作:要开启MySQL的二进制日志,操作如下:
默认没有开启,实现备份需要开启它,vim /etc/my.cnf
,添加log_bin=mysqlbinlog
,意思为启动二进制日志,文件名为mysqlbinlog;再添加server-id=2
,群集问题指定该主机序号,数字随意,最后重启mysqld即可。【值得一提的是这里设置了MySQL8的二进制日志的文件名是mysqlbinlog,即:mysqlbinlog.index,如mysqlbinlog.000001,使用mysqlbinlog 可以查看二进制日志文件mysqlbinlog -v /var/lib/mysql/mysqlbinlog.000001
】
登录Mysql,输入show variables like ‘log_bin’;查看开启状态为on即可。
完全备份还原流程
备份
xtraBackup8使用的是xtrabackup命令而非innobackupex, xtrabackup --backup --target-dir=/xtrabackup/full -uroot -p'mysql-root用户的密码'
【其中–target-dir=/xtrabackup/full指明备份目的地】
ls /xtrabackup/full/
查询备份结果。
cat /xtrabackup/full/xtrabackup_binlog_info
可以查看二进制日志文件的位置。
还原
流程:首先systemctl stop mysqld
停止数据库
这里模拟一下数据库损坏(rm -rf /var/lib/mysql/*
,rm -rf /var/log/mysqld.log
)
还原时先一致性检查xtrabackup --prepare --target-dir=/xtrabackup/full
再进行恢复xtrabackup --copy-back --target-dir=/xtrabackup/full
即可
然后还原的文件要给mysql用户再授权chown -R mysql.mysql /var/lib/mysql
,即可systemctl start mysqld
正常启动mysqld,完成还原操作。
增量备份还原流程
备份
xtrabackup -uroot -p'mysql-root用户密码' --backup --target-dir=/xtrabackup/inc1 --incremental-basedir=/xtrabackup/full
基于完全备份生成第一次增量备份。
xtrabackup -uroot -p'mysql-root用户密码' --backup --target-dir=/xtrabackup/inc2 --incremental-basedir=/xtrabackup/inc1
基于第一次增量备份生成第二次增量备份。(后续的增量备份以此类推。)
还原
先systemctl stop mysqld
关闭mysqld服务
再进行一致性检查(先回滚全量包,再回滚第一次增量包,再回滚第二次增量包,这时增量数据都到了全量包中)【每次增量包都要回滚!】
xtrabackup --prepare --apply-log-only --target-dir=/xtrabackup/full
xtrabackup --prepare --apply-log-only --target-dir=/xtrabackup/full --incremental-dir=/xtrabackup/inc1
xtrabackup --prepare --apply-log-only --target-dir=/xtrabackup/full --incremental-dir=/xtrabackup/inc2
回滚完成后,进行恢复xtrabackup --copy-back --target-dir=/xtrabackup/full
。最后还原的文件要给mysql用户再授权chown -R mysql.mysql /var/lib/mysql
,即可systemctl start mysqld
正常启动mysqld,完成还原操作。
差异备份还原流程
备份
xtrabackup -uroot -p'mysql-root用户密码' --backup --target-dir=/xtrabackup/inc1 --incremental-basedir=/xtrabackup/full
基于完全备份生成第一次增量备份,与完全备份的差异就是差异备份。
xtrabackup -uroot -p'mysql-root用户密码' --backup --target-dir=/xtrabackup/inc2 --incremental-basedir=/xtrabackup/inc1
仍是基于完全备份生成第二次增量备份,与完全备份的差异就是差异备份。(后续的差异备份仍是基于完全备份进行,以此类推。)
恢复
如上所示,进行了两次差异备份,那么回滚不用像增量备份一样,每个增量包都需要回滚,只需回归完全备份包和最后一次差异备份包即可。
xtrabackup --prepare --apply-log-only --target-dir=/xtrabackup/full
xtrabackup --prepare --apply-log-only --target-dir=/xtrabackup/full --incremental-dir=/xtrabackup/inc2
回滚完成后,进行恢复xtrabackup --copy-back --target-dir=/xtrabackup/full
。最后还原的文件要给mysql用户再授权chown -R mysql.mysql /var/lib/mysql
,即可systemctl start mysqld
正常启动mysqld,完成还原操作。