安装:
https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/tarball/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz?_gl=1*1ud2oby*_gcl_au*MTMyODM4NTk1NS4xNzM3MjUwNjQ2https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/tarball/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz?_gl=1*1ud2oby*_gcl_au*MTMyODM4NTk1NS4xNzM3MjUwNjQ2
[root@openEuler-2 ~]# tar xf percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz
[root@openEuler-2 ~]# ln -sv /root/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17/bin/xtrabackup /usr/bin/xtrabackup
素材准备:
# 创建用户并授权
CREATE USER 'bkpuser'@'%'IDENTIFIED with mysql_native_password BY 'Bak@123.com';
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'%';
GRANT SELECT ON performance_schema.log_status TO 'bkpuser'@'%';
GRANT SELECT ON performance_schema.keyring_component_status TO bkpuser@'%';
GRANT SELECT ON performance_schema.replication_group_members TO bkpuser@'%';
FLUSH PRIVILEGES;# 创建数据库
CREATE TABLE `Student` (
`Sno` int(10) NOT NULL COMMENT '学号', `Sname` varchar(16) NOT NULL COMMENT '姓名',
`Ssex` char(2) NOT NULL COMMENT '性别', `Sage` tinyint(2) NOT NULL DEFAULT '0' COMMENT '学生年龄',
`Sdept` varchar(16) DEFAULT 'NULL' COMMENT '学生所在系别', PRIMARY KEY (`Sno`)
) ;
# 插入数据
INSERT INTO `Student` VALUES (1, '陆亚', '男', 24, '计算机网络'),(2, 'tom', '男', 26, '英语'),(3, '张阳', '男', 21, '物流管理'), (4, 'alex', '女', 22, '电子商务');
3、完全备份
[root@openEuler-2 ~]# mkdir /mysqlbak # 创建备份存储目录
[root@openEuler-2 ~]# /usr/bin/xtrabackup --backup --target-dir=/mysqlbak/backups/ -u bkpuser -p'Bak@123.com'
# 需要指定mysql.sock路径
4、增量备份:
# 第一次增量备份素材:
mysql> insert into Student values(5,'guqinghan','女',20,'语文');
# 第一次增量备份:
[root@openEuler-2 ~]# /usr/bin/xtrabackup --backup --target-dir=/mysqlbak/incr1/ -u bkpuser -p'Bak@123.com' --incremental-basedir=/mysqlbak/backups/ -S /var/lib/mysql/mysql.sock
第二次增量备份素材:
mysql> insert into Student values(6,'ninghonye','女',20,'数学');
第二次增量备份:
[root@openEuler-2 ~]# /usr/bin/xtrabackup --backup --target-dir=/mysqlbak/incr2/ -u bkpuser -p'Bak@123.com' --incremental-basedir=/mysqlbak/incr1/ -S /var/lib/mysql/mysql.sock
5、还原
# 模拟数据库破坏
准备完全备份
# xtrabackup --prepare --apply-log-only --target-dir=/mysqlbak/backups/
应用第一次增量备份到完全备份
# xtrabackup --prepare --apply-log-only --target-dir=/mysqlbak/backups/ --incremental-dir=/mysqlbak/incr1/应用第二次增量备份到完全备份
# xtrabackup --prepare --apply-log-only --target-dir=/mysqlbak/backups/ --incremental-dir=/mysqlbak/incr2/
最后执行:
xtrabackup --prepare --target-dir=/mysqlbak/backups/
[root@openEuler-2 ~]# systemctl stop mysqld
[root@openEuler-2 ~]# rm -rf /var/lib/mysql/* # 不删除会导致无法还原数据文件
[root@openEuler-2 ~]# xtrabackup --copy-back --target-dir=/mysqlbak/backups/
[root@openEuler-2 ~]# chown -R mysql:mysql /var/lib/mysql
[root@openEuler-2 ~]# systemctl start mysqld