Linux下定时自动备份远程主机mysql数据库并拷贝到其他主机

举报
远方 发表于 2018/12/18 16:20:50 2018/12/18
【摘要】 环境: 操作系统CentOS6.5、mysql5.1 主数据库服务器(A)、备数据库服务器(B)、异地备份服务器(C) 主、备数据库服务器的mysql数据库完全一致,异地备份服务器用于存储备份文件。实施方案:在主机B建立计划任务,每天凌晨3:00自动定时备份主机A的数据库到主机B,备份文件从主机B拷贝至主机C存储,再删除主机B...

环境:

            操作系统CentOS6.5、mysql5.1

            主数据库服务器(A)、备数据库服务器(B)、异地备份服务器(C)

            主、备数据库服务器的mysql数据库完全一致,异地备份服务器用于存储备份文件。

实施方案:在主机B建立计划任务,每天凌晨3:00自动定时备份主机A的数据库到主机B,备份文件从主机B拷贝至主机C存储,再删除主机B的数据库备份文件。

实施步骤:

1)在主机B的目录 /usr/local/bin 下新建脚本文件dbbak.sh,实现功能逻辑:

#!/bin/bash
#这是一个简单的mysql数据库逻辑备份脚本
#1.定义数据库连接、目标库信息
MY_USER="这里是主机A的mysql数据库的用户"
MY_PASS="  这里是主机A的mysql数据库的密码 "
MY_HOST="192.168.1.X"     #这里是主机A的IP
MY_CONN="-u $MY_USER -p$MY_PASS -h $MY_HOST"
MY_DB1="这里是主机A的mysql数据库的库名"
#2.定义备份目录、工具、时间、文件名主体
BF_DIR="/data/BAK/"
BF_CMD="/usr/bin/mysqldump"
BF_TIME=`date +%Y%m%d`
NAME_1="$MY_DB1-$BF_TIME"

#3.先导出为.sql脚本,然后再进行压缩(打包后删除原文件)
cd $BF_DIR/
$BF_CMD $MY_CONN $MY_DB1 --default-character-set=utf8 --opt -Q -R --skip-lock-tables | gzip > $BF_DIR$NAME_1.sql.gz
scp $BF_DIR$NAME_1.sql.gz root@192.168.1.X:/data/BAK/DB/FullBackup/      #这里的IP是主机C的IP
rm -rf $BF_DIR$NAME_1.sql.gz


建立好以上脚本内容后,用命令chmod 修改一下.sh权限即可:
如chmod u+x *.sh赋予.sh权限


2)实现主机B和主机C之间用SCP命令免密码传输数据。

在主机B运行:

#ssh-keygen -t rsa
结果如下
QUOTE: 
Generating public/private rsa key pair. 
Enter file in which to save the key (/home/.username/ssh/id_rsa):#回车 
Enter passphrase (empty for no passphrase):#回车 
Enter same passphrase again:#回车 
Your identification has been saved in /home/.username /.ssh/id_rsa. 
Your public key has been saved in /home/.username /.ssh/id_rsa.pub. 
The key fingerprint is: 
38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost 
Generating RSA keys: 
Key generation complete.

会在用户目录~/.ssh/产生两个文件,id_rsa,id_rsa.pub

将id_rsa.pub文件拷贝到主机C的root用户主目录下的.ssh目录下,并且改名为authorized_keys(即:cd ~/.ssh)

这样主机B上使用scp命令复制文件到主机C上将不提示输入密码了,直接自动复制了。也可在主机B上使用scp命令将主机C上文件复制到本机;总之不需要验证,就可以在主机B访问主机C。

注:如果有多台计算机需要与主机C进行复制,则只需将id_rsa.pub中的内容复制到主机C的authorized_keys文件中即可。(经在ssh上验证不可以,主机C只可以与一台服务器不需要验证)。


3)在主机B建立计划任务

# crontab -e
30 2 * * * /root/bin/dbbak.sh      #此处代表凌晨2:30执行dbbak.sh脚本

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

# chkconfig crond on
# service crond status
crond (pid 3263) 正在运行...

#修改计划任务后需重启服务:service crond restart

自此整个方案实施完毕,经笔者测试,功能正常。


别注意:

后期因进行安全等保合规性的测评工作后,更改了SSH远程连接端口号,以上相关脚本要作相应配置修改。


当主机的SSH远程端口修改后,本文涉及的SCP免密码传输的机制将失效,解决办法如下:

1.SCP指令要加上端口号:scp -P 55822 $BF_DIR$NAME_1.sql.gz root@192.168.1.X:/data/BAK/DB/FullBackup/      #这里的IP是主机C的IP

2.重新执行本文的2)步骤,重建SCP免密码传输机制。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。