您的位置:首页 > 数据库 > MySQL

mysql5.5半同步主从复制

2013-02-28 10:19 267 查看
安装环境:centos5.7 32位 虚拟机2台分别安装了mysql5.5.16

主库ip:192.168.1.100

从库ip:192.168.1.101

mysql安装目录:/usr/local/mysql

1.mysql配置主从复制

主库编辑my.cnf:

[mysqld]

log-bin=NEW_NAME

server-id=1 #配一个唯一的ID编号,1至32。

#设置要进行或不要进行主从复制的数据库名,同时也要在 Slave 上设定。

binlog-do-db=数据库名1

binlog-do-db=数据库名2

binlog-ignore-db=数据库名1

binlog-ignore-db=数据库名2

mysql> grant replication slave on *.* to
slaveuser@192.168.1.101 identified by '123456' ;

mysql> flush privileges;

mysql> show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000008 | 337 | | |

+------------------+----------+--------------+------------------+

记录下二进制日志文件名和位置

从库编辑my.cnf,把server-id改成不和主机相同的数字。

如果只想同步指定的数据库,可以添加 replicate-do-db = yourdatabase,

同步几个就复制几个,把数据库名改了就好。

[mysqld]

server-id=2 #唯一

#设置要进行或不要进行主从复制的数据库名,同时也要在 Master 上设定。

replicate-do-db=数据库名1

replicate-do-db=数据库名2

replicate-ignore-db=数据库名1

replicate-ignore-db=数据库名2

mysql> change master to master_host='192.168.1.100',master_user='slaveuser',master_password='123456', master_log_file='mysql-bin.000008',master_log_pos=337;

mysql> start slave;

mysql> show slave status\G;

如果出现:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

以上两项都为Yes,那说明没问题了。如果指定了个别的数据库,还可以看到

注:如果出现Slave_SQL_Running:connecting的现象,首先在从库命令行下输入:

#mysql -uslaveuser -h 192.168.1.100 -p123456

看是否能登入mysql,如果是拒绝等提示,那要查看主机上的第从库授权操作是否用户的权限等设置正确。

如果开始的环境不是主从架构,跑了一段时间已经有了数据,这时候要先在主机上加锁:flush tables with read lock;

打包主机的数据目录: #tar zcf /tmpdatabak.tgz /opt/data,拷贝这个压缩包到从机,解压后,做主从的配置。

然后解锁:unlock tables;

2. Semi-sync Repication的历史

Semi-sync最早是由Google实现的一个补丁,代码主要由Mark Callaghan,Wei Li等人贡献.

Google原本是将需求提给Hekki的,但是后来等不及就自己实现了......

(现在Mark Callaghan已跳到Facebook,除了Google,他曾经还在Informix、Oracle工作过)

在5.5之后由MySQL Replication Team按照Plugin的方式将代码移植过来,

并将Semi-sync独立成MySQL的一个插件,

主要代码移植者是Zhenxing He(参考)

3.安装,配置Semi-sync Replication

/usr/local/mysql/lib/plugin目录下有semisync_master.so,semisync_slave.so两个文件

主库安装:

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

然后会出现以下4个系统参数:

mysql> show variables like '%rpl_semi%';

+------------------------------------+-------+

| Variable_name | Value |

+------------------------------------+-------+

| rpl_semi_sync_master_enabled | OFF |

| rpl_semi_sync_master_timeout | 1000 |

| rpl_semi_sync_master_trace_level | 32 |

| rpl_semi_sync_master_wait_no_slave | ON |

+------------------------------------+-------+

编辑my.cnf主库添加如下配置:

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

重启主库

mysql> show variables like '%rpl_semi%';

+------------------------------------+-------+

| Variable_name | Value |

+------------------------------------+-------+

| rpl_semi_sync_master_enabled | ON |

| rpl_semi_sync_master_timeout | 1000 |

| rpl_semi_sync_master_trace_level | 32 |

| rpl_semi_sync_master_wait_no_slave | ON |

+------------------------------------+-------+

rpl_semi_sync_master_enabled :

启动master 支持半同步复制。

rpl_semi_sync_master_timeout :

主库等待半同步复制信息返回的超时间隔,默认10秒

rpl_semi_sync_master_trace_level :

监控等级:

1 = general level (for example, time function failures)

16 = detail level (more verbose information)

32 = net wait level (more information about network waits)

64 = function level (information about function entry and exit)

rpl_semi_sync_master_wait_no_slave :

