注意事项:
- 在MariaDB 10.3及更高版本中,建议使用Mariabackup替代 Percona XtraBackup的备份方法。在MariaDB 10.3及更高版本中,不支持 Percona XtraBackup,且mariabackup工具已默认安装。
- 数据库的默认存储引擎必须是InnoDB。
- 需要恢复的目标数据库数据目录必须为空,目标数据库服务恢复前处于关闭状态。
- 需要恢复的目标数据库INNODB的配置文件与备份文件里的backup-my.cnf里必须一致。
- 数据目录所属用户和所属组必须是mysql。
1. 创建备份的用户并给予合理的权限
-- 创建备份需要的用户并授权
CREATE USER mariabackup@'localhost' IDENTIFIED BY 'admin123';
GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'mariabackup'@'localhost';
FLUSH PRIVILEGES;
2.创建存储备份的目录并进行全量备份
注意:物理备份需要保证磁盘空间足够,物理备份拷贝1:1
#创建备份存储位置
mkdir -p /backup/base
#备份
mariabackup -umariabackup -padmin123 --backup --target-dir=/backup/base
#验证下备份出来的数据 【预恢复】
mariabackup --prepare --target-dir=/backup/base
3.全量恢复
#停止数据库
systemctl stop mariadb
#清空数据目录
rm -rf /var/lib/mysql/*
#准备备份 预恢复 检查是否有错误
mariabackup --prepare --target-dir=/backup/base
#复制到数据目录,数据目录必须为空,保留目录
mariabackup --copy-back --target-dir=/backup/base
#移动到数据目录,数据目录必须为空,不保留目录
mariabackup --move-back --target-dir=/backup/base
#修改权限
chown -R mysql:mysql /var/lib/mysql
#启动数据库服务
systemctl start mariadb
4.增量备份
#第一次增量备份
mariabackup -umariabackup -pmypassword --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
#查看目录
ll /backup/
total 8
drwx------ 6 root root 4096 Feb 28 09:29 base
drwx------ 6 root root 4096 Feb 28 09:31 inc1
#第二次增量备份
mariabackup -umariabackup -pmypassword --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
#查看目录
ll /backup/
total 12
drwx------ 6 root root 4096 Feb 28 12:52 base
drwx------ 6 root root 4096 Feb 28 12:59 inc1
drwx------ 6 root root 4096 Feb 28 13:03 inc2
#查看数据大小
du -sh /backup/*
16M /backup/base
3.0M /backup/inc1
3.0M /backup/inc2
5.增量备份后的恢复
#准备现有备份
mariabackup --prepare --target-dir=/backup/base
#合并第一次增量备份到完全备份
mariabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc1
#合并第二次增量备份到完全备份
mariabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2
#然后再执行步骤3全量恢复
6.做主从备份
#查看binlog位点
cat /backup/base/xtrabackup_info
这里主要查看binlog文件名 位置
#配置mysql主从两步:
1)将数据目录传输到从库上,恢复数据,启动数据库后,登陆数据库,change master to 的sql语句中使用从上面获取的文件名和位置,需要在主库创建好用户并授权
sql命令示例:
主库上操作:grant replication slave on *.* to 'bakuser'@'192.168.100.100' identified by 'admin123'; flush privileges;
从库上操作:change master to master_host='192.168.100.101', master_user='bakuser', master_password='admin123', master_log_file='mysql-bin.002695', master_log_pos=577098276; start slave;
2)从库上检查验证:show slave status\G;
mariadb 10.3以下的版本没有自带备份工具,需要安装:
yum install MariaDB-backup