作者:Y_虞儿 | 来源:互联网 | 2023-09-14 15:01
篇首语:本文由编程笔记#小编为大家整理,主要介绍了服务器数据库备份到另外一个服务器的数据库相关的知识,希望对你有一定的参考价值。
数据库备份
1、在 CentOS7 中安装 rsync
yum -y install rsync
2、用密钥实现免密登录
由于需要使用命令行传输文件,不方便输入密码,所以在服务器 A 中配置 ssh 免密登录,配置成功后,服务器 A 登录服务器 B 时就不需要输入密码就可以登录了。
(1)生成公钥
在服务器 A 中输入命令:
ssh-keygen
该命令会生成一个公钥,执行命令后,在 ~/.ssh/ 会出现两个新文件:
生成公钥
(2)将公钥传输到服务器 B 中
在服务器 A 中输入命令:
ssh-copy-id root@B服务器ip
或者
ssh-copy-id -i ~/.ssh/id_rsa.pub root@B服务器ip
从此以后,在服务器 A 中使用 ssh 方式登录服务器 B 就不需要输入密码了。
3、在服务器 A 中书写脚本 backup.sh
这个脚本主要的作用是将要备份的数据导出为一个 SQL 脚本,并将这个脚本传输到服务器 B 的指定目录中:
#!/bin/bash
# 将 woods数据库 导出为一个 SQL 脚本
mysqldump -h服务器A的IP -u用户名 -p密码 woods > /etc/backup/sql/woods`date +%Y%m%d%H%M%S`.sql
# 同步目录(传输新增文件到服务器的B的指定目录)
rsync -arv --delete /etc/backup/sql/ root@服务器B的IP:/etc/backup/sql/
这个脚本做了两个操作:
将 woods数据库 导出为一个 SQL 脚本,这个脚本的命名带上了当前时间。
会将服务器A的 /etc/backup/sql/ 目录与服务器 B 的 /etc/backup/sql/ 目录进行同步。
4、将 backup.sh 加上可执行权限
在服务器 A 中输入命令:
//chmod 744 /usr/local/backup.sh
chmod 744 /home/backup/local/backup.sh
5、测试 backup.sh 是否达到预期的效果
在服务器 A 中输入命令:
sh /usr/local/backup.sh
执行完毕后,查看是否已经生成了备份文件:
是否已经生成了备份文件
6、添加定时任务
输入命令:
crontab -e
在打开的文件中加入如下内容:
0 1 * * * sh /usr/local/backup.sh
这个意思是每天凌晨 1 点执行脚本。关于 crontab 表达式的更多内容就不在这里说了,感兴趣的可以自己去搜索引擎搜索 crontab 表达式自行学习。
(二)、在服务器 B 上需要进行的操作
注意:以下命令全部在服务器 B 上进行。
1、书写脚本 reduction.sh
这个脚本的作用是执行从服务器 A 中传入过来的 SQL 脚本:
#!/bin/bash
# 找到当天的备份文件的位置并存入到变量 woods_file
woods_file=$(find /etc/backup/sql -name woods`date +%Y%m%d*`)
# 一个 if 判断,意思是如果变量 woods_file 字符串不为空,就执行 then 后面的命令
if [ -n $woods_file ]
then
echo $woods_file
# 执行查找到的 MySQL 脚本
mysql -u用户名 -p密码 数据库名 --default-character-set=utf8 -A -e "source "$woods_file
fi
注意,MySQL 一定已经有你要备份的数据库,mysqldump 导出的 SQL 脚本没有带创建数据库的命令,所以没有就要先自行创建。
2、测试 reduction.sh 是否达到预期效果
sh /usr/local/reduction.sh
执行脚本,查看数据库的内容是否已经变化为备份文件的内容,如果没有发生变化,请根据报错提示,进行排查。
3、设置定时任务
设置定时任务定期执行脚本 reduction.sh
输入命令:
crontab -e
在打开的文件中加入如下内容:
30 1 * * * sh /usr/local/reduction.sh
这个意思是每天凌晨 1 点 30 分执行脚本。
该文章引用自:https://segmentfault.com/a/1190000022525635