以前mysql搭建新备库都是在现在业务较小的备库上停止同步或停止数据库,然后拷贝数据库到新备库,配置好新备库后,再开启同步或数据库。然而,这次没有空闲备库用来搭新备库。需要从一个业务繁忙的数据库中搭建一个新备库,对系统延时要求比较高,所以同步和数据库都不能停。所以我们用了percona的 xtrabackup备份工具。
 
因为这个备份要作为备库,所以用了–slave-info参数,备份完成后会生成一个对应主库的binlog日志的文件,用于配置同步。为了保证数据一致性,使用了–slave-info参数后会在某一段时间内加一个全局只读锁,导致库不可写,但是这个要比停止库的同步的影响要小。数据库总共1.4T,前面备份的1.3T都很顺利,没有锁和延时。在备份最后100G数据文件的时候产生了一个全局只读锁,造成了大约3个小时的延迟,备份完成后大概半小时后延时追上了 。下面介绍用xtrabackup 搭建备库的主要步骤:
 
1.xtrabackup 安装

[root@db-2-43 ~]# cd /usr/src/
[root@db-2-43 src]# wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/binary/Linux/x86_64/percona-xtrabackup-2.1.5-680-Linux-x86_64.tar.gz
[root@db-2-43 src]# tar zxvf percona-xtrabackup-2.1.5-680-Linux-x86_64.tar.gz
[root@db-2-43 src]# cp percona-xtrabackup-2.1.5-Linux-x86_64/bin/* /data/mysql/bin/

 
xtrabackup是通过DBD::mysql连接和mysql通信,使用前需要安装perl的DBD::mysql模块
通过yum安装

[root@db-2-43 DBD-mysql-4.023]# yum -y install perl-DBD-MySQL.x86_64

或者通过源码安装DBI-DBD

# wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.628.tar.gz
# tar zxvf DBI-1.628.tar.gz
# cd DBI-1.628
# perl Makefile.PL
# make && make install
# wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.023.tar.gz
# tar zxvf DBD-mysql-4.023.tar.gz
# cd DBD-mysql-4.023
# perl Makefile.PL --libs="-L/data/mysql/lib -lmysqlclient -lz -lrt -lcrypt -lnsl -lm" --cflags=" -I/data/mysql/include/"
# make && make install

 
2.开启一个作为slave的完全备份
开启一个完全备份,加入–slave-info参数表明这是一个用来做slave的备份,备份完之后会生成一个xtrabackup_slave_info文件,记录了备份完成后主库的二进制日志文件和位置,用来开启一个同步。

[root@db-2-43 data]# innobackupex --user=root --password= root --port=3306 --defaults-file=/etc/my.cnf --slave-info --socket=/data/mysql/data/mysql.sock --no-timestamp /data/backup/pis_slave

备份成功后会看到如下信息:
innobackupex: Backup created in directory ‘/data/backup/pis_slave’
innobackupex: MySQL slave binlog position: master host ‘10.0.2.44’, filename ‘mysql-bin.012434′, position 525181886
131028 20:20:37  innobackupex: Connection to database server closed
131028 20:20:37  innobackupex: completed OK!
 
备份完成后,还不能用于恢复,一些未提交的事物需要恢复,需要恢复redo logo的数据,确保数据一致

# innobackupex --apply-log /data/backup/pis_slave/

执行成功会看到如下信息
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown…
InnoDB: Shutdown completed; log sequence number 6370833331492
131029 14:12:41  innobackupex: completed OK!
 
3.备份完成将备份拷贝到新的备库服务器
 
4.在新备库安装新的mysql数据库。注意的是恢复前要关闭数据库,清空数据库文件目录,因为如果数据目录有存在文件的话是不会覆盖的。然后用下列命令进行数据拷贝恢复,下列命令会将备份出的数据根据my.cnf配置的信息将备份拷贝到mysql数据目录。或者手动将备份文件拷贝到mysql的数据目录也可以。
innobackupex –copy-back /data/backup/pis_slave
 
5.启动数据库

mysqld_safe --user=mysql --ledir=/data/mysql/bin/ &

6.配置同步
查看主库的binlog位置

[root@db-3-5 pis_slave]# cat xtrabackup_slave_info
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.012434', MASTER_LOG_POS=525181886

开启同步

14:30:53 (none)>CHANGE MASTER TO
-> MASTER_HOST='10.0.2.44',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='repl',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.012434',
-> MASTER_LOG_POS=525181886,
-> MASTER_CONNECT_RETRY=10;
14:33:00 (none)> start slave;

 

