简介

Xtrabackup是由 Percona 开发的一个开源软件,可实现对 InnoDB 的数据备份,支持在线热备份(备份时不影响数据读写)。备份时,Xtrabackup 会将 Master 的 binlog 信息记录在 xtrabackup_slave_info 文件中,通过此信息可以方便的搭建主从复制。

XtraBackup 有两个工具:xtrabackup 和 innobackupex:

  • xtrabackup 本身只能备份 InnoDB 和 XtraDB ,不能备份 MyISAM;
  • innobackupex 本身是 Hot Backup 脚本修改而来,同时可以备份 MyISAM 和 InnoDB,但是备份 MyISAM 需要加读锁。

官网:http://www.percona.com/software/percona-xtrabackup
文档:http://www.percona.com/doc/percona-xtrabackup/2.2/index.html

注:本文服务器环境为 CentOS,其他环境请自行修改实现。

修改主库、从库 MySQL 配置文件

1、Master

vim /etc/my.cnf

datadir=/var/lib/mysqlserver-id=1log-bin=mysql-bin

2、Slave:

vim /etc/my.cnf

server-id=2datadir=/var/lib/mysql

安装 XtraBackup

1、添加源

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

检查是否添加成功:

yum list | grep percona

如果执行正确,其输出信息通常类似:

percona-release.x86_64                     0.0-1                       installed...Percona-Server-client-51.x86_64            5.1.47-rel11.1.51.rhel5     perconaPercona-Server-devel-51.x86_64             5.1.47-rel11.1.51.rhel5     perconaPercona-Server-server-51.x86_64            5.1.47-rel11.1.51.rhel5     perconaPercona-Server-shared-51.x86_64            5.1.47-rel11.1.51.rhel5     perconaPercona-Server-test-51.x86_64              5.1.47-rel11.1.51.rhel5     percona...xtrabackup.x86_64                          1.2-22.rhel5                percona

2、安装 xtrabackup

yum install percona-xtrabackup

创建备份

innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/

如果执行正确,其输出信息通常类似:

innobackupex: Backup created in directory '/path/to/BACKUP-DIR/2015-03-03_00-00-09'innobackupex: MySQL binlogposition: filename 'mysql-bin.000003', position194611122500:00:53  innobackupex: completed OK!

备份时,innobackupex 会调用 xtrabackup 备份 InnoDB 表的数据,并且会复制 MyISAM, MERGE,CSV 和 ARCHIVE 表的表定义文件(.frm 文件)、数据文件。同时还会备份触发器和数据库配置信息相关的文件。这些文件将会保存在指定备份目录中一个以时间戳命名的目录下。

准备备份

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

innobackupex --apply-log /path/to/BACKUP-DIR

如果执行正确,其最后输出的几行信息通常如下:

xtrabackup: starting shutdown with innodb_fast_shutdown = 11204079:01:36  InnoDB: Starting shutdown...1204079:01:40  InnoDB: Shutdown completed; log sequence number 92036620120407 09:01:40  innobackupex: completed OK!

在实现“准备”的过程中,innobackupex 通常还可以使用 --use-memory 选项来指定其可以使用的内存的大小,默认通常为 100M。如果有足够的内存可用,可以多划分一些内存给 prepare 的过程,以提高其完成速度。

恢复备份

将数据复制到从服务器上:
scp -r /path/to/BACKUP-DIR root@slave_host:/data/

在从服务器中恢复备份数据:
innobackupex --copy-back /path/to/BACKUP-DIR

如果服务器剩余空间不足,你可以使用 --move-back 替换掉 --copy-back

如果执行正确,其输出信息的最后几行通常如下:

innobackupex: Starting to copy InnoDB log filesinnobackupex: in'/backup/2012-04-07_08-17-03'innobackupex: back to original InnoDB log directory '/mydata/data'innobackupex: Finished copying back files....12040709:36:10  innobackupex: completed OK!

启动从库 MySQL,设置主库信息

当数据恢复至数据目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在启动mysqld之前还需要事先修改数据文件的属主和属组。如:

chown -R mysql:mysql /mydata/data/

启动从库:

/etc/init.d/mysqld start

在主库中开设主从用的账号和权限:

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.0.1' IDENTIFIED BY 'slave';

查看备份文件 xtrabackup_binlog_info 中的日志文件以及position。

CHANGEMASTERTOMASTER_HOST='',MASTER_USER='',MASTER_PASSWORD='',MASTER_LOG_FILE='',MASTER_LOG_POS=;

开启主从同步:

STARTSLAVE;

查看从库状态:

SHOWSLAVESTATUS;

Ps:用 innobackupex 备份数据时,–apply-log 处理过的备份数据里有两个文件说明该备份数据对应的 binlog 的文件名和位置。但有时这俩文件说明的位置可能会不同。
1 对于纯 InnoDB 操作,备份出来的数据中上述两个文件的内容是一致的
2 对于 InnoDB 和非事务存储引擎混合操作,xtrabackup_binlog_info 中所示的 position 应该会比 xtrabackup_pos_innodb 所示的数值大。此时应以 xtrabackup_binlog_info 为准;而后者和 apply-log 时 InnoDB recovery log 中显示的内容是一致的,只针对 InnoDB 这部分数据。

