今天银河网要求实现将mysql数据库进行计划备份,希望能将这个生成的备份文件拷贝传输到另一台服务器作为备份保证数据能够更加安全。
需求如下:
1、保持5天的备份数据
2、每天凌晨2点30分开始备份数据
3、备份操作完成后,将备份5天的数据一起同步到另一台linux服务器,同时删除两台服务器5天前的备份数据。保证数据完整性的情况下又不太会占用太多的资源
在冯晓的指导下,完成这个任务,以后肯定是能用上的。
那现在先简单总结下自动备份及远程同步的过程吧:
1、准备好自动备份
脚本命名为
sql_bakup.sh,放在
数据库服务器的/home目录下,代码如下:
- DATE=`date -I`
- #将命令存放到一个变量中
- mysqldump='/home/mysql.5.1.39/bin/mysqldump'
- #命名备份文件名称
- dumpFile=mysql_$DATE.sql
- #切换到备份文件存放目录
- cd /home/mysql.5.1.39/data_back
- #执行dump命令
- $mysqldump -uroot -ptsroot --opt --default-character-set=gbk --database pw85_yinhe_hebin > $dumpFile
- #删除备份文件存放目录下的超过5天的.sql文件
- find /home/mysql.5.1.39/data_back -name "mysql_*.sql" -type f -mtime +5 -exec rm -rf {} \; > /dev/null 2>&1
- #将本服务器data_back(后面紧跟/)目录下的文件同步传输到117服务器上配置web的路径下
- /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文件备份数据库。
在
数据库服务器上输入命令:
编辑计划任务内容,如下:
- 30 2 */1 * * /home/sql_bakup.sh
计划任务的规则可以自己百度一下,上面/1其实可以去掉的,如果是10天备份一次的话 就可以改成
*/10,这样就是
每第10天的凌晨2点30分备份执行后面的.sh文件了。
查看当前服务器的计划任务指令:
自动备份操作已经完成,现在开始将
同步传输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是否已经安装过了:
如果能正常启动的,那就是安装了,否则进行下一步安装过程。
有可能rsync没有在服务器启动后自动启动,可以编辑/etc/rc.local文件,将
放到这个文件的最后一行就可以了。
服务端(附件服务器):
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同步传输:
- /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路径
等配置好后,可以通过以上命令先预先执行一下文件传输操作,也就是在命令行里边执行如下命令:
- /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备份的数据。