在 MySQL5.5以前, MySQL的复制是异步操做,主库和从库的数据之间存在必定的延迟,这样存在一个隐患:当在主库上写人一个事务并提交成功,而从库还没有获得主库推送的 Binlog日志时,主库宕机了,例如主库可能因磁盘损坏、内存故障等形成主库上该事务 Binlog丢失,此时从库就可能损失这个事务,从而形成主从不一致。html
半同步复制与异步复制的安装区别:半同步复制须要安装建立mysql
show variables like 'log_bin'sql
刚开始是关闭(off)的,在如下配置完成后,会自动打开数据库
(1)首先,判断 MySQL服务器是否支持动态增长插件:服务器
mysql> select @@have_dynamic_loading;异步
2)确认支持动态增长插件后,检查 MySQL(mysql5.6及以上均存在 )的安装目录下是否存在插件:测试
一:安装插件:spa
在主库上安装插件semisync_master.so:插件
mysql> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';线程
从库上则安装 semisync_slave.so插件:
mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
安装完成后,从 plugin表中可以看到刚才安装的插件
mysql> select * from mysql.plugin;
3)须要分别在主库和从库上配置参数打开半同步semi-sync,默认半同步设置是不打开的,主库上配置全局参数:
mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_master_timeout=30000;
show variables like '%rpl_semi_sync_master%';
从库上同样配置全局参数:
mysql> set global rpl_semi_sync_slave_enabled=1;
show variables like '%rpl_semi_sync_slave_enabled%';
二:异步主从复制配置
一、确保主从库安装了相同版本的数据库。
二、在主库上,设置一个复制使用的帐户,并授予 REPLICATION SLAVE权限。这里建立一个复制用户repl,能够从IP为172.17.0.2(从库IP)的主机进行链接:
命令文本:
GRANT REPLICATION SLAVE ON *.* To 'rep1'@'172.17
三、修改主数据库服务器的配置文件 my.cnf,开启 BINLOG,并设置 server-id的值。这两个参数的修改须要从新启动数据库服务才能够生效
# 寻找MySQL的配置文件 my.cnf find / -name my.cnf
vi /etc/my.cnf
server-id = 1 #惟一,不能和主数据库的配置相同,若是有多个从数据库服务器,每一个从数据库服务器必须有本身惟一的 server-id值
log-bin = mysql-bin #开启BINLOG 二进制日志
# 主数据库从新启动
mysql service mysqld restart
四、SHOW MASTER STATUS; # 主数据库查看状态
五、# 寻找从库MySQL的配置文件
my.cnf find / -name my.cnf
vi /etc/my.cnf
server-id=2
六、重启从库mysql服务
mysql service mysqld restart
七、对从数据库服务器作相应设置,指定复制使用的用户,主数据库服务器的IP、端口
以及开始执行复制的日志文件和位置等,参考代码以下:
mysql> CHANGE MASTER TO
->MASTER_HOST=master host name
->MASTER_USER=replication_user_name
-> MASTER PASSWORD=replication_password
->MASTER_LOG_FILE='recorded_log_file_name
->MASTER_LOG_POS=recorded _log_position
举例说明以下:
CHANGE MASTER TO MASTER_HOST='172.17.0.3',MASTER_PORT=3306,MASTER_USER='rep1',MASTER_PASSWORD='1234test' ,MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=527;
八、在从库上,启动 slave同步线程
start slave;
九、# 从库查看状态
show slave status\G;
当Slave_IO_Running和Slave_SQL_Running都为YES的时候,表示主从复制配置成功了。
slave上执行 show processlist\G 命令将显示相似以下的进程:
十、在master上执行 show processlist\G命令将显示相似以下的进程:
13测试:
在主库上新建数据库和表,并插入数据,看看从库中是否会自动建立相关的数据库和表、插入数据。
CREATE TABLE student (id int,name varchar(20));