我们通过 Mycat 和 MySQL 的主从复制配合搭建数据库的读写分离,实现 MySQL 的 高可用性。我们将搭建:一主一从、双主双从两种读写分离模式。
1搭建 MySQL 数据库主从复制
-
原理
- 主机配置(atguigu01)
修改mysql的配置文件etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql binlog-ignore-db=information_schema
#设置需要复制的数据库 binlog-do-db=需要复制的主数据库名字
#设置logbin格式 binlog_format=STATEMENT
- 从机配置
还是同样的修改my.cnf文件:
修改配置文件:vim /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
- 主机、从机重启 MySQL 服务
- 主机从机都关闭防火墙
- 在主机上建立帐户并授权 slave
#在主机MySQL里执行授权命令
CREATE USER 'slave2'@'%' IDENTIFIED BY '123123';
GRANT REPLICATION SLAVE ON *.* TO 'slave2'@'%'; #此语句必须执行。否则见下面。
ALTER USER 'slave2'@'%' IDENTIFIED WITH mysql_native_password BY '123123';
flush privileges; #查询master的状态 show master status;
#记录下File和Position的值 #执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化
- 在从机上配置需要复制的主机
复制主机的命令
CHANGE MASTER TO MASTER_HOST='主机的IP地址', MASTER_USER='slave', MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;
下面两个参数都是Yes,则说明主从配置成功! # Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主机新建库、新建表、insert 记录,从机复制
这个主要是测试一下,在主机上做一些数据库的修改,从机会不会更新如何停止从服务复制功能
stop slave;如何重新配置主从
stop slave;
reset master;
2 配置 Macat 读写分离
1.2.1 登录Mycat,创建逻辑库,配置数据源
在Mycat里创建数据库mydb1 #创建db2逻辑库
create database mydb1;
修改mydb1.schema.json 指定数据源 "targetName": "prototype",配置主机数据源 vim /usr/local/mycat/conf/schemas/mydb1.schema.json
在我第一个帖子里面又讲,就跟登录mysql一样的登录mycat不过端口号是8066,当然也可以使用工具 ,比如 navicat来登录mycat。
1.2.2 使用注解方式添加数据源
这里我们可以在登录之后(命令行登录或者navicat等工具连接好),运行下面的一些命令:
登录Mycat,注解方式添加数据源,指向从机
/*+ mycat:createDataSource{ "name":"rwSepw", "url":"jdbc:mysql://192.168.140.100:3306/mydb1?useSSL=false&characterEncodi ng=UTF-8&useJDBCCompliantTimezoneShift=true", "user":"root", "password":"123123" } */;
/*+ mycat:createDataSource{ "name":"rwSepr", "url":"jdbc:mysql://192.168.140.99:3306/mydb1?useSSL=false&characterEncodin g=UTF-8&useJDBCCompliantTimezoneShift=true", "user":"root", "password":"123123" } */;
查询配置数据源结果
/*+ mycat:showDataSources{} */;
更新集群信息,添加dr0从节点.实现读写分离
/*! mycat:createCluster{"name":"prototype","masters":["rwSepw"],"replicas":["rw Sepr"]} */;
查看配置集群信息
/*+ mycat:showClusters{} */;
查看集群配置文件 conf/clusters/prototype.cluster.json
readBalanceType
查询负载均衡策略 可选值: BALANCE_ALL(默认值)
获取集群中所有数据源
BALANCE_ALL_READ
获取集群中允许读的数据源
BALANCE_READ_WRITE 获取集群中允许读写的数据源,但允许读的数据源优先 BALANCE_NONE
获取集群中允许写数据源,即主节点中选择
switchType NOT_SWITCH:不进行主从切换 SWITCH:进行主从切换
3 重新启动 Mycat
1.2.4验证读写分离
这里注意一点,我们在配置集群文件的时候readBalanceType配置的是all,也就是说读的时候是轮训的遍历所有的数据源来读取,写入的话在文中没有特意的配置,我们可以按需在配置的数据源文件中配置: instanceType:配置实例只读还是读写
可选值: READ_WRITE,READ,WRITE
-
在写主机数据库表mytbl中插入带系统变量数据,造成主从数据不一致 INSERT INTO mytbl VALUES(2,@@hostname);
- 在Mycat里查询mytbl表,可以看到查询语句在主从两个主机间切换