xtrabackup备份方式搭建一个mysql slave的更多相关文章

  1. Spring框架——事务管理方式搭建一个小的项目

    学习Spring框架,通过事务管理的方式搭建一个小的项目,该项目可以查询对数据库中的图书库存数量进行修改. 首先,使用MVC分层的设计模式思想搭建项目目录结构. 此部分代码源码之中都有相关注释,所以尽 ...

  2. 如何搭建一个 MySQL 分布式集群

    1.准备集群搭建环境 使用6台虚拟机来搭建 MySQL分布式集群 ,相应的实验环境与对应的MySQL节点之间的对应关系如下图所示: 管理节点(MGM):这类节点的作用是管理MySQLCluster内的 ...

  3. 为MySQL选择合适的备份方式

    数据库的备份是极其重要的事情.如果没有备份,遇到下列情况就会抓狂: UPDATE or DELETE whitout where… table was DROPPed accidentally… IN ...

  4. 选择适用才最好 盘点MySQL备份方式

    我们要备份什么? 一般情况下, 我们需要备份的数据分为以下几种 数据 二进制日志, InnoDB事务日志 代码(存储过程.存储函数.触发器.事件调度器) 服务器配置文件 备份工具 这里我们列举出常用的 ...

  5. Docker 搭建 Tomcat + Mysql

    Docker 搭建 Tomcat + Mysql 准备 虚拟机 虚拟机安装Docker 在纯净的Centos镜像上搭建 Centos镜像准备 虚拟机上拉取 Centos 镜像: docker pull ...

  6. PXC备份方式总结

    记录一下. 1.mysqldump数据导出 关于GTID: GTID是MySQL5.6以后,加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力. A global t ...

  7. 搭建一个webpack微服务器

    [前言]:因为最近在vue2.0的时候用到了webpack的externals,才发现我之前都只是用webpack做一些搭建完项目后的“收尾工作”——即打包,而没有把它纳入到项目开发的“主体过程”中来 ...

  8. Spring框架——JDBC方式搭建项目

    学习Spring框架,使用JDBC的方式配置方式搭建一个项目,进行项目总结. 首先,采用MVC设计模式思想,搭建项目目录. 然后各个目录文件下面的相关源码附上: controller目录: impor ...

  9. innobackupex 备份数据搭建 MySQL Slave

    简介: 数据量比较大时,使用 innobackupex 备份数据新增 MySQL Slave 节点. 安装 innobackupex 工具,我这里写过一次:http://www.cnblogs.com ...

随机推荐

  1. hibernate 开发步骤

    1 创建Customer表 CREATE TABLE CUSTOMER ( CID int NOT NULL PRIMARY KEY , USERNAME varchar(20) , PASSWORD ...

  2. NativeXml: A native Delphi XML parser and writer

    http://www.simdesign.nl/xml.html This software component contains a small-footprint Object Pascal (D ...

  3. 【iOS开发-图层】图层的获取与一些属性

    图层 每个控件都有自己的一个图层,这个空间的全部东西就是显示在这个图层上面的,控件本身没有显示东西的功能,仅仅有拥有了图层才干显示东西 图层的获取 CALayer *layer = self.test ...

  4. 使用JS在客户端判断当前网络状态

    1. navigator.onLine 2. ajax请求 3. 获取网络资源 1. navigator.onLine 通过navigator.onLine判断当前网络状态: 12345 if(nav ...

  5. Singleton 单例模式(懒汉方式和饿汉方式)

    单例模式的概念: 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 关键点: 1)一个类只有一个实例       这是最基本 ...

  6. vim多行注释与取消

    神操作 在vim中编写代码,常常会遇到多行注释和取消注释的情况,在VS中我们可以用默认的快捷键或者在设置中自定义快捷键来解决这个问题. vim既然这么强大,必然也是有快捷键来完成的.下面给出具体步骤: ...

  7. [转] NSMapTable 不只是一个能放weak指针的 NSDictionary

    NSMapTable 不只是一个能放weak指针的 NSDictionary NSMapTable是早在Mac OS X 10.5(Leopard)的引入集合类.乍一看,这似乎是作为一个替换NSDic ...

  8. iOS:切换视图时,反向传递数据方法二:代理

    代理: 1.发送信息的控制器设置一个代理,并自定义一个代理的方法,用来传递数据 2.接受信息的控制器遵循发送信息的控制器的协议 3.接受信息的控制器设置发送信息的控制器的代理为自己self 4.接受信 ...

  9. thinkphp问题

    这几天组里有个php系统报安全漏洞,负责的厂商跑了,没办法,被组长丢过来改漏洞,记录一下部分内容. 配置php的环境  参考https://blog.csdn.net/u011415782/artic ...

  10. 复习原生ajax

    function ajax(url, fnSucc, fnFaild) { //1.创建 if(window.XMLHttpRequest) { var oAjax=new XMLHttpReques ...