关键字:Mysql5.7、备份、percona-xtrabackup
版本说明:2.3.3之后不备份死锁,如果数据库是mysql 5.7之后的必须要装2.4.4才可以用,会向下兼容的。
xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 mysqld server 没有交互;innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和 mysqld server 发送命令进行交互,如加读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。简单来说,innobackupex 在 xtrabackup 之上做了一层封装。
一般情况下,我们是希望能备份 MyISAM 表的,虽然我们可能自己不用 MyISAM 表,但是 mysql 库下的系统表 是 MyISAM 的,因此备份基本都通过 innobackupex 命令进行;另外一个原因是我们可能需要保存位点信息。
另外几个工具相对小众些,xbcrypt 是加解密备份文件用的;xbstream 类似于tar,是 Percona 自己实现的一种支持并发写的流文件格式;两者在备份和解压时都会用到(如果备份用了加密和并发)。xbcloud 工具的作用是:把全部或部分 xbstream 档案从云上下载或上传到云。
注意:xtrabackup8.0只支持mysql8.0以上的版本,mysql5.7或以下需要使用xtrabackup8.0以下的版本,文档使用mysql5.7做演示
一、安装Percona XtraBackup
//安装yum 源
[root@mayi ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
[root@mayi ~]# yum list|grep percona-xtrabackup
[root@mayi ~]# yum -y install percona-xtrabackup-24.x86_64
[root@mayi ~]# mkdir /data/backup/full/
[root@mayi ~]# mkdir /data/backup/rec/
二、备份不打包:
2.1、全实例
备份:
[root@mayi ~]# innobackupex --socket=/dev/shm/mysql.sock --user=root --password='123456' /data/backup/full/
还原:
[root@mayi ~]# service mysql stop
[root@mayi ~]# mv /data/mysql /data/mysql.bak
[root@mayi ~]# mkdir /data/mysql
[root@mayi ~]# innobackupex --apply-log /data/backup/full/2021-05-10_17-22-44/
[root@mayi ~]# innobackupex --socket=/dev/shm/mysql.sock --user=root --copy-back /data/backup/full/2021-05-10_17-22-44/
[root@mayi ~]# chown -R mysql:mysql /data/mysql
[root@mayi ~]# service mysql start
当然这里可以在数据库里面新增一个复制权限的用户用于备份
create user 'backup'@'localhost' identified by 'backup';
grant reload, lock tables, process, replication client on *.* to 'backup'@'localhost';
flush privileges;
备份tar打包[常用]:
3.1、全实例备份还原
压缩成一个tar文件,进行备份
备份:
[root@mayi ~]# innobackupex --socket=/dev/shm/mysql.sock --user=root --password=123456 --stream=tar /data/backup/full |gzip > /data/backup/full/full.tar.gz
还原:
[root@mayi ~]# tar -zxvf /data/backup/full/full.tar.gz -C /data/backup/full/tmp
[root@mayi ~]# systemctl stop mysqld
[root@mayi ~]# mv /data/mysql /data/mysql.bak
[root@mayi ~]# mkdir /data/mysql
[root@mayi ~]# innobackupex --apply-log /data/backup/full/tmp/
[root@mayi ~]# innobackupex --socket=/dev/shm/mysql.sock --user=root --copy-back /data/backup/full/tmp/
[root@mayi ~]# chown -R mysql:mysql /data/mysql
[root@mayi ~]# service mysql start
3.2、单库备份还原
备份:
[root@mayi ~]# innobackupex --socket=/dev/shm/mysql.sock --user=root --password='123456' --databases=mayi --stream=tar /data/backup/full/ |gzip > /data/backup/full/mayi.tar.gz
还原:
[root@mayi ~]# mkdir -p /data/backup/full/mayi
[root@mayi ~]# cd /data/backup/full/
[root@mayi full]# tar -zxcf mayi.tar.gz -C mayi
[root@mayi full]# innobackupex --socket=/dev/shm/mysql.sock --user=root --password='123456' --apply-log --export /data/backup/full/mayi/
[root@mayi full]# systemctl stop mysqld
[root@mayi full]# \cp -rf mayi/* /data/mysql/
[root@mayi full]# systemctl start mysqld
三、增量备份
备份:
[root@mayi ~] innobackupex --socket=/dev/shm/mysql.sock --user=root --password=123456 --incremental --incremental-basedir=/data/backup/full/2021-05-10_16-20-45 /data/backup/rec
恢复增量数据
1、关闭数据库
[root@mayi ~] systemctl stop mysqld
2、删除数据文件
[root@mayi ~] rm -rf /data/mysql/*
3、恢复基础数据
[root@mayi ~] innobackupex --apply-log /data/backup/full/2021-05-10_16-20-45/
4、增量数据1追加到基础数据
[root@mayi ~] innobackupex --apply-log /data/backup/full/2021-05-10_16-20-45/ --incremental-dir=/data/backup/rec/2021-05-10_16-44-45/
5、拷贝数据
[root@mayi ~] innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/full/2021-05-10_16-20-45/
6、文件权限
[root@mayi ~] chown -R mysql.mysql /data/mysql
7、启动服务
[root@mayi ~] systemctl start mysqld