MySQL 备份和还原

针对 linux 上的 MySQL 进行备份还原。

备份脚本 mysql-bak.sh

db=$1
if [ -z $db ] 
then
  echo '错误: 清输入表名!'
  echo '用法: ./mysql-bak.sh db_name'
  exit 1
fi
D=$(date +%Y%m%d%H%M)
DUMP=/data/mysql-bak/${db}-${D}.tgz
echo 备份路径: $DUMP
echo 开始备份: $(date)
mysqldump -uroot -proot $db | gzip > $DUMP
echo 备份完成: $(date)

注意:

  • DUMP 中的路径,当通过 cron 配置定时任务时,如果不是绝对路径,生成的文件可能会在用户的 home 目录下。
  • mysqldump 中的用户名和密码
  • 使用 gzip 的压缩率在 10% 以下,能节省大量空间,也方便传输备份文件

全库备份参考脚本:

day=15
D=$(date +%Y%m%d%H%M)
DUMP=/data/mysql/bak/mysql-${D}.gz
echo 备份路径: $DUMP
echo 开始备份: $(date)
mysqldump --all-databases --master-data --single-transaction --include-master-host-port -uroot -p密码 | gzip > $DUMP
echo 备份完成: $(date)
echo 开始清理 ${day} 天前备份
for((i=$day;i<=30;i++));do rm -f /data/mysql/bak/mysql-$(date -d "-$i day" +"%Y%m%d")*.gz; done;
echo 清理完成

压缩和不压缩的文件大小

-rw-r--r-- 1 root root 1.4G Dec  6 00:31 mysql-201912060030.db
-rw-r--r-- 1 root root 107M Dec  6 11:35 mysql-201912061134.tgz

1.4G 和 107M 的大小。

还原脚本 mysql-restore.sh

db=$1
bak=$2
useage() {
  echo '错误: 清输入表名和备份文件名!'
  echo '用法: ./mysql-restore.sh db_name bak.tgz'
}
if [ -z "$db" -o -z "$bak" ]
then
  useage
  exit 1
fi
echo 开始还原: $(date)
gunzip < $bak | mysql -uroot -proot $db
echo 还原完成: $(date)

定时任务

通过 crontab -e 编辑定时任务,示例如下:

5 12 * * * sh /data/mysql-bak/mysql-bak.sh test123

上述定时任务在 12:05 执行,查看最近的执行情况:

[root@localhost mysql-bak]# tail -n 10 /var/spool/mail/root 
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <[email protected]>
Date: Fri,  6 Dec 2019 12:05:01 +0800 (CST)

备份路径: /data/mysql-bak/test123-201912061205.tgz
开始备份: Fri Dec 6 12:05:01 CST 2019
mysqldump: [Warning] Using a password on the command line interface can be insecure.
备份完成: Fri Dec 6 12:05:01 CST 2019

你可能感兴趣的:(数据库,MySQL)