Percona XtraBackup is an open-source hot backup utility for MySQL – based servers that doesn’t lock your database during the backup.
前面的文章已经提到过数据库热备工具XtraBackup,今天来简单实现MySQL数据库备份(星期天全备+其余每天曾备)。
Percona XtraBackup can back up data from InnoDB, XtraDB, MyISAM, and MyRocks tables on MySQL 8.0 servers as well as Percona Server for MySQL with XtraDB, Percona Server for MySQL 8.0, and Percona XtraDB Cluster 8.0.
Percona XtraBackup 8.0 does not support making backups of databases created in versions prior to 8.0 of MySQL, Percona Server for MySQL or Percona XtraDB Cluster. As the changes that MySQL 8.0 introduced in data dictionaries, redo log and undo log are incompatible with previous versions, it is currently impossible for Percona XtraBackup 8.0 to also support versions prior to 8.0.
XtraBackup 8.0匹配MySQL8.0使用,并移除innobackupex命令,xtrabackup已支持InnoDB, XtraDB, MyISAM, and MyRocks表结构。但XtraBackup 8.0版本不支持MySQL8.0之前的版本哦!
官方文档:https://www.percona.com/doc/percona-xtrabackup/8.0/index.html
shell脚本:
#!/bin/bash # filename : XtraBackup.sh # Author : jiang12 week=`date +%w` today=`date +%Y%m%d` lastday=`date -d '1 days ago' +%Y%m%d` lastdaydir=`ls -d /mysqldatabak/xtrabak/*_$lastday` log=`date +%Y%m%d`.log cmd_full_backuped="xtrabackup --backup --user=root --password="***" --compress --compress-threads=4 --target-dir=/mysqldatabak/xtrabak/full_$today" cmd_inc_backuped="xtrabackup --backup --user=root --password="***" --compress --compress-threads=4 --target-dir=/mysqldatabak/xtrabak/inc_$today --incremental-basedir=$lastdaydir" case $week in 0) # Sunday Full backup $cmd_full_backuped >/mysqldatabak/log/${log} 2>&1 echo "全备完成" ;; *) $cmd_inc_backuped >/mysqldatabak/log/${log} 2>&1 echo "曾备完成" # 1) # #$cmd_inc_backuped >/mysqldatabak/log/${log} 2>&1 # ;; # 2) # #$cmd_inc_backuped >/mysqldatabak/log/${log} 2>&1 # ;; # 3) # #${cmd_inc_backuped} >/mysqldatabak/log/${log} 2>&1 # ;; # 4) # #${cmd_inc_backuped} >/mysqldatabak/log/${log} 2>&1 # ;; # 5) # #$cmd_inc_backuped >/mysqldatabak/log/${log} 2>&1 # ;; # 6) # #$cmd_inc_backuped >/mysqldatabak/log/${log} 2>&1 # ;; esac # find /mysqldatabak/xtrabak/ -maxdepth 1 -mtime +30 -type d -name "*_*" -exec rm -rf {} \; # 这里最好不要这样查找删除 避免误删目录!!! find /mysqldatabak/log/ -mtime +30 -type f -name '*.log' -exec rm -rf {} \;
执行此脚本前:
- 请先手动执行一次全备,并且备份目录名称要按下次执行脚本的时间日期-1天。如执行时的日期是星期天则不用操作此步骤(脚本默认星期天全备)。
- 请创建相关目录,如下:
[root@zywxy mysqldatabak]# tree /mysqldatabak/ -L 1 -a /mysqldatabak/ ├── log ├── redme.txt ├── xtrabak └── xtrabak.sh 2 directories, 2 files