论坛风格切换
  • 6482阅读
  • 1回复

[整体方案]linux上mysql计划任务自动备份并rsync同步传输到另一台服务器 [复制链接]

上一主题 下一主题
离线rickyleo
 

发帖
315
金币
0
威望
99
只看楼主 倒序阅读 使用道具 楼主  发表于: 2011-07-20
今天银河网要求实现将mysql数据库进行计划备份,希望能将这个生成的备份文件拷贝传输到另一台服务器作为备份保证数据能够更加安全。
需求如下:
1、保持5天的备份数据
2、每天凌晨2点30分开始备份数据
3、备份操作完成后,将备份5天的数据一起同步到另一台linux服务器,同时删除两台服务器5天前的备份数据。保证数据完整性的情况下又不太会占用太多的资源

在冯晓的指导下,完成这个任务,以后肯定是能用上的。
那现在先简单总结下自动备份及远程同步的过程吧:
1、准备好自动备份脚本命名为sql_bakup.sh,放在数据库服务器的/home目录下,代码如下:
  1. DATE=`date -I`
  2. #将命令存放到一个变量中
  3. mysqldump='/home/mysql.5.1.39/bin/mysqldump'
  4. #命名备份文件名称
  5. dumpFile=mysql_$DATE.sql
  6. #切换到备份文件存放目录
  7. cd /home/mysql.5.1.39/data_back
  8. #执行dump命令
  9. $mysqldump -uroot -ptsroot --opt --default-character-set=gbk --database pw85_yinhe_hebin > $dumpFile
  10. #删除备份文件存放目录下的超过5天的.sql文件
  11. find /home/mysql.5.1.39/data_back -name "mysql_*.sql" -type f -mtime +5 -exec rm -rf {} \; > /dev/null 2>&1
  12. #将本服务器data_back(后面紧跟/)目录下的文件同步传输到117服务器上配置web的路径下
  13. /usr/bin/rsync -vaztpH --progress --delete --exclude-from=/home/exclude.list /home/mysql.5.1.39/data_back/ root@221.192.141.117::web
2、制作计划任务,每天凌晨2点30分执行/home/sql_bakup.sh文件备份数据库。
数据库服务器上输入命令:
  1. crontab -e
编辑计划任务内容,如下:
  1. 30 2 */1 * * /home/sql_bakup.sh
计划任务的规则可以自己百度一下,上面/1其实可以去掉的,如果是10天备份一次的话 就可以改成*/10,这样就是每第10天的凌晨2点30分备份执行后面的.sh文件了。
查看当前服务器的计划任务指令:
  1. crontab -l
自动备份操作已经完成,现在开始将同步传输rsync,因为用scp是需要输入密码的,而rsync可以通过配置服务端和客户端的配置,免去输入密码的麻烦。

数据库服务器:
       IP:221.192.141.116
       备份存放目录:/home/mysql.5.1.39/data_back

附件服务器:
       IP:221.192.141.117
       备份存放目录:/home/mysql_bakup


  因为rsync是在备份脚本里边写好的,是在数据库服务器上执行rsync操作,因此将数据库服务器作为客户端,将附件服务器作为服务端,将客户端上的文件定时的同步传输到服务端去,配置如下:
首先检查下rsync是否已经安装过了:
  1. /usr/bin/rsync --daemon
如果能正常启动的,那就是安装了,否则进行下一步安装过程。
有可能rsync没有在服务器启动后自动启动,可以编辑/etc/rc.local文件,将
  1. /usr/bin/rsync --daemon
放到这个文件的最后一行就可以了。

服务端(附件服务器)
yum install rsync -y

修改配置文件
vi /etc/rsyncd.conf

uid = root
gid = root
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[web]
path = /home/mysql_bakup  //服务器端存放同步过来的文件的文件夹
ignore errors
read only = no
list = false
hosts allow = 221.192.141.116  //允许执行rsync同步的来源主机ip


客户端(数据库服务器)
yum install rsync -y

  同步命令,注意这个命令可以直接写在备份的脚本里边(上边已经加上,不需要其他操作),可以在dump命令之后直接执行rsync同步传输:
  1. /usr/bin/rsync -vaztpH --progress --delete --exclude-from=/home/exclude.list /home/mysql.5.1.39/data_back/ root@221.192.141.117::web
   rsync [选项] 来源 目标
   用到参数如下:
--delete :实现将服务端的满足调节的多余的文件删除,记住是为了让服务端粗放同步的文件和客户端保持一致
exclude.list:排除列表,没有的话 可以去掉
/home/mysql.5.1.39/data_back/:数据库服务器上存放备份文件的目录
:web:就是上面服务端配置文件中的path路径

等配置好后,可以通过以上命令先预先执行一下文件传输操作,也就是在命令行里边执行如下命令:
  1. /usr/bin/rsync -vaztpH --progress --delete --exclude-from=/home/exclude.list /home/mysql.5.1.39/data_back/ root@221.192.141.117::web[color=#ff0000][/color]
也就是测试将数据库服务器上的 /home/mysql.5.1.39/data_back/目录下的文件传输到117服务器上的/home/mysql_bakup目录下,测试的文件可以自己构造。
可能你会遇到如下报错(这个是我后来给唐山站搭建自动备份和同步传输中遇到的):

这个可以到/home目录下创建一个exclude.list文件就可以了,加上可执行权限。然后再重新执行文件传输指令:
服务端和客户端配置好rsync后,只要数据库服务器按照预先设定好的计划任务执行/home/sql_bakup.sh备份脚本,服务器就会自己去dump数据和同步传输了,最终数据库服务器和附件服务器上都会同时保存着5份数据,每份数据都是之前5天内每天凌晨2点30备份的数据。


离线ensoon

发帖
166
金币
0
威望
15
只看该作者 沙发  发表于: 2012-04-04
很好
open source ,like douban.com [color=#ff0000][url]www.ensoon.com[/url][/color]
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
提到某人:
选择好友
上一个 下一个