Linux 配置 MySQL 定时自动备份到另一台服务器
- 前言
- 1、配置服务器通信
-
- 1.1:配置过程
- 2、编写自动备份sh脚本文件
- 3:设置定时自动执行
前言
此方案可使一台服务器上的 MySQL 中的所有数据库每天 0 点自动转储为 .sql 文件,然后将文件同步到另一台服务器上,可以作为一个简单的数据容灾。
1、配置服务器通信
作用是可以使备份好的sql可以通过scp复制到目标服务器
- A服务器:数据库所在服务器
- B服务器:需要备份的服务器(即目标服务器)
1.1:配置过程
- A和B服务器执行如下命令,一直敲回车
ssh-keygen -t rsa
- 会在/root/.ssh目录下生成两个文件(id_rsa,id_rsa.pub)
- 把A服务器的 id_rsa.pub 里的内容全选复制到B服务器的相同目录,创建新文件authorized_keys,把内容复制到此文件
- 创建新文件命令
cd /root/.ssh/
vim authorized_keys
-
B服务器目录文件如图
-
A服务器目录文件如图
-
这样两台服务器SSH链接就建立好了,使用SCP命令就不需要输入密码了
-
B服务器创建文件夹用于存放备份文件
mkdir -p /data/mysqlAutoBackupFrom16
2、编写自动备份sh脚本文件
mkdir -p /data/mysqlAutoBackupTo24/backup
cd /data/mysqlAutoBackupTo24
vim AutoBackup.sh
#下面生成的sql在本服务器存放的文件夹,就是我上面建立的
BACKUP=/data/mysqlAutoBackupTo24/backup/
#当前时间,用来命名sql文件
DATETIME=$(date +%Y-%m-%d)
echo "===备份开始==="
echo "备份文件存放于${BACKUP}/$DATABASE-$DATETIME.sql"
#生成sql文件,命名
DATABASE=dbBackup
echo $DATABASE-$DATETIME
#mysqldump -h localhost -u${DB_USER} -p${DB_PW} –all-databases > ${BACKUP}/$DATABASE-$DATETIME.sql
mysqldump -h 192.168.90.16 -uroot -pWuyuanDev001 –databases xxl_job xxl_job_hf_test > ${BACKUP}/$DATABASE-$DATETIME.sql
echo "===导出成功,开始传输==="
#将sql文件从服务器16备份到服务器24自己建立的文件夹/data/mysqlAutoBackupFrom16下面
scp -P 22 $BACKUP$DATABASE-$DATETIME.sql root@192.168.90.24:/data/mysqlAutoBackupFrom16
#删除备份目录
#rm -rf ${BACKUP}/$DATETIME
#删除7天前备份的数据,自行更改
#find $BACKUP -mtime +7 -name "*.sql" -exec rm -rf {} \\;
echo "===数据库备份到服务器成功==="
4. 文件关键代码解释 mysqldump 的 -h 后面写当前服务器的 IP,也就是192.168.90.16,不要写 localhost,因为如果是离线安装的 mysql 可能没有 mysqld.socket ,导致连接失败。
–databases xxl_job xxl_job_hf_test 的意思是指定备份 xxl_job 和 xxl_job_hf_test 这个两个数据库,指定多个数据库要加 –databases ,数据库用空格隔开,上面一句注释掉的是 –all-databases ,意思是备份全部数据库。
scp -P 22 是指定 ssh 端口,不指定默认为 22,root 是目标服务器192.168.90.24 的用户名
下面我们运行一下这个 sh 看看效果,cd 到你的 sh 存放的文件夹 sh AutoBackup.sh,首次进行 ssh 连接要输入一个 yes 回车,然后去目标服务器 24 查看,sql 文件已经同步过去。


3:设置定时自动执行
chmod 777 /data/mysqlAutoBackupTo24/AutoBackup.sh
crontab -e
02 00 * * * sh /data/mysqlAutoBackupTo24/AutoBackup.sh
service crond reload
评论前必须登录!
注册