Linux下定时将Mysql数据库从服务器A备份到服务器B

本文主要介绍如何在Centos7下每天定时将Mysql数据库下部分数据库(也可以是全部库)从A服务器备份到B服务器。

  • 两台Linux之间传输文件(无需输入密码)
  • 编写数据库备份脚本
  • 设置定时执行

 

一、通过scp命令在两台Linux之间免密传输文件,文件从A服务器(10.10.10.10)到B服务器(10.10.10.11),不了解scp的同学可自行百度。

一般情况下通过scp传输文件是需要密码认证的,但是通过以下方式可以避免每次都输入密码:

1.首先在A服务器上生成ssh公钥,执行以下命令:

ssh-keygen -t rsa

执行以上命令后会在系统登录用户目录下(我的是/root/.ssh)生成两个文件:id_rsa和id_rsa.pub

2.通过scp命令将id_rsa.pub文件传输到B服务器上,并重命名为:authorized_keys。执行以下命令(执行命令后需要输入B服务器的登录密码):

scp -P2200 /root/.ssh/id_rsa.pub root@10.10.10.11:/root/.ssh/authorized_keys

以上两步完成后,从A服务器传输文件到B服务器就不需要再输入密码了!

 

二、编写数据库备份脚本

备份数据库主要使用mysql自带的逻辑备份工具mysqldump。具体使用方式可自行百度,这里不作为重点描述。

脚本名:dbbak.sh,内容如下:

#!/bin/bash
#数据库备份执行文件
#备份路径
BACKUP=/data/dbbak
DATABASE=dbname
#当前时间
DATETIME=$(date +%Y-%m-%d)
echo "===备份开始==="
echo "===备份文件存放于$BACKUP/$DATABASE.sql==="
#数据库地址
HOST=10.10.10.10
PORT=3306
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=password
#指定数据库,并且排除部分表。注意不要锁表和数据一致性
mysqldump -h$HOST -P$PORT  -u$DB_USER -p$DB_PW --skip-opt $DATABASE --ignore-table=${DATABASE}.table1 --ignore-table=${DATABASE}.table2 >$BACKUP/$DATABASE-$DATETIME.sql
#备份指定的表
#mysqldump -h$HOST -P$PORT  -u$DB_USER -p$DB_PW --skip-opt $DATABASE --tables table1 >$BACKUP/$DATABASE-$DATETIME.sql
echo "===导出成功,开始传输==="
cd $BACKUP
#压缩备份文件,文件太大的话可以选择压缩再传输
#tar -zcvf $DATETIME.tar.gz $DATETIME
#备份到服务器B
scp -P2200 ${DATABASE}-${DATETIME}.sql root@10.10.10.11:/data/dbbak
#删除3天前备份的数据,确保长期运行不会占用太多磁盘空间,具体天数可自行配置
find $BACKUP -mtime +3 -name "*.sql" -exec rm -rf {} \;
echo "===数据库备份到备份服务器成功==="

备份脚本编写完成后,上传到A服务器,存放路径根据自己实际情况而定,我存放的路径是:/data/dbbak

 

三、设置定时执行

利用linux系统自带的crontab命令创建定时任务,实现每天某个时间点定时执行。执行以下命令:

#给执行文件授权
chmod 777 /data/dbbak/dbbak.sh
#编辑定时任务
crontab -e
#通过vim命令进行编辑,输入以下命令,表示在每天凌晨1点执行任务
0 1 * * * /data/dbbak/dbbak.sh

至此,Linux下定时将Mysql数据库从服务器A备份到服务器B就完成了!

crontab命令简介:

#修改定时任务. 如果文件不存在会自动创建
crontab –e
#显示已经创建的定时任务
crontab –l
#删除定时任务
crontab -r
#删除定时任务前给出提醒
crontab -ir
#每天凌晨1点执行任务
0 1 * * * /data/dbbak/dbbak.sh
#每个工作日(周一到周五)中午12:30执行任务
30 12 * * 1,2,3,4,5 /data/dbbak/dbbak.sh
#每10分钟定时执行任务
* /10 * * * * /data/dbbak/dbbak.sh
#每1小时定时执行任务
0 */1 * * * /data/dbbak/dbbak.sh

 

posted @ 2020-10-21 17:12  JcongJason  阅读(183)  评论(0编辑  收藏  举报