针对 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 +"%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: <20191206040502.2C1851742@localhost.localdomain>
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