在 MySQL5.5之前, MySQL的复制是异步操作,主库和从库的数据之间存在一定的延迟,这样存在一个隐患:当在主库上写人一个事务并提交成功,而从库尚未得到主库推送的 Binlog日志时,主库宕机了,例如主库可能因磁盘损坏、内存故障等造成主库上该事务 Binlog丢失,此时从库就可能损失这个事务,从而造成主从不一致。
半同步复制与异步复制的安装区别:半同步复制需要安装创建
show variables like 'log_bin'
刚开始是关闭(off)的,在以下配置完成后,会自动打开
(1)首先,判断 MySQL服务器是否支持动态增加插件:
mysql> select @@have_dynamic_loading;
2)确认支持动态增加插件后,检查 MySQL(mysql5.6及以上均存在 )的安装目录下是否存在插件:
一:安装插件:
在主库上安装插件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%';
二:异步主从复制配置
1、确保主从库安装了相同版本的数据库。
2、在主库上,设置一个复制使用的账户,并授予 REPLICATION SLAVE权限。这里创建一个复制用户repl,可以从IP为172.17.0.2(从库IP)的主机进行连接:
命令文本:
GRANT REPLICATION SLAVE ON *.* To 'rep1'@'172.17
3、修改主数据库服务器的配置文件 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
4、SHOW MASTER STATUS; # 主数据库查看状态
5、# 寻找从库MySQL的配置文件
my.cnf find / -name my.cnf
vi /etc/my.cnf
server-id=2
6、重启从库mysql服务
mysql service mysqld restart
7、对从数据库服务器做相应设置,指定复制使用的用户,主数据库服务器的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;
8、在从库上,启动 slave同步线程
start slave;
9、# 从库查看状态
show slave status\G;
当Slave_IO_Running和Slave_SQL_Running都为YES的时候,表示主从复制配置成功了。
slave上执行 show processlist\G 命令将显示类似如下的进程:
10、在master上执行 show processlist\G命令将显示类似如下的进程:
13测试:
在主库上新建数据库和表,并插入数据,看看从库中是否会自动创建相关的数据库和表、插入数据。
CREATE TABLE student (id int,name varchar(20));