简单架构:
简单描述:
要备份中间这三台服务器上面的数据库数据到备份机140上;中间这三台服务器是游戏服务器,WEB服务和DB都在一台机器上
最前端是passport服务器,提供玩家的账号相关信息及充值信息等,WEB服务和DB都在一台机器上,需要将数据库数据备份到备份机140上
服务器129对passport服务器的数据库做了mysql的主主同步,这里先忽略
要求:
对游戏服务器和passport服务器的数据库数据,在本地备份,同时备份到远端备份机140上,在本地保留三天,在备份机保留7天
将passport服务器的二进制日志文件备份到远端备份机140上(本地不做备份)
计划任务,每天凌晨1点执行
参考:
http://732233048.blog.51cto.com/9323668/1660146
步骤:
1、拿其中一台服务器为例,其他都一样
在192.168.186.130上操作:
以下所有脚本和所需的软件包请到http://down.51cto.com/data/2058997下载
vi install_packages.sh #!/bin/bash #安装xtrabackup rsync及依赖包 #变量值可能需要修改,仔细确认下 rsyncpassword=scj #rsync的密码 rsync=`rpm -qa rsync` if [ -z ${rsync} ];then yum -y install rsync fi echo $rsyncpassword > /etc/rsyncd.password chmod 600 /etc/rsyncd.password libaio=`rpm -qa libaio` if [ -z ${libaio} ];then yum -y install libaio fi perl_Time_HiRes=`rpm -qa perl-Time-HiRes` if [ -z ${perl_Time_HiRes} ];then yum -y install perl-Time-HiRes fi perl_DBD_MySQL=`rpm -qa perl-DBD-MySQL` if [ -z ${perl_DBD_MySQL} ];then yum -y install perl-DBD-MySQL fi perl_IO_Socket_SSL=`rpm -qa perl-IO-Socket-SSL` if [ -z ${perl_IO_Socket_SSL} ];then yum -y install perl-IO-Socket-SSL fi percona_xtrabackup=`rpm -qa percona-xtrabackup` system_weishu=`uname -i` mysqlversion=`mysql -V | awk -F‘,‘ ‘{print $1}‘ | awk ‘{print $5}‘ |awk -F‘.‘ ‘{print $2}‘` if [ -z ${percona_xtrabackup} ];then if [ ${system_weishu} == ‘i386‘ ];then #等号前后要有空格 if [ $mysqlversion -ge 5 ];then #版本大于等于5.5 rpm -ivh packages/percona-xtrabackup-2.2.9-5067.el6.i686.rpm elif [ $mysqlversion -lt 5 ];then #版本小于5.5 rpm -ivh packages/percona-xtrabackup-20-2.0.8-587.rhel6.i686.rpm fi elif [ ${system_weishu} == ‘x86_64‘ ];then if [ $mysqlversion -ge 5 ];then #版本大于等于5.5 rpm -ivh packages/percona-xtrabackup-2.2.9-5067.el6.x86_64.rpm elif [ $mysqlversion -lt 5 ];then #版本小于5.5 rpm -ivh packages/percona-xtrabackup-20-2.0.8-587.rhel6.x86_64.rpm fi fi fi
vi mysql_full_backup.sh #!/bin/bash #此脚本用来进行数据库的全备份,结合计划任务完成 #注意:下面的变量值可能要修改,仔细确认下 mysqluser=root rsyncuser=scj rsync_hostip=‘192.168.186.140‘ ip=‘192.168.186.130‘ #本机ip mysqlpassword=123456 mysqlsocket=‘/tmp/mysqld.sock‘ mysql_defaults_file=‘/usr/local/mysql/my.cnf‘ backuptodir=‘/data/mysql_backup/mysql_full_backup_lszc/‘ #备份到目录 binlogdir=‘/opt/mysql/binlog/‘ #二进制日志目录 binlogname=‘mysql-binlog.0*‘ #二进制日志文件名 rsyncmodule=mysqlbackup #rsync的模块 if [ ! -d $backuptodir ];then mkdir -p $backuptodir fi #进行全备份 innobackupex --user=$mysqluser --password=$mysqlpassword --socket=$mysqlsocket --defaults-file=$mysql_defaults_file $backuptodir 2> /dev/null || exit 1 #删除一天前的全备份文件,即保留两个备份文件 find $backuptodir -type f -mtime +1 -exec rm -f {} \; #删除一天前的二进制日志文件,即保留两天的二进制日志文件 cd $binlogdir onedayago_binlog=`find . -type f -mtime +1 -name "$binlogname" | sort | tail -n1 | awk -F‘/‘ ‘{print $2}‘` mysql -u $mysqluser -p$mysqlpassword -e "PURGE MASTER LOGS TO ‘$onedayago_binlog‘" 2> /dev/null #找出最后一个全备份文件,进行压缩 cd $backuptodir lastfull_backup=`ls -l | grep ‘^d‘ | awk ‘{print $9}‘ | sort | tail -n1` tar -zcf mysql_full_${ip}_${lastfull_backup}.tar.gz ${lastfull_backup} #将压缩文件rsync同步到备份机 rsync -az --password-file=/etc/rsyncd.password ${backuptodir}mysql_full_${ip}_${lastfull_backup}.tar.gz [email protected]${rsync_hostip}::$rsyncmodule || exit 1 #删除压缩文件 rm -f ${backuptodir}mysql_full_${ip}_${lastfull_backup}.tar.gz
创建计划任务:
crontab -e
#对数据库进行全备份 0 1 * * * cd /data/scripts/mysql;./mysql_full_backup.sh
此脚本只在passport服务器上执行 vi mysqlbinlog_backup.sh #!/bin/bash #此脚本用来备份二进制日志文件,并结合计划任务完成 #注意:此脚本只适用于二进制日志文件单独在一个目录下,若二进制日志文件不是单独在一个目录下面,请先去修改配置文件 #此脚本:二进制日志文件在本地没有备份,只备份到远端的备份机 #变量值可能需要修改,仔细确认下 binlogdir=/opt/mysql/binlog/ #binlog的数据目录 rsyncuser=scj rsync_hostip=‘192.168.186.140‘ rsync_binlog_monule=mysqlbinlogbackup #binlog的rsync模块 #同步数据到备份机 rsync -az --password-file=/etc/rsyncd.password ${binlogdir}* [email protected]$rsync_hostip::$rsync_binlog_monule || exit 1
在passport服务器创建计划任务
crontab -e
#将二进制文件备份到备份机 */1 * * * * cd /data/scripts/mysql;./mysqlbinlog_backup.sh
2、在备份机140上安装rsync:
yum -y install rsync
vi /etc/xinetd.d/rsync #修改文件,让xinetd来管理rsync
将disable = yes 改为 disable = no
yum -y install xinetd
vi /etc/rsyncd.conf #创建配置文件,默认是不存在的
uid = root gid = root user chroot = no max connections = 200 timeout = 600 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/run/rsyncd.log [mysqlbackup] path = /data/mysql/mysql_full_backup ignore errors read only = no list = no hosts allow = 192.168.186.0/255.255.255.0 auth users = scj secrets file = /etc/rsyncd.password [mysqlbinlogbackup] path = /data/mysql/mysqlbinlog_backup ignore errors read only = no list = no hosts allow = 192.168.186.0/255.255.255.0 auth users = scj secrets file = /etc/rsyncd.password
注意:auth users = scj 这一行一定要有,否则任何账号不用密码都可以访问rsync服务端;这样就只有scj这一个账号可以访问了
vi /etc/rsyncd.password #创建密码文件,用户名:密码
scj:scj
chmod 600 /etc/rsyncd.password #密码文件的权限必须是600,否则会有问题
mkdir -p /data/mysql/{mysqlbinlog_backup,mysql_full_backup} #创建共享目录
chkconfig xinetd on
/etc/init.d/xinetd start #启动rsync
netstat -tlnpa | grep 873 #rsync监听873端口
tcp 0 0 :::873 :::* LISTEN 13613/xinetd
vi /data/scripts/mysql/delmysql_backup.sh #!/bin/bash #此脚本用来定时清理备份机上mysql的全备份和二进制文件 #mysql全备份和二进制文件全部保留7天 #变量值可能需要修改,仔细确认下 mysql_full_backupdir=/data/mysql/mysql_full_backup #mysql的全备份目录 mysqlbinlog_backupdir=/data/mysql/mysqlbinlog_backup #二进制文件备份目录 #删除七天前的全备份文件,即保留八个备份文件 find $mysql_full_backupdir -type f -mtime +7 -exec rm -f {} \; #删除七天前的二进制日志文件,即保留八天的二进制日志文件 find $mysqlbinlog_backupdir -type f -mtime +7 -exec rm -f {} \;
创建计划任务
crontab -e
#定时清理mysql的全备份和二进制文件 0 3 * * * cd /data/scripts/mysql;./delmysql_backup.sh
后期数据恢复步骤:
#先使用全备份恢复到备份时的数据: #1、/etc/init.d/mysqld stop #在数据恢复时一定要记得把mysql服务停掉 #2、mv /opt/mysql/data/* /tmp/linshi/ #把数据库数据目录下的所有数据临时mv到一个临时目录 #3、在本地找到最后一个全备份:(例如是:2015-06-11_05-13-26) #4、innobackupex --apply-log 2015-06-11_05-13-26 #准备一个全备份 #5、innobackupex --copy-back --defaults-file=/usr/local/mysql/my.cnf 2015-06-11_05-13-26 #恢复数据 #6、chown -R mysql.mysql /opt/mysql/data/ #修改数据权限(默认xtrabackup恢复数据后,所有数据的权限都是root) #7、/etc/init.d/mysqld start #启动mysql服务 # #如果本地备份数据全部丢失: #到备份机上找到最后一个全备份文件:(例如是:mysql_full_192.168.186.136_2015-06-11_05-13-26.tar.gz) #rsync -avz [email protected]备份机ip:/data/mysql/mysql_full_backup/mysql_full_192.168.186.136_2015-06-11_05-13-26.tar.gz /data/mysql_backup/mysql_full_backup_lszc/ #这里的root是备份机的root用户,需要用到root的密码 #cd /data/mysql_backup/mysql_full_backup_lszc/ #tar -zxf mysql_full_192.168.186.136_2015-06-11_05-13-26.tar.gz #innobackupex --apply-log 2015-06-11_05-13-26 #准备一个全备份 #innobackupex --copy-back --defaults-file=/usr/local/mysql/my.cnf 2015-06-11_05-13-26 #恢复数据 #chown -R mysql.mysql /opt/mysql/data/ #修改数据权限(默认xtrabackup恢复数据后,所有数据的权限都是root) #/etc/init.d/mysqld start #启动mysql服务 # #再使用二进制日志文件恢复备份之后的数据: #cd 2015-06-11_05-13-26 #进入到最后一个备份目录 #cat xtrabackup_binlog_info #获取做全备份时正在使用的二进制日志文件和此时的pos值,从这个二进制日志文件和pos值开始恢复之后的数据 #使用mysqlbinlog命令