Ps2:启动 MySQL 时,遇到权限问题的解决方法:

报错信息:

15043014:41:16InnoDB: Operating system error number 13in a file operation.InnoDB: The error means mysqld does not have the access rights toInnoDB: the directory.

解决方法:
chown -R mysql:mysql /home/data/mysql
chcon -R -t mysqld_db_t /home/mysql

参考资料:

1、http://www.oschina.net/question/1997575_167330
2、http://www.linuxidc.com/Linux/2012-10/71919.htm
3、http://julyclyde.org/?p=403

通过 XtraBackup 实现不停机不锁表搭建主从同步的更多相关文章

  1. mysql 主从复制不一致,不停库不锁表恢复主从同步

    注意: 进行此操作时,确认在之前已经开启了MySQL的bin-log日志,如果没有则无法实现 为了安全考虑,我们授权一个用户进行数据备份: [root@7con ] mysql -uroot -p m ...

  2. Mysql不锁表备份之Xtrabackup的备份与恢复

    一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...

  3. MYSQL正式环境主从复制(不锁表,不停服务)

    参考URL: http://rfyiamcool.blog.51cto.com/1030776/1016636/ 原因源于其实以前环境是有MYSQL主从复制的,且最开始主从复制之间是OK的. 但由于日 ...

  4. mysql遇到锁表常用命令

    出现 waiting for table metadata lock 锁表的解决方法 1. show processlist; kill xxx; //xxx 为会话id 2.查询是否有未提交的事物 ...

  5. sqlserver锁表、解锁、查看销表 (转载)

    sqlserver中怎么锁表.解锁.查看销表呢,下面我以三个不同的实例给各位朋友详细介绍一下有需要的朋友可参考一下. 更多详细内容请查看:http://www.111cn.net/database/O ...

  6. oracle 锁表问题

    oracle执行表数据更新的时候,会遇到锁表问题,比方说,会遇到这样的问题,主要原因是这张表被其他人占用,修改数据没有提交.oracle为了避免脏数据的产生,在其安全机制下,锁住该表. 执行如下操作, ...

  7. 解决ora-00054 Oracle锁表问题

    1.运行sql: select session_id from v$locked_object;   查出锁表的session,可能很多,正常是没有的 2.SELECT sid, serial#, u ...

  8. oracle并发请求异常,运行时间超长(一般情况下锁表)

    1.如果前台无法取消请求出现错误: 则后台更新 update fnd_concurrent_requests    set status_code = 'X', phase_code = 'C'  w ...

  9. 查看Oracle中是否有锁表的sql

    1.查看是否有锁表的sql 代码如下: select 'blocker('||lb.sid||':'||sb.username||')-sql:'|| qb.sql_text blockers, 'w ...

随机推荐

  1. appserv安装

    Appserv  官网: http://www.appservnetwork.com/ 安装好后,输入http://localhost:8082/验证是否装成功,成功后如下图

  2. hdu 1567 2006 (题意理解容易出错)

    #include<stdio.h> #include<vector> #include<algorithm> using namespace std; struct ...

  3. gcc: error trying to exec 'cc1plus': execvp: 没有那个文件或目录

    问题: 解决办法: 1.没安装G++ 可使用 sudo apt-get install g++ 进行安装 2.gcc版本和g++版本不相符 可利用gcc -v和g++ -v 查看版本

  4. iOS开发--泛型

    一. 泛型函数 1.单一占位符泛型函数 下面就使用一个经典案例:两个数值进行交换.来使用泛型,写一个通用的函数,这个函数的功能就是交换两个变量的值.在Swift中不允许类型隐式转换,也就是说,如果你定 ...

  5. JavaWeb项目开发案例精粹-第6章报价管理系统-05Action层

    0. <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC &quo ...

  6. 私有虚函数的特点(C++和Java的机制还有所不同)

    多态性与将实现多态的函数的访问限定符没有任何关系,private 函数仍然可以实现多态,它的指针仍然位于vtbl中,只不过该函数的多态一般只能在基类的内部由其他非虚函数调用该函数的时候反映出来,访问限 ...

  7. 进入第一个Android应用界面

    前话 距离上次学习Android已经过去了半年了,这半年我干嘛去了? 嘛相信大家也没兴趣了解,简单来说就是我学习了周边的知识技术,最后终于转回Android. 感觉开发一个Android需要很多知识吧 ...

  8. idea新建maven项目时,mvn archetype:generate 速度缓慢

    原文 idea新建maven项目时,mvn archetype:generate 速度缓慢 1 现象: 用IDEA新建maven项目,填写完各种参数,创建时,控制台卡在“[INFO] Generati ...

  9. 本博客不再更新,欢迎访问本人托管在GitHub上的博客:www.wshunli.com

    本博客不再更新. 欢迎访问本人托管在GitHub上的博客:www.wshunli.com

  10. Java SpringMVC实现国际化整合案例分析(i18n)

    所谓国际化就是支持多种语言,web应用在不同的浏览环境中可以显示出不同的语言,比如说汉语.英语等.下面我将以具体的实例来举例说明: (1)新建动态Javaweb项目,并导入几个SpringMVC必需的 ...