记一次mysql定时备份并保存到远程服务器的坑

查阅了很多文章,踩了很多坑,在这里总结一下:

1.先解决不需要密码的SSH登陆

前提:本地服务器:A, 远程服务器:B

1.1 在本地服务器A上生成rsa证书,运行命令:        

ssh-keygen -t rsa

这边输入完会有需要填的信息,分别是文件名称,密码和确认密码,可以不填,回车3次

 1.2 cp生成rsa公钥证书到远程服务器B

使用scp命令进行远程复制,将A机生成的id_rsa.pub拷贝到远程服务器B的/root/.ssh目录下

scp /root/.ssh/id_rsa.pub.A root@远程服务器ip:/root/.ssh/

这边要确认B服务器上有无/root/.ssh的目录。可以用 ls -a查看。如果没有,可以运行

ssh localhost

上面的scp命令需要输入密码,当把密钥配对完毕之后,以后本地服务器A使用scp命令复制文件到远程服务器B的话,就不需要再次输入密码。

1.3 密钥配对

当上面将服务器A上的id_rsa.pub 文件copy到了服务器B后,现在我们在 B 的/root/.ssh下创建authorized_keys文件,使用如下命令

touch authorized_keys

通过 cat 命令 把id_rsa.pub 追写到 authorized_keys 文件中

cat id_rsa.pub >> authorized_keys

修改authorized_keys文件的权限

chmod 400 authorized_keys

这个步骤已经完成

在服务A上,再次使用刚才的命令,发现已经可以不需要输入密码。

2. shell脚本

#备份文件后缀时间
time=_` date +%Y_%m_%d_%H_%M_%S `
#需要备份的数据库名称
db_name=name
#mysql 用户名
db_user=root
#mysql 密码
db_pass=root
#备份地址
backupdir=/data/backup_mysql/
# 远程备份服务器 gitlab备份文件存放路径
RemoteBackDir=/home/mysql_backup/
# 远程备份服务器 登录账户
RemoteUser=root
# 远程备份服务器 IP地址
RemoteIP=192.1.1.1
#本地备份路径
localBackDir=${backupdir}"backup_mysql"${time}".sql"
#mysqldump命令使用绝对路径
docker exec -i $(docker ps -qf 'name=k8s_mysql-base-container_mysql') mysqldump -u $db_user -p$db_pass $db_name> $localBackDir
scp $localBackDir $RemoteUser@$RemoteIP:$RemoteBackDir
#删除7天之前的备份文件
find $backupdir -name “*.sql” -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1

这里有个坑,sh文件换行code必须是LF,不能是CR+LF,否则会出现拼接的时候被覆盖的问题。用notepad++可以进行替换,操作方法链接:https://blog.csdn.net/siyubaobao1404/article/details/100325601

3. crontab定时任务

安装部分自行百度。主要说一下使用

crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表

所以只要crontab -e 输入 

00 23 * * * /data/backup_mysql/backup_mysql.sh > /dev/null 2>&1

这个代表每天23点执行,> /dev/null 2>&1代表不送邮件,具体可以自行百度crontab相关语法。

还有个坑,脚本内的 docker exec -it  $(docker ps -qf 'name=k8s_mysql-base-container_mysql')  mysqldump -u $db_user -p$db_pass $db_name> $localBackDir  得改为  docker exec -i。参考:https://blog.csdn.net/weixin_30569153/article/details/99984488

总文参考:定时自动备份mysql数据库,并发送到远程服务器,删除过期本地备份

https://www.it610.com/article/1297982786673647616.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值