主库:ip: 172.18.42.192
从库:ip: 172.18.42.193
首先,两台服务器上都装好mysql,我这里用的是mysql5.6版本。5.7版本类似
第一步,设置主从复制。
(1)在 主库上设置:
$ vi /etc/my.cnf (设置一些配置)
-------------------------------------------
[mysqld]
server-id = 1
log-bin =
/usr/local/mysql/data/mysql-bin
(指定位置,自定义,这里我放在了mysql的data目录下)
innodb_flush_log_at_trx_commit=1 (暂时还不明所以)
sync_binlog=1 (暂时还不明所以)
---------------------------------------------
保存退出,重启服务:
$ systemctl restart mysqld
登陆进主库 的mysql:
$ mysql -u root -p
mysql > show variables like 'server-id'; (查看变量 ,server-id是否更改且生效)
创建一个用户用于从库复制:
mysql > grant replication slave on *.* to 'slave01'@'%' identified by '123456' (slave01为你自定义的 用户名,123456为你自定义的密码)
mysql > fiush privileges; (生效用户和权限)
mysql > select user,host from mysql.user; (可查看mysql的用户和host)
mysql > show master status; (查看主机状态,记下一些参数,后面要用到)
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 970 | | | |
+------------------+----------+--------------+------------------+---------------
(记下file:mysql-bin.000001,position:970)
(2)在 从库上设置:
$ vi /etc/my.cnf (修改从库配置)
------------------------------------------------------
server-id = 2
relay-log = /usr/local/mysql/data/relay-bin (从主库传过来的bin-log被存到从库的relay- log内,自定义位置)
relay-log-info-file = /usr/local/mysql/data/relay-log.info (日志文件位置,自定义)
重启mysql服务:
$ systemctl restart mysqld
登陆从库,配置信息
$ mysql -u root -p (进入mysql)
mysql > CHANGE MASTER TO
> MASTER_HOST = '172.18.42.192', (主库的host地址)
> MASTER_PORT = 3306, (主库的端口)
> MASTER_USER = 'slave01', (刚才创建的用户)
> MASTER_PASSWORD = '123456', (刚才创建的用户的密码
> MASTER_LOG_FILE = 'mysql-bin.000001', (上面在主库上查询到的file)
> MASTER_LOG_POS = 970; (上面在主库上查询到的position)
mysql > start slave; (开启主从复制同步)
好了,到此,就配置完了,然后测试一下,在主库上新建数据库,表,插入数据,在从库上也会有相应同步。
接下来进行半同步的设置:
半同步的设置需要有三个条件:
1. mysql版本在5.5 及以上
2.变量have_dynamic_loading为yes (可以通过show variables like 'have%'来查看)
3.异步复制已经存在 (上一步正是开启复制)
首先(1) 在主库上设置:
$ mysql -u root -p
mysql > INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; (安装主库插件)
mysql > show plugins; (查看是否安装成功)
-----------------------------------------
rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL
-----------------------------------------
有上面的内容,则证明安装OK了
mysql > SET GLOBAL rpl_semi_sync_master_enabled = 1 (开启主库半同步)
然后 (2) 从库上设置:
$ mysql -u root -p
mysql > mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; (安装从库插件)
mysql > SET GLOBAL rpl_semi_sync_slave_enabled = 1; (开启从库半同步)
mysql > stop slave io_thread; (关闭slave线程)
mysql > start slave io_thread; (开启slave现线程,也就是重启一下slave线程)
好了,这样就已经开启了半同步复制了。
mysql > show variables like 'Rpl%'; (查看把半同步的环境变量)
mysql > show status like 'Rpl%' (查看状态)
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.20 sec)
状态为 ON则为开启状态中。
ok,到此为止,不出错的话,则配置完成。
另外,开启半同步的设置,也可以写在配置文件 my.cnf 里:
主库:
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
从库:
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
OK,到此mysql主从配置完成