定时备份docker-MySQL中的所有数据库

backup_mysql.sh

#!/bin/bash

# 设置备份存储目录
backup_dir="/docker/hunqingyun-docker/mysql/backup"

# 设置 MySQL 容器名称和备份文件名
mysql_container="ruoyi-mysql"
backup_file="$backup_dir/$(date +'%Y%m%d%H%M%S').sql"

# MySQL root 用户的密码
mysql_password="password"

# 执行备份命令
docker exec $mysql_container sh -c "exec mysqldump --all-databases -uroot -p'$mysql_password'" > $backup_file

# 如果备份成功,则打印消息
if [ $? -eq 0 ]; then
    echo "MySQL 数据库备份成功:$backup_file"
else
    echo "MySQL 数据库备份失败"
fi
  • /path/to/backup/directory:备份文件存储目录的路径。
  • your_mysql_container_name:你的 MySQL 容器的名称。
  • mysql_password:如果你在 MySQL 容器中设置了 root 密码,请将其替换为实际的 root 密码。
  • mysql_container:容器名

此脚本会在指定的时间执行 MySQL 数据库备份,并将备份文件保存到指定的目录中。你可以使用 cron 或者其他定时任务工具来定期执行这个脚本。

确保脚本具有执行权限 (chmod +x backup_script.sh),然后将其添加到定时任务中。例如,使用 crontab -e 命令添加以下行以每天凌晨 3 点执行备份:

0 3 * * * /path/to/your/backup_mysql.sh

这将每天凌晨 3 点执行一次备份。你可以根据需要调整 cron 表达式。

### 如何在 Docker 中完整备份 MySQL 数据库所有库的数据和结构 为了实现对 Docker 容器中运行的 MySQL 数据库的所有库进行完整的数据和结构备份,可以按照以下方法操作: #### 方法一:使用 `mysqldump` 命令 可以通过 `docker exec` 执行 `mysqldump` 工具来完成整个数据库实例的备份。以下是具体命令: ```bash docker exec -i mysql_container_name sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > ./backup/all_databases_$(date '+%Y%m%d%H%M%S').sql ``` 此命令会导出 MySQL 实例中的所有数据库及其结构[^1]。 - 参数说明: - `--all-databases`: 表示导出所有的数据库- `-u root`: 使用 root 用户登录。 - `-p "$MYSQL_ROOT_PASSWORD"`: 提供 MySQL 的 root 密码环境变量。 如果未设置 `$MYSQL_ROOT_PASSWORD` 环境变量,则可以直接输入密码字符串替代该部分。 --- #### 方法二:通过配置文件简化备份过程 可以在宿主机上的 `my.cnf` 文件中预先定义好用户名和密码,从而避免每次手动输入密码。例如,在宿主机创建或编辑 `/etc/my.cnf` 文件并添加如下内容: ```ini [mysqldump] user=root password=your_password_here ``` 随后将此配置文件复制到容器内的相应位置: ```bash docker cp /path/to/my.cnf mysql_container_name:/etc/ ``` 之后即可无需指定用户和密码参数执行备份命令: ```bash docker exec -i mysql_container_name sh -c 'exec mysqldump --all-databases' > ./backup/all_databases_$(date '+%Y%m%d%H%M%S').sql ``` 这种方法不仅提高了安全性还减少了重复劳动[^3][^4]。 --- #### 方法三:自动化定时任务 为了让上述备份流程更加高效可靠,还可以将其集成进系统的 cron 计划任务里去定期自动触发。首先编写一个 shell 脚本用于封装以上逻辑(假设脚本路径为 `/home/data/mysqldata/backup/mysql_backup_all.sh`),内容如下所示: ```bash #!/bin/bash BACKUP_DIR="/home/data/mysqldata/backup" DATE=$(date "+%Y%m%d%H%M%S") # 创建备份目录 (如果不存在的话) mkdir -p $BACKUP_DIR # 备份全部数据库 docker exec -i mysql_container_name sh -c 'exec mysqldump --all-databases -uroot -pyour_password' > "${BACKUP_DIR}/all_databases_${DATE}.sql" echo "Backup completed at ${DATE}" ``` 接着给这个脚本加上必要的权限以便能够正常被执行: ```bash chmod 600 /home/data/mysqldata/backup/mysql_backup_all.sh chmod +x /home/data/mysqldata/backup/mysql_backup_all.sh ``` 最后利用 crontab 来安排每日凌晨一点钟启动一次这样的全量备份工作: ```bash crontab -e ``` 加入下列条目保存退出即生效: ```cron 00 01 * * * /home/data/mysqldata/backup/mysql_backup_all.sh >> /home/data/mysqldata/backup/mysql_backup.log 2>&1 ``` 这样就可以确保即使管理员忘记手工干预也能按时获得最新的完整备份副本了。 --- ### 注意事项 - **安全风险**: 将明文形式存储或者传输敏感信息如密码存在潜在安全隐患,请务必妥善保管相关资源访问控制权以及考虑加密保护措施。 - **磁盘空间管理**: 频繁生成大容量SQL文件可能导致服务器剩余可用储存迅速减少,建议制定合理的清理策略删除过期无价值的历史版本档案资料。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值