两台服务器均为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
四、实现效果
最终可以实现本地备份后,往指定的服务器的指定目录上传备份文件