Xtrabackup+Rsync 备份数据库并同步到远端备份机

Xtrabackup+Rsync 备份数据库并同步到远端备份机前端


简单架构:mysql

wKiom1V5N5yzcxrsAAErWN2NyIE784.jpg




简单描述:sql

   要备份中间这三台服务器上面的数据库数据到备份机140上;中间这三台服务器是游戏服务器,WEB服务和DB都在一台机器上数据库

   最前端是passport服务器,提供玩家的帐号相关信息及充值信息等,WEB服务和DB都在一台机器上,须要将数据库数据备份到备份机140上bash

   服务器129对passport服务器的数据库作了mysql的主主同步,这里先忽略服务器




要求:架构

   对游戏服务器和passport服务器的数据库数据,在本地备份,同时备份到远端备份机140上,在本地保留三天,在备份机保留7天app

   将passport服务器的二进制日志文件备份到远端备份机140上(本地不作备份)socket

   计划任务,天天凌晨1点执行tcp




参考:

http://732233048.blog.51cto.com/9323668/1660146





步骤:

   一、拿其中一台服务器为例,其余都同样

   在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 $rsyncuser@${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}* $rsyncuser@$rsync_hostip::$rsync_binlog_monule || exit 1

   在passport服务器建立计划任务

   crontab -e

#将二进制文件备份到备份机
*/30 * * * * cd /data/scripts/mysql;./mysqlbinlog_backup.sh


   二、在备份机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








后期数据恢复步骤:

#先使用全备份恢复到备份时的数据:
#一、/etc/init.d/mysqld stop                 #在数据恢复时必定要记得把mysql服务停掉
#二、mv /opt/mysql/data/* /tmp/linshi/       #把数据库数据目录下的全部数据临时mv到一个临时目录
#三、在本地找到最后一个全备份:(例如是:2015-06-11_05-13-26)
#四、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服务
#
#若是本地备份数据所有丢失:
#到备份机上找到最后一个全备份文件:(例如是:mysql_full_192.168.186.136_2015-06-11_05-13-26.tar.gz)
#rsync -avz root@备份机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命令
相关文章
相关标签/搜索