標籤:xtrabackup mysql rsync
Xtrabackup+Rsync 備份資料庫並同步到遠端備份機
簡單架構:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/54/wKiom1V5N5yzcxrsAAErWN2NyIE784.jpg" title="FA(R87X$_VX)){%CKH7KLHD.png" alt="wKiom1V5N5yzcxrsAAErWN2NyIE784.jpg" />
簡單描述:
要備份中間這三台伺服器上面的資料庫資料到備份機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 rsyncfiecho $rsyncpassword > /etc/rsyncd.passwordchmod 600 /etc/rsyncd.passwordlibaio=`rpm -qa libaio`if [ -z ${libaio} ];then yum -y install libaiofiperl_Time_HiRes=`rpm -qa perl-Time-HiRes`if [ -z ${perl_Time_HiRes} ];then yum -y install perl-Time-HiResfiperl_DBD_MySQL=`rpm -qa perl-DBD-MySQL`if [ -z ${perl_DBD_MySQL} ];then yum -y install perl-DBD-MySQLfiperl_IO_Socket_SSL=`rpm -qa perl-IO-Socket-SSL`if [ -z ${perl_IO_Socket_SSL} ];then yum -y install perl-IO-Socket-SSLfipercona_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 fifi
vi mysql_full_backup.sh#!/bin/bash#此指令碼用來進行資料庫的全備份,結合計劃任務完成#注意:下面的變數值可能要修改,仔細確認下mysqluser=rootrsyncuser=scjrsync_hostip=‘192.168.186.140‘ip=‘192.168.186.130‘ #本機ipmysqlpassword=123456mysqlsocket=‘/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 $backuptodirfi#進行全備份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 $binlogdironedayago_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 $backuptodirlastfull_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=scjrsync_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 = rootgid = rootuser chroot = nomax connections = 200timeout = 600pid file = /var/run/rsyncd.pidlock file = /var/run/rsyncd.locklog file = /var/run/rsyncd.log[mysqlbackup]path = /data/mysql/mysql_full_backupignore errorsread only = nolist = nohosts allow = 192.168.186.0/255.255.255.0auth users = scjsecrets file = /etc/rsyncd.password[mysqlbinlogbackup]path = /data/mysql/mysqlbinlog_backupignore errorsread only = nolist = nohosts allow = 192.168.186.0/255.255.255.0auth users = scjsecrets 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命令
本文出自 “見” 部落格,請務必保留此出處http://732233048.blog.51cto.com/9323668/1660910
Xtrabackup+Rsync 備份資料庫並同步到遠端備份機