在完成了MySQL主从复制的搭建后,下边通过MyCat来实现数据库的读写分离。
进入到 mycat 安装目录 conf 目录下,打开 schema.xml 文件。
在文件中关键节点信息如下:
节点中各属性配置:
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> </schema>
在该节点中主要配置的是分片信息。
节点中各属性配置:
在之前验证主从复制功能时,创建了数据库 test,这里也配置上该数据库。
<dataNode name="dn1" dataHost="db_host" database="test" />
主要是配置的dataHost节点。
取值 | 含义 |
---|---|
0 | 所有读操作都将发送到 writeHost 服务器中 |
1 | 所有读操作都将发送到 readHost 服务器中 |
2 | 读操作将随机发送到 writeHost 或 readHost 服务器中 |
<dataHost name="db_host" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
节点中各属性配置:
使用之前配置的主从数据库,master 节点用于写,slave 节点用于读。
需要注意的是,readHost 节点被包裹在 writeHost 节点中。
<writeHost host="hostM1" url="192.168.137.3:3366" user="root" password="123456"><readHost host="hostM2" url="192.168.137.3:3377" user="root" password="123456"/>
</writeHost>
修改后完全的配置信息如下:
修改完配置信息后,通过指令重启mycat服务。
mycat restart
可以通过查看 logs 目录下 mycat.log 日志,观察服务启动是否正常。
通过日志可以发现,两个数据库都已成功连接。
可能会出现的问题:
新版本mycat的lib库下,只有mysql8版本的驱动类,如果我们的mysql服务器是使用的5.7版本,需要在网上找到5.7的驱动类上传到服务上,并替换原来的mysql8驱动类。
mysql -uroot -p123456 -h 192.168.137.3 -P8066
查看并切换到 TESTDB 数据库下
查询之前创建的 student 表及表中的记录
其中 @@hostname 代表主机名,即执行这条语句的数据库所在服务器的主机名,用来验证该条 SQL 语句,被哪个数据库服务器执行。
insert into student values(2, @@hostname);
因 @@hostname 主机名长度超过了原先数据表的设置,因此会报错。
需要先修改数据表该字段的长度
alter table student modify column name varchar(30);
修改完成后,重新执行插入语句
数据插入成功后,执行查询
再来观察数据库两个节点的服务器名称。
因容器中服务器的名称,与容器ID相同,通过 docker ps 可以看到它们的对应关系。
经过分析,可以发现,在mycat执行的 insert 语句时,被插入的服务器名称,就是用作写操作的 master 节点的容器ID,因此,可以证明:执行该语句的正是 master 节点。
一个简单的读写分离,即配置完成。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。