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

简单架构:

简单描述:

要备份中间这三台服务器上面的数据库数据到备份机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命令
时间: 2024-10-05 23:58:24

Xtrabackup+Rsync 备份数据库并同步到远端备份机的相关文章

SQL Server 2005/2008备份数据库时提示“无法打开备份设备”

错误描述: 今天备份sqlserver 2008数据库时候,想要将备份文件放在f盘的根目录下,结果提示如下信息:备份对于服务器“服务器名”失败.(Microsoft.SqlServer.Smo)其他信息:System.Data.SqlClient.SqlError:无法打开备份设备'f:\abc.bak'.出现操作系统错误5(拒绝访问.).(Microsoft.SqlServer.Smo) 解决方法: 因为Sql Server 2005 可能存在一个小Bug,不能将备份文件放在根目录下,必须放在

学以致用,python多线程备份数据库并删除旧的备份。

1 #!/usr/bin/python 2 # -*- coding=utf-8 -*- 3 import time 4 import os 5 import datetime 6 import threading 7 from time import ctime,sleep 8 9 date=time.strftime('%Y-%m-%d',time.localtime(time.time())) 10 dbname=('test','test2') #定义元组必须要有多个,要不则循环里面的字

sql server 2008 R2 压缩备份数据库

今天需要把一个省外项目的数据库从服务器上备份.拷贝到本机(跨地域传输数据库备份文件). 连上VPN,通过远程桌面连接,连接上服务器,发现数据库文件已经有20G以上大小了. 文件太大,公司网络也不稳定,根本不可能通过网络传输过来. 于是,把数据库的恢复模式由"完整"模式设置为"简单"模式,接着收缩数据库, 数据库瞬间由20G变成1G多点. 在SSMS中,新建查询窗口,执行数据库备份语句: --定义变量,把备份数据库的QL脚本赋值给变量 declare @SqlBack

MSSQL创建维护计划自动备份数据库

一,备份数据库 1,点击"管理-->维护计划"右键点击"新建任务计划" 2,根据自己的需求设置备份计划的自动执行时间,这里我设置的是每天凌晨12就执行备份计划. 3,添加"备份数据库"计划 4,设置"备份数据库"计划的相关选项 5,备份计划完成以后,可以马上执行一次完整备份. 二,还原数据库 1,右击你所需要还原的数据库,依次点击"任务-->还原-->数据库". 2,在源数据库选择还原最新

MSSQLSERVER数据库- 作业调度定时备份数据库

作业调度和备份数据库是常见的行为,掌握这两项技术我觉的非常有必要. 在网上找到这个示例,记录在这里 备份数据库的SQL语句 --自动备份并保存最近5天的SQL数据库作业脚本 DECLARE @filename VARCHAR(255) DECLARE @date DATETIME SELECT @date=GETDATE() SELECT @filename = 'G:\存放位置\数据库名称-'+CAST(DATEPART(yyyy,@date) as varchar)+'-'+CAST(DAT

局域网备份数据库和文件

一.前情提要 把服务器架设在VirtualBox虚拟机上,对应服务器的数据库文档也备份在虚拟机上.现由于某种意外,虚拟机挂了,需要我们去修复虚拟机或者将虚拟机里面的文件拷贝出来重新架在新的虚拟机上,如果能成功当然是好的,可是很不幸的是以目前掌握的技术修复不了数据也拷贝不出来,这下怎么办呢???只能哭了~~~~ 二.经验教训 为了避免再出现数据拷不出来造成不必要的麻烦,我们就设定让虚拟机里的重要文件定时备份到实体机上,实体机自然是比较稳定的,而且就算系统挂了也懂得怎么把数据拷回来. 三.数据库备份

SQL Server 远程备份数据库

经常会有定时备份数据库的需要.定时备份到本机的话,还是挺容易的,计划任务就可以完成,但如果是整机挂了,那备份到本机是没意义的,那么就需要来考虑备份到局域网中,其它电脑里. 下面就分享一份在网上找了之后,自己再简单整理过的代码,配合 SQL Server 代理中的作业功能,已经稳定运行一个星期了,每小时就备份一次.  -- 创建网络映射(Y是盘符:IP地址后面要带共享文件夹的名称:password是密码,双引号引起:account是远程电脑的登录名) exec master..xp_cmdshel

完整备份数据库+差异备份,恢复到另外一台服务器

材料:完整备份数据库一份.最近备份的差异备份一份 现在需要将它完整的恢复到另外一台数据库服务器上. 首先 左侧数据库-右键-还原数据库 然后目标数据库手动输入一个名字. 下面源设备选择完整数据库文件,然后确定后会出现在 选择用于还原的备份集 那里,勾选中完整的那份.然后左侧选项 填写一下 mdf 文件路径等 最主要的是下面那个要选择中间那个选项,以便恢复完了以后还能继续恢复差异备份 点击确认后,数据开始恢复,恢复完了以后,刷新一下左侧的数据库列表,会发现刚刚那个输入的数据库名字,显示的是 正在还

数据库备份恢复--备份数据库

备份数据库注意事项: 1.备份的位置 2.是否使用FRA 3.备份位置的权限和空间 数据库备份 1.备份整个数据库 RMAN> backup database plus archivelog delete input; Starting backup at 07-SEP-18 --备份日期current log archived         --归档?using target database control file instead of recovery catalogallocated