准备材料:
一: windows环境下的navicat,vmware;
二:两台虚拟主机a和b。
a:centos7;mysql5.7[用作主数据库]; ip:192.168.149.132;
b:centos7;mysql5.7[用作从数据库] ; ip:192.168.149.133 ;
主从配置步骤:
1:在两台mysql里各新建一个名为test的数据库。
2 : 在主数据库里创建一个同步账号。
1)每个从数据库会使用一个MySQL账号来连接主数据库,所以我们要在主数据库里创建一个账号,并且该账号要授予 REPLICATION SLAVE 权限,你可以为每个从数据库分别创建账号,不过为了方便我们可以同一个)
2)你可以用原来的账号不一定要新创账号,但因为这个账号和密码会被明文存放在master.info文件中,因此建议单独创一个只拥有相关权限的账号,以减少对其它账号的危害!)
3)创建新账号使用“CREATE USER”,给账号授权使用“GRANT”命令,如果你仅仅为了主从复制创建账号,只需要授予REPLICATION SLAVE权限。
4)下面来创建一个账号,账号名:user001,密码:Mypassword1![注意:这里采用的是默认的密码规则,所以必须要有大小写数字以及特殊符号],只允许192.168.149.*的IP段登录,如下: mysql> CREATE USER 'user001'@'192.168.149.%' IDENTIFIED BY 'Mypassword1!'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'user001'@'192.168.149.%';
5) 开通防火墙3306端口(centos7默认防火墙为firewall不是iptables),如下:firewall-cmd --zone=public --add-port=3306/tcp --permanent;firewall-cmd --reload
配置主数据库:
1:根目录下cd etc
>> vi my.cnf
打开mysql配置文件;
2:在 【mysqld】节点下添加如下配置:log-bin=mysql-bin
server-id=132
3:可以通过是否打开如下的配置来实现对数据库的选择:#binlog-do-db=test //要同步的test数据库。如要同步多个数据库,就多加几个replicate-db-db=数据库名 ;#binlog-ignore-db=mysql //要忽略的数据库
4:登陆mysql,并查看主数据库状态:show master status;
【记录好file值和position值,配置从数据库时要用到】
提示1:如果你不配置server-id或者配置值为0,那么主服务器将拒绝所有从服务器的连接。
提示2:在使用InnoDB的事务复制,为了尽可能持久和数据一致你应该在my.cnf里配置
sync_binlog=1
;innodb_flush_log_at_trx_commit=1
提示3:要配置主数据库,你必须要启用二进制日志(binary logging),并且创建一个唯一的Server ID,这步骤可能要重启MySQL。主服务器发送变更记录到从服务器依赖的是二进制日志,如果没启用二进制日志【也即第2步的首个配置项】,复制操作不能实现(主库复制到从库
提示3:复制组中的每台服务器都要配置唯一的Server ID,在这里我选择使用ip的最后一组数字来做区分。
配置从数据库:
1:根目录下cd etc
>> vi my.cnf
打开mysql配置文件;
2:在 【mysqld】节点下添加如下配置: server-id=133
3:登入mysql,依次敲入命令stop slave
>> CHANGE MASTER TO MASTER_HOST='192.168.149.132', MASTER_USER='user001', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=2680;
>> start slave;
4:此时,主从配置已经完成。你可以自行在主数据库test里进行curd,然后在从数据库里查看相应变化。
提示1:replicate-do-db = test
//若在master端不指定binlog-do-db,在slave端可在my.cnf里用replication-do-db来选择实现读写分离的数据库。replicate-ignore-db = mysql #忽略的库
读写分离
主从复制是读写分离的基础。而现在的php框架一般都整合了读写分离的配置,参考其文档进行配置即可。