Linux下实现Mysql的本地备份,异地备份

两台服务器均为Linux服务器,其中数据库服务器的MySQL使用docker部署

一、使用SCP实现服务器间无需输入密码传输文件

本地备份的服务器IP:10.0.0.223
异地备份的服务器IP:10.0.0.195

1、在服务器10.0.0.223上执行如下命令来生成配对密钥:

# 运行命令 
ssh-keygen -t rsa

提示的地方一般直接回车就行,我这边之前已经执行过命令了,目录下已经存在文件了
在这里插入图片描述

2、将 /root/.ssh/ 目录中的 id_rsa.pub 文件复制到服务器10.0.0.195的 /root/.ssh/ 目录中,并改名为 authorized_keys
附:如果远程服务器中已经存在authorized_keys文件,则需注意,这个文件可以包含多个SSH验证信息,这时将验证文件内容附加上去即可。先在本地服务器上执行脚本 scp ~/.ssh/id_rsa.pub root@10.0.0.195:/root/.ssh/s.pub,然后在远程服务器上执行 cat ~/.ssh/s.pub >> ~/.ssh/authorized_keys

# 运行命令 
scp .ssh/id_rsa.pub root@10.0.0.195:/root/.ssh/authorized_keys

在这里插入图片描述

3、尝试传输文件验证是否生效,可以看到传输已经不需要输入密码了

在这里插入图片描述

二、编写备份脚本

该脚本主要实现本地备份数据库脚本后,再将数据库脚本复制到指定服务器的指定目录下,目录和文件名按需替换

#!/bin/bash
# 异地备份服务器IP,备份目录
db_backup_host=10.0.0.195
db_backup_host_dir=/vdb/backup/10.0.0.223_mysql/
# 本地备份的数据库容器名,端口,用户名,密码,数据库名
db_container=mysql
db_container_port=5306
db_user=user
db_password=password
db_name=test
db_backup_dir=/vdb/backup/mysql/
# 定义以当前日期,当前时间命名的变量
ymd=$(date +'%Y%m%d')
hms=$(date +'%H%M%S')
# 本地以当前日期命名的文件备份目录
filepath=/vdb/backup/mysql/$ymd
# 异地以当前日期命名的文件备份目录
backup_host_filepath=/vdb/backup/10.0.0.223_mysql/$ymd
echo '开始备份数据库...'
	if [ ! -d $filepath ];then
		echo '不存在目录则创建以当前时间命名的目录'
		mkdir -p $filepath
		echo '成功创建目录'
		echo '备份数据库到创建的文件夹下'
		docker exec -it  $db_container mysqldump -u$db_user -p$db_password -P$db_container_port $db_name > $filepath/$db_name$hms'.sql'
		echo '复制备份数据库到远程服务器的目录下'
		scp -r $filepath root@$db_backup_host:$db_backup_host_dir
		
	else
		echo '备份数据库到创建的文件夹下'	
		docker exec -it  $db_container mysqldump -u$db_user -p$db_password -P$db_container_port $db_name > $filepath/$db_name$hms'.sql'
		echo '复制备份数据库到远程服务器的目录下'		
		scp $filepath/$db_name$hms.sql root@$db_backup_host:$backup_host_filepath/
	fi
echo '备份成功,文件名为: '$filepath/$db_name$hms'.sql'

三、为备份脚本设置定时任务

# 本地服务器的目录
/
└──vdb
  └── backup # 备份目录
    ├── mysql # mysql备份目录
        ├── mysqlbackup.sh # 备份脚本
        ├── 20220406 
           ├── test3151424.sql # 数据库备份文件
           ├── test3145604.sql # 数据库备份文件
└──usr
  └── lib
    ├── systemd 
        ├── system
           ├── mysqlbackup.service
           ├── mysqlbackup.timer


# 异地服务器的目录
/
└──vdb
  └── backup # 备份目录
    ├── 10.0.0.223_mysql # mysql备份目录
        ├── 20220406 
           ├── test3151424.sql # 数据库备份文件
           ├── test3145604.sql # 数据库备份文件

配置定时任务,比如每天11点10分进行一次备份

1、进入/usr/lib/systemd/system/目录中,vim mysqlbackup.service创建mysqlbackup.service文件

[Unit]
Description=mysqlbackup service

[Service]
ExecStart=/bin/bash /vdb/backup/mysql/mysql_backup.sh

2、进入/usr/lib/systemd/system/目录中,vim mysqlbackup.timer创建mysqlbackup.timer文件

[Unit]
Description=每天11点10分执行

[Timer]
# OnCalendar:基于绝对时间,而不是相对时间执行
OnCalendar=*-*-* 11:10:00
# Unit:真正要执行的任务,默认是同名的带有.service后缀的单元
Unit=mysqlbackup.service

[Install]
WantedBy=multi-user.target

3、启动Timer单元

systemctl daemon-reload
systemctl enable mysqlbackup.timer
systemctl start mysqlbackup.timer

附:删除定时器

# 关闭开机启动(即删除目录链接)
systemctl disable mytimer.timer 
# 关闭单元
systemctl stop mytimer.timer 
# 关闭服务
systemctl stop mytimer.service
#之后删除timer 和Service文件
# 重新加载配置
systemctl daemon-reload 

四、实现效果

最终可以实现本地备份后,往指定的服务器的指定目录上传备份文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值