是否允许master 每个事物提交后都要等待slave 的receipt信号。

默认为on ,每一个事务都会等待,如果slave当掉后,当slave追赶上master的日志时可以自动的切换为半同步方式,

如果为off,则slave追赶上后,也不会彩玉半同步的方式复制了,需要手工发动。

mysql> show global status like '%Rpl%';

+--------------------------------------------+-------------+

| Variable_name | Value |

+--------------------------------------------+-------------+

| Rpl_semi_sync_master_clients | 1 |

| Rpl_semi_sync_master_net_avg_wait_time | 0 |

| Rpl_semi_sync_master_net_wait_time | 0 |

| Rpl_semi_sync_master_net_waits | 0 |

| Rpl_semi_sync_master_no_times | 0 |

| Rpl_semi_sync_master_no_tx | 0 |

| Rpl_semi_sync_master_status | ON |

| Rpl_semi_sync_master_timefunc_failures | 0 |

| Rpl_semi_sync_master_tx_avg_wait_time | 0 |

| Rpl_semi_sync_master_tx_wait_time | 0 |

| Rpl_semi_sync_master_tx_waits | 0 |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |

| Rpl_semi_sync_master_wait_sessions | 0 |

| Rpl_semi_sync_master_yes_tx | 0 |

| Rpl_status | AUTH_MASTER |

+--------------------------------------------+-------------+

* Rpl_semi_sync_master_clients 0 ##表示有多少slave设置了半同步模式。

* Rpl_semi_sync_master_net_avg_wait_time 0 ##master等待slave回复的平均等待时间, 单位毫秒.

* Rpl_semi_sync_master_net_wait_time 0 ##master总的等待时间

* Rpl_semi_sync_master_net_waits 0 ##master等待slave回复的的总的等待次数

* Rpl_semi_sync_master_no_times 0 ##master关闭半同步复制的次数

* Rpl_semi_sync_master_no_tx 0 ##master 没有收到slave的回复而提交的次数,(应该可以理解为master 等待超时的次数)

* Rpl_semi_sync_master_status OFF ##表示当前是异步模式还是半同步模式。

* Rpl_semi_sync_master_timefunc_failures 0 ##The number of times the master failed when calling time functions such as gettimeofday()

* Rpl_semi_sync_master_tx_avg_wait_time 0 ## master 花在每个事务上的平均等待时间

* Rpl_semi_sync_master_tx_wait_time 0 ##master 总的等待时间

* Rpl_semi_sync_master_tx_waits 0 ##master 总的等待次数

* Rpl_semi_sync_master_wait_pos_backtraverse 0 ## 是后来的先到了,而先来的还没有到的次数

* Rpl_semi_sync_master_wait_sessions 0 ##当前有多少个session 因为slave 的回复而造成等待

* Rpl_semi_sync_master_yes_tx 0 ##master 成功接收到slave的回复的次数

从库安装:

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

然后会出现下列2个参数:

mysql> show variables like '%rpl_semi%';

+---------------------------------+-------+

| Variable_name | Value |

+---------------------------------+-------+

| rpl_semi_sync_slave_enabled | OFF |

| rpl_semi_sync_slave_trace_level | 32 |

+---------------------------------+-------+

编辑my.cnf从库添加如下配置:

rpl_semi_sync_slave_enabled=1

重启从库

mysql> show variables like '%rpl_semi%';

+---------------------------------+-------+

| Variable_name | Value |

+---------------------------------+-------+

| rpl_semi_sync_slave_enabled | ON |

| rpl_semi_sync_slave_trace_level | 32 |

+---------------------------------+-------+

rpl_semi_sync_slave_enabled :

启动slave 支持半同步复制。

rpl_semi_sync_slave_trace_level :

监控等级,同 上面的rpl_semi_sync_master_trace_leve。

mysql> show global status like '%Rpl%';

+----------------------------+-------------+

| Variable_name | Value |

+----------------------------+-------------+

| Rpl_semi_sync_slave_status | ON |

| Rpl_status | AUTH_MASTER |

+----------------------------+-------------+

Rpl_semi_sync_slave_status ON ##表示当前处于异步模式还是半同步模式

说明:

主备在启动后,且slave线程开始dump主库的日志后,Semi-sync Replication就会开启,

上面的配置(rpl_semi_sync_master_timeout=1000)表示主库在某次事务中,如果等待时间超过1000毫秒,

那么则降级为普通模式,不再等待备库。如果主库再次探测到,备库恢复了,则会自动再次回到Semi-sync状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: