MySQL Replication之二——基于binlog坐标复制

 

主库的所有更新操作都会记录到主库的binlog文件中。从库通过读取主库的binlog文件,在从库的本地数据库中重新应用这些更新。在没有特别指定的情况下,主库的所有binlog事件都会在从库中应用。当然,你也可配置从库只执行特定的事件以更新特定的库或表。

不同的从库维护各自的binglog坐标(文件名和文件中的位置),也就是说不同的从库复制的进度是不一样的,各自维护自己的复制进度。一个从库与主库的连接或断开,并不影响主库以及其他从库。

主库和它的所有从库必须配置不同的ID(server-id配置项),另外,所有从库必须配置主库的主机名,binlog文件名,binlog文件内的位置等信息。

配置步骤:

  1. 在主库服务器上确认已开启binlog功能,并且为服务器配置一个唯一的ID。这需要重启MySQL服务。
  2. 为所有从库服务器配置唯一的ID。这需要重启MySQL服务。
  3. 为复制功能创建单独的用户账号。
  4. 根据从库原始数据的创建方式,记录要从主库开始复制的主库binlog坐标(主库binlog文件名以及该文件的读取位置)。
  5. 在从库中配置Replication信息,如主库服务器主机名,复制用户名及密码,binlog文件名,binlog文件读取位置。可以在从库中执行change master to语句完成这项工作。

主库配置:

在my.cnf配置文件中配置:

server-id=xxx (确保server-id的唯一性)

log-bin=/path/basename (开启主库binlog,path为binlog存放路径,basename为binlog文件名)

从库配置:

  1. 配置server-id:确保server-id的唯一性
  2. 配置binlog:在从库上是否开启binlog,取决于Replication的复制结构。如A -> B -> C,B是A的从服务器又是C的主服务器,在这种复制结构下,B服务器需要开启binlog。log_slave_updates=1开启从库binlog,默认是开启状态。如果你想关闭binlog功能,可以配置skip-log-bin和skip-log-slave-updates。

创建复制账号:

从库通过该账号连接出库进行复制操作。该账号需要REPLICATION SLAVE权限。

mysql> CREATE USER 'repl'@'slavehost' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'slavehost';

确定主库binlog坐标:

为了正确设置从库复制的起始位置,你需要获取主库binlog坐标(binlog文件名及文件开始位置)。

以下为获取binlog坐标几种常用方式:

1、如果主库MySQL服务可以停,则关闭主库MySQL服务,将主库物理文件拷贝至从库。重启主库MySQL服务时,主库会新建binlog文件。因此,从库只需指向这份新的binlog文件开始复制就可以了。但这需要停止主库MySQL服务,在生产环境中几乎是不可能的。

2、加全局读锁,记录当前状态的binlog坐标,然后拷贝数据到从库(物理拷贝或用mysqldump)。拷贝完成后,解除全局读锁。从库从记录的binlog坐标开始复制。

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

 这种方式会阻塞全部的写操作,只适用于无写入和更新要求的时段(通常在夜晚)

3、使用mysqldump导出数据并使用--master-data选项。

shell> mysqldump --all-databases --master-data > dbdump.db

 使用这条命令导出的数据中包含change master to语句,该语句中已包含binlog坐标。不过--master-data选项也会在导出数据前先执行FLUSH TABLES WITH READ LOCK。所以,在整个导出过程中也会阻塞全部的写操作,与第2中方式效果一样,只不过更方便一些,它把binlog坐标直接写入了导出的文件中。

4、使用mysqlbackup或percona-xtrabackup等工具,这些工具会自动记录binlog坐标。在使用InnoDB引擎的情况下,推荐使用这些工具。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值