Linux下定时自动备份远程主机mysql数据库并拷贝到其他主机
操作系统CentOS6.5、mysql5.1
主数据库服务器(A)、备数据库服务器(B)、异地备份服务器(C)
主、备数据库服务器的mysql数据库完全一致,异地备份服务器用于存储备份文件。
实施
环境: 操作系统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免密码传输的机制将失效mysql主机,解决办法如下: 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免密码传输机制。 (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |