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

来源:互联网 发布:保险从业网络继续教育 编辑:程序博客网 时间:2024/05/17 12:02

环境:

            操作系统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远程端口修改后,本文涉及的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免密码传输机制。

阅读全文
1 0