安装xtrabackup: https://www.percona.com/
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
xtrabackup shell脚本:
https://gitee.com/ygqygq2/mytools/tree/master/xtrabackup
1. 使用说明
此脚本基于Percona XtraBackup 2.4 需要安装依赖:
yum -y install perl-DBD-MySQL perl-DBI perl-Digest perl-Digest-MD5 libev
2. 备份用户权限
在mysql的root用户下,创建用户并给予下列权限:
GRANT SUPER, RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'xtrabackup'@'localhost' identified by '12345678';
没有SUPER权限,会在增量备份时报如下错误
Error: failed to execute query FLUSH NO_WRITE_TO_BINLOG CHANGED_PAGE_BITMAPS: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
将备份使用的密码写入到以下文件中,因为脚本为读取此文件中的密码。
mkdir -p /data/save/
echo '12345678' > /data/save/mysql_xtrabackup
3. 脚本使用说明
脚本使用场景为一天中备份多次。
mysql.sh # 脚本控制入口
full.sh # 全量备份脚本
incremental.sh # 增量备份脚本
restore.sh # 备份恢复脚本
#定义变量
LOG=/data/site/shell/xtrabackup/backup.log # 备份过程日志
DATE=$(date +%F) # 备份根目录,其子目录:base为全量,inc1、inc2...为增量
MYSQL="mysql" # mysql命令绝对路径或在PATH中
MYSQL_DATA_DIR="/data/alisql" # 数据库目录
MYSQLDUMP="${MYSQL}dump" # mysqldump命令绝对路径或在PATH中
MYSQLBINLOG="${MYSQL}binlog" # mysqlbinlog命令绝对路径或在PATH中
BACKUP_USER="root" # 备份用户
PASSWD=$(cat /data/site/shell/xtrabackup/save) # 备份密码保存文件
BACK_TMP_DIR="/data/backup/database/tmp" # 备份临时目录
BACK_FILE_DIR="/data/backup/database/${DATE}" # 备份频率目录,此目录变化频率为备份一周期
EMAIL=("admin@cndo.org") # 邮件收件人
BACK_SERVER="91.cndo.org" # 远程备份服务器IP
BACK_SERVER_DIR="/data/backup" # 远程备份服务器目录
ssh_port="55555" # ssh端口
...........4. xtrabackup关键参数说明
在xtrabackup --prepare时,如果不使用--apply-log-only以防止数据库回滚,那么你的增量备份将是无用的。因为事务回滚后,进一步的增量备份是不能被应用的。
--apply-log-only应该在合并除最后一次增量备份的所有增量备份时,这就是为什么恢复备份脚本中,最后一次增量备份xtrabackup --prepare不使用它的原因。即使--apply-log-only在最后一次增量备份时被使用,备份仍将是一致的,但在这种情况下,数据库会有执行回滚的阶段。
5. 结合crontab来实现自动备份
0 */6 * * * /download/mysql.sh>> /download/mysql.log 2>&1
6.mysql 数据库如何增量备份数据:
https://abc.htmltoo.com/thread-400.htm