MySQL 数据库自动备份

首先创建一个 sh 脚本文件并保存,比如保存到 /usr/local/sbin/autoback_mysql.sh

#!/bin/bash

# 日期文件夹格式,比如:YYYYMMDD

DATE=$(date +"%Y%m%d")

# 备份文件保存目录 (记得创建这个目录)

BACKUP_DIR="/backup/mysql"

# MySQL 登陆信息

MYSQL_USER="root"
MYSQL_PASSWORD="YOURSECUREPASSWORD"

# MySQL 执行文件路径 (不需要更改)

MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump

# MySQL 忽略备份的数据库

SKIPDATABASES="Database|information_schema|performance_schema|mysql"

# 保存最近多少天内的备份 (超过天数的备份会被自动删除)

RETENTION=14

# ---- 下面的代码请不要修改 ------------------------------------------
#
# 创建按日期保存备份的文件夹

mkdir -p $BACKUP_DIR/$DATE

# 获取所有数据库列表

databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`

# 存储数据库到文件,并使用 gzip 压缩

for db in $databases; do
echo $db
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz"
done

# 删除超过天数的备份文件夹

find $BACKUP_DIR/* -mtime +$RETENTION -exec rm {} \;

给 sh 脚本文件可运行权限

chmod 755 /usr/local/sbin/autoback_mysql.sh

创建一个计划任务,每天凌晨 1 点运行这个脚本

# 编辑 crontab 文件
nano /etc/crontab

# 增加一行
0 1 * * * root /usr/local/sbin/autoback_mysql.sh

重启计划任务服务,让更改生效

service cron restart

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注