454 字
2 分钟
Mysql数据库定时备份到OSS
背景
mysql运行在Docker中,计划每天定时备份数据并存储到阿里云OSS。其中用到了定时任务crontab、云存储管理rclone、shell脚本
部署脚本
# 创建目录mkdir -p ~/taskcd ~/task# 创建主备份脚本touch backup_main.sh# 创建mysql备份脚本,这个后面要传到运行mysql的docker容器touch mysql_backup.sh将一下脚本写入到mysql_backup.sh
#!/bin/bashbackUpFolder=/mnt/backupdatabaseName=yourDatabaseNamebackFileName="${databaseName}.sql"password='***'
#创建备份目录if [ ! -d $backUpFolder ];then mkdir -p $backUpFolderfi# 进入备份文件夹cd $backUpFolder
# 导出 dbName 数据库mysqldump -h 127.0.0.1 -u${username} -p${password} $databaseName > $backFileName
# 压缩导出的数据tar zcvf $databaseName.tar.gz $backFileName
# 删除文件夹,只保留备份的压缩包rm -rf $backFileName将一下脚本写入到backup_main.sh
#!/bin/bash# 放在宿主机上,将备份的文件拷贝到宿主机并上传到ossdateNow=`date +%Y_%m_%d_%H%M`# 这个fileName与mysql_backup.sh中的databaseName保持一直fileName=yourDatabaseNamenewFileName=${fileName}-$dateNow.tar.gzbackupPath=/mnt/data/dbBackup# 这是rclone中的OSS路径# yourRcloneConfigName:rclone中的配置名称# yourBucketName:OSS中的Bucket名改成# yourBackupPath:要备份到OSS的路径rclonePath=yourRcloneConfigName:/yourBucketName/yourBackupPath
#创建备份目录if [ ! -d $backupPath ];then mkdir -p $backupPathfi/usr/bin/docker exec mysql sh -c 'sh /mnt/mysql_backup.sh' && \/usr/bin/docker cp mysql:/mnt/backup/${fileName}.tar.gz ${backupPath}dateNow=`date +%Y_%m_%d_%H%M`mv ${backupPath}/${fileName}.tar.gz ${backupPath}/${newFileName}#/usr/bin/docker exec rclone sh -c "rclone copy /data/${newFileName} ${rclonePath} && rm -rf ${newFileName}"将脚本mysql_backup.sh复制到mysql的容器中
docker cp ./mysql_backup.sh mysql:/mnt/Docker安装Rclone
docker run --restart unless-stopped --name rclone -it \ --privileged=true \ --volume /mnt/data/rclone:/config/rclone \ --volume /mnt/data/dbBackup:/data \ rclone/rclone \ config执行以上指令后会直接进入rclone的配置,根据命令提示和官方文档完成OSS的配置。
然后在宿主机执行sh ~/task/backup_main.sh 然后去OSS检查备份的文件是否已经上传到云端。
添加到定时
crontab -e输入一下代码
# 每天4点备份数据库0 4 * * * sh /root/task/backup_main.sh完成.
Mysql数据库定时备份到OSS
https://blog.t-tt.cn/posts/mysql-timed-backup/