shell 自动备份 MySQL 数据库脚本

前提:在当前的机器中,已经安装了 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

成功执行的效果如下
shell 自动备份 MySQL 数据库脚本_第1张图片
shell 自动备份 MySQL 数据库脚本_第2张图片

将脚本设置每天凌晨三点自动执行:crontab -e

添加下面内容:

# /root/backup_mysql.sh 为脚本的路径
00 03 * * * /root/backup_mysql.sh

完成之后会在每天凌晨三点自动备份一次数据库。

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