前提:在当前的机器中,已经安装了 MySQL,并且将 MySQL 已经加入到环境当中
安装 MySQL 和配置 MySQL 环境可参考文章 CentOS 8 通过二进制安装 MySQL
需求:编写 shell 脚本,自动备份 MySQL 数据库,并且备份数据库保留七天。
创建备份脚本:
cd ~
vim backup_mysql.sh
输入以下内容:
#!/bin/bash
# 改为你的 MySQL 地址
MYSQL_HOST="127.0.0.1"
# 改为你的 MySQL 端口号
MYSQL_PORT="3306"
# 改为你的 MySQL 用户名
MYSQL_USER="root"
# 改为你的 MySQL 密码
MYSQL_PASSWORD="root"
# 备份路径
BACKUP=/data/backup_mysql
# 当前时间
DATETIME=$(date +%Y%m%d%H%M%S)
# 自动获得所有的数据库
# 如果机器中没有加入 MySQL 环境,请将下面的 mysql 改为 mysql 文件的全路径
DATABASES=`mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} -e "SHOW DATABASES;"`
# 创建备份目录
mkdir -p "${BACKUP}/$DATETIME"
for db in $DATABASES; do
# 排除表头和一些无需备份的数据库
if [[ "$db" != "Database" ]] && [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] ; then
echo "正在备份数据库: $db"
# 备份操作
# 如果机器中没有加入 MySQL 环境,请将下面的 mysqldump 改为 mysqldump 文件的全路径
mysqldump -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} --databases $db > ${BACKUP}/$DATETIME/$db.sql
echo "数据库【$db】已备份到:${BACKUP}/$DATETIME/$db.sql 下"
fi
done
# 删除7天前的文件
find $BACKUP -type f -mtime +7 -exec rm -f {} \;
echo "备份结束~"
给脚本添加可执行的权限:chmod +x backup_mysql.sh
执行脚本:./backup_mysql.sh
成功执行的效果如下
将脚本设置每天凌晨三点自动执行:crontab -e
添加下面内容:
# /root/backup_mysql.sh 为脚本的路径
00 03 * * * /root/backup_mysql.sh
完成之后会在每天凌晨三点自动备份一次数据库。