docker-mysql-数据库定时备份/异地容灾

需求

备份主数据库

  • Linux定时任务执行脚本,备份数据库,删除超时备份文件

异地容灾

  • 将每次备份数据上传到另一台服务器,异地双备份

需要备份数据库服务器

创建存放备份文件目录

# 备份文件存放主目录
mkdir -p /data/mysql/backup/
# 备份文件存放目录
mkdir -p /data/mysql/backup/back_dir/
# 创建备份脚本
touch /data/mysql/backup/backup.sh
# 编辑脚本
vim /data/mysql/backup/backup.sh

backup.sh

#!/bin/bash
# echo:终端打印
echo backup start!
# mysqldump全量备份命令,`date +\%F`:名称拼接备份日期,如:all_databases_2025-03-19.sql
docker exec -i mysql容器id/名 /usr/bin/mysqldump --all-databases --set-gtid-purged=OFF --single-transaction  --source-data=2 --triggers --routines --events -u数据库账号 -p数据库密码 > /data/mysql/backup/back_dir/all_databases_`date +\%F`.sql;

# 上传备份文件到目标服务器,需要配置ssh免密登录
scp /data/mysql/backup/back_dir/all_databases_`date +\%F`.sql 目标服务器账号@目标服务器ip:/data/mysql/backup/back_dir/

# 查找并删除 /data/mysql/backup/back_dir/ 目录下 修改时间超过 7 天 且 文件名以 .sql 结尾 的文件或目录
find /data/mysql/backup/back_dir -mtime +7 -name "*.sql" -exec rm -Rf {} \;
echo backup end!

手动执行脚本验证

# 添加执行权限
chmod +x backup.sh
# 执行
sh backup.sh

配置Linux定时任务

# 进入 crontab 编辑界面,打开Vim编辑任务
crontab -e
# 添加定时任务,每天01:30执行backup.sh脚本
30 1 * * * sh /data/mysql/backup/backup.sh
# 查看定时任务
crontab -l
# 刷新定时任务配置,一般不需要
service crond reload

配置ssh免密登录

需要备份数据库服务器

# 生成SSH密钥,一直回车即可,会生成 id_rsa  id_rsa.pub  known_hosts 3个文件
ssh-keygen -t rsa
# 找到 id_rsa.pub(公钥)复制里面内容,生成目录根据登录账号有所不同,root账号生成目录:/root/.ssh/,其他用户生成目录:/home/用户目录/.ssh/

需要免密上传备份文件服务器

# 根据登录账号创建相同目录,或者执行 ssh-keygen -t rsa 命令生成目录
mkdir -p /home/用户目录/.ssh/
# 进入 .ssh/ 目录下创建 authorized_keys 文件,将需要备份服务器生成的公钥复制到该文件
touch authorized_keys
vim authorized_keys

测试免密登录

# 需要备份数据库服务器,不需要输入密码,则配置成功
ssh 目标服务器ip

配置好免密登录,仍然需要密码登录,修改权限

# 配置免密登录后仍需要密码的主要原因是权限的问题,ssh不允许用户的主目录和.ssh目录以及authorized_keys文件的权限开放得太大
# /home/xxx的权限如果不是777,那么修改为755或者700
chmod 755 /home/xxx   或者   chmod 700 /home/xxx
# /home/xxx/.ssh目录的权限,它的权限要求是:700
chmod 700 /home/xxx/.ssh
# 密钥文件authorized_keys的权限,它的权限要求是:600
chmod 700 /home/xxx/.ssh/authorized_keys

需要免密上传备份文件服务器

创建存放备份文件目录

# 备份文件存放主目录
mkdir -p /data/mysql/backup/
# 备份文件存放目录
mkdir -p /data/mysql/backup/back_dir/
# 创建清理超时备份脚本
touch /data/mysql/backup/clear_backup.sh
# 编辑脚本
vim /data/mysql/backup/clear_backup.sh

clear_backup.sh

#!/bin/bash
# echo:终端打印
echo clear_backup start!

# 查找并删除 /data/mysql/backup/back_dir/ 目录下 修改时间超过 7 天 且 文件名以 .sql 结尾 的文件或目录
find /data/mysql/backup/back_dir/ -mtime +7 -name "*.sql" -exec rm -Rf {} \;

echo clear_backup end!

手动执行脚本验证

# 添加执行权限
chmod +x clear_backup.sh
# 执行
sh clear_backup.sh

配置Linux定时任务

# 进入 crontab 编辑界面,打开Vim编辑任务
crontab -e
# 添加定时任务,每天01:30执行backup.sh脚本
30 1 * * * sh /data/mysql/backup/clear_backup.sh
# 查看定时任务
crontab -l
# 刷新定时任务配置,一般不需要
service crond reload

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fearIess233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值