写一个脚本/root/mysqlbak.sh,备份mysql数据库 ?
参考回答
下面是一个基本的 mysqlbak.sh 脚本,用于备份 MySQL 数据库。这个脚本会定期备份数据库,并将备份存储到指定的目录中,文件名带有时间戳以避免覆盖。
脚本内容(/root/mysqlbak.sh):
#!/bin/bash
# 设置 MySQL 用户和密码
MYSQL_USER="root"
MYSQL_PASSWORD="your_password"
MYSQL_HOST="localhost"
# 备份文件存储目录
BACKUP_DIR="/root/mysql_backups"
DATE=(date +%Y%m%d%H%M%S) # 用当前时间戳命名备份文件
# 要备份的数据库列表
DATABASES=("database1" "database2" "database3") # 可以添加更多的数据库名
# 创建备份目录(如果不存在)
mkdir -p "BACKUP_DIR"
# 备份每个数据库
for DB in "{DATABASES[@]}"
do
BACKUP_FILE="BACKUP_DIR/DB-DATE.sql"
echo "正在备份数据库 DB 到BACKUP_FILE"
# 使用 mysqldump 命令备份数据库
mysqldump -u "MYSQL_USER" -p"MYSQL_PASSWORD" -h "MYSQL_HOST" "DB" > "BACKUP_FILE"
# 检查备份是否成功
if [? -eq 0 ]; then
echo "数据库 DB 备份成功"
else
echo "数据库DB 备份失败"
fi
done
# 删除超过 7 天的备份文件(可选,保持备份文件清理)
find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -exec rm -f {} \;
echo "备份过程完成"
详细讲解与拓展
- 变量配置:
MYSQL_USER:MySQL 用户名,这里设置为root。MYSQL_PASSWORD:MySQL 用户密码,替换为你的实际密码。MYSQL_HOST:MySQL 服务器的主机地址,默认为localhost。BACKUP_DIR:备份文件存储的目录,这里设置为/root/mysql_backups。DATE:备份文件的时间戳,用当前日期和时间生成文件名。
- 备份数据库:
- 使用
mysqldump命令来备份每个数据库。命令格式为:mysqldump -u "MYSQL_USER" -p"MYSQL_PASSWORD" -h "MYSQL_HOST" "DB" > "$BACKUP_FILE" - 其中,
-u是指定 MySQL 用户名,-p是指定密码,-h是指定 MySQL 服务器主机名,最后是数据库名。 - 备份文件将保存为
database_name-YYYYMMDDHHMMSS.sql的形式,确保文件名唯一。
- 使用
- 删除过期备份:
- 使用
find命令删除超过 7 天的备份文件:find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -exec rm -f {} \; -mtime +7表示查找修改时间超过 7 天的文件,-exec rm -f删除这些文件。
- 使用
- 执行状态检查:
- 每次备份后,检查
mysqldump的返回值$?。如果返回值为0,表示备份成功;否则表示备份失败。
- 每次备份后,检查
如何使用该脚本
- 保存脚本:
将脚本保存为/root/mysqlbak.sh。 -
赋予执行权限:
sudo chmod +x /root/mysqlbak.sh - 手动运行备份:
直接执行脚本进行手动备份:/root/mysqlbak.sh - 定期备份(可选):
可以通过crontab定期运行脚本进行自动备份。例如,每天凌晨 2 点执行该脚本:crontab -e添加以下行:
0 2 * * * /root/mysqlbak.sh
总结
- 该脚本通过
mysqldump工具进行 MySQL 数据库的备份。 - 备份的文件以时间戳命名,避免覆盖。
- 支持定期清理超过 7 天的备份文件,保持备份目录的整洁。
- 可以通过
cron定时执行,自动化数据库备份任务。