工作需求,客户需要两台机器上的数据库文件和其他文件一致,其他文件好说,直接使用rsync的增量同步就好了,数据库的同步让我头疼了好久。
刚开始使用增量同步的方法去同步数据库,当主端数据增加后同步,发现并没有什么卵用。然后就只能每次都做全备了,技术不过关,只能用笨方法,先把备用服务器的数据库文件移走,以时间命名新的备份文件,然后从主端同步数据,考到数据库目录,然后重启数据库,以便web能够正确读到数据,最后find一下7天以前的备份文件并删除,目的也就达到了。说明一下:这样ssh使用key认证无需输入密码。
脚本如下:
#!/bin/bash
#This script is used to synchronize the recording and the
database file, the synchronization time is three in the
night.
# Author:WangKangkang
# Email:wangkangkang@86call.cn
RSYNC_SERVICE=192.168.10.250
#需要同步数据的服务器
AUTH_USER=root
#用户名
DATE=$(date '+%Y-%m-%d')
#时间
BAKROOT=/var/lib/mysql/
#需要同步数据服务器的数据库路径
BACKUP_DIRECTORY=/var/lib/mysql/
#备份服务器数据库路径
mv $BACKUP_DIRECTORY /mysql_data/mysql-$DATE/
#将备份服务器的数据库文件移走
mkdir /var/lib/mysql/
#重新创建数据库文件夹
chown mysql:mysql $BACKUP_DIRECTORY
#rsync monitor file
rsync -avz --delete $AUTH_USER@$RSYNC_SERVICE:$BAKROOT
$BACKUP_DIRECTORY
#同步数据库文件
echo "$(date) Recording file
synchronization success" >>
/var/log/asterisk/Rsync.log
#打印日志
#rsync mysql file
rsync -avz --delete
$AUTH_USER@$RSYNC_SERVICE:/var/spool/asterisk/monitor/
/var/spool/asterisk/monitor/
echo "$(date) mysql file synchronization
success" >>
/var/log/asterisk/Rsync.log
#restart mysql
/etc/init.d/mysqld restart
#重启数据库
echo "$(date) mysql file synchronization
success" >>
/var/log/asterisk/Rsync.log
#rm 7 days ago mysql_data
find /mysql_data/ -mtime +2 -name mysql-'*' -exec rm -rf
{} \;
#END