• 半同步复制特点是维持数据完整性
  • 环境
  • 主从同步原理图
  • 主从同步
    • 主服务器配置
    • 从服务器配置
  • MySQL Semisynchronous Replication 半同步复制
    • 主服务器配置
    • 从服务器配置

  • 主从切换

环境

服务器 IP 端口 版本
主数据库 192.168.1.100 3306 5.5.38
从数据库 192.168.1.101 3306 5.5.38

主从同步原理图


主从同步

主服务器配置

修改配置my.cnf

# vi /etc/my.cnf

server-id=1

log-bin=mysql-bin

注:需要把默认的server-id=1去掉

 

创建复制用户

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

 

重启MySQL服务

# /etc/init.d/mysql restart 

#mysql>flush tables with read lock;

#mysql>show master status;

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

| File                             | Position   | Binlog_Do_DB   | Binlog_Ignore_DB   |

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

| mysql-bin.000001      | 122         | db1                    |                                 |

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

 

备份数据库 db1

#mysqldump --default-character-set=utf8 --opt db1 > db1.sql

#mysql>unlock tables;

从服务器配置

修改配置my.cnf

# vi /etc/my.cnf

server-id=2

log-bin=mysql-bin

replicate_wild_do_table=db1.%

配置同步

#mysql>change master to

master_host=’192.1681.100’,

master_user=’repl’,

master_password='repl',

master_log_file='mysql-bin.000001',

master_log_pos=122,

master_port=3306;

 

重启MySQL服务

# /etc/init.d/mysql restart

 

启动slave 线程

Mysql>start slave;

 

检查slave是否同步

Mysql>show slave status\G

Slave_IO_Running: Yes 
Slave_SQL_Running: Yes

如以上2项同时为yes说明配置成功

 

主从同步验证

先在主服务器db1数据库里创建一张test测试表,create table test(id int(10));

在从服务器查看db1数据库里是否有test表。如有则主从同步成功。

 

MySQL Semisynchronous Replication 半同步复制

主服务器配置

安装半同步插件

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

 

检查是否正确安装

mysql>show plugins; 

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

 

my.cnf添加如下配置

[mysqld]

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000 # 1 second 超时间间,默认是10秒

 

重启MySQL服务

# /etc/init.d/mysql restart

 

从服务器配置

安装半同步插件

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

检查是否正确安装

mysql>show plugins;

 

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

注:如果在一个正在运行的Slave上开启半同步复制的功能,必须先停止Slave I/O,将其启用半同步后,再开启Slave I/O.

 

mysql>STOP SLAVE IO_THREAD;

mysql>START SLAVE IO_THREAD;

 

my.cnf添加如下配置

[mysqld]

rpl_semi_sync_slave_enabled=1

 

重启MySQL服务

# /etc/init.d/mysql restart

 

半同步复制验证

在主服务器上创建test表

mysql>CREATE TABLE `test` (`id` int(10) NOT NULL AUTO_INCREMENT ,PRIMARY KEY (`id`));

mysql>show status like 'Rpl_semi_sync_master_yes_tx';

注:如果Value不为0表示复制正在使用半同步模式

 

主从切换

当主服务器出现故障时,可将从服务器当主服务器来使用.步骤如下:

1、保证所有从数据库都已经执行了relay log中的全部更新,在从服务器中执行

stop slave io_thread,用show processlist检查,查看状态是否是Has read all relay log,表示更新完成.

从服务器

mysql>stop slave io_thread;

Query OK,0 affected (0.00 sec)

mysql>show processlist\G;

*************************** 2. row ***************************

     Id: 2

   User: system user

   Host:

     db: NULL

Command: Connect

   Time: 4757

  State: Has read all relay log; waiting for the slave I/O thread to update it

   Info: NULL

 

2、执行stop slave,reset slave,reset master命令,重置成主数据库

mysql>stop slave;

Query OK,0 affected (0.00 sec)

mysql>reset slave;

Query OK,0 affected (0.00 sec)

mysql>reset master;

Query OK,0 affected (0.00 sec)

备注:reset slave all 命令会删除从库的 replication 参数,之后 show slave status\G 的信息返回为空

mysql>reset slave all; 在5.6.3版本之后

mysql>reset slave; 在5.6.3版本之前