搭建MyCat2一主一从的MySQL读写分离

搭建MyCat2读写分离

通过Mycat2与MySQL的主从同步复制配合就可以搭建MySQL数据库的读写分离,这里搭建MyCat2一主一从的MySQL读写分离。

搭建MySQL主从复制

搭建MySQL主从复制参考:在Windows环境与Linux环境下搭建MySQL主从同步

1.做好主从的MySQL中有mydb这个库,且已经存在表和数据

2.登录主库:mysql -h localhost -P3306 -uroot -p

mysql> CREATE DATABASE mydb;
Query OK, 1 row affected (0.00 sec)

mysql> use mydb;
Database changed
mysql> CREATE TABLE mytb(id INT,name VARCHAR(30));
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO mytb VALUES(1,'mycat');
Query OK, 1 row affected (0.01 sec)

3.登录从库:mysql -h localhost -P3307 -uroot -p

mysql> use mydb;
Database changed
mysql> select * from mytb;
+------+---------+
| id   |  name   |
+------+---------+
|    1 |  mycat	 |
+------+---------+
1 row in set (0.00 sec)

安装MyCat2

安装MyCat2参考:MyCat2的介绍与安装以及基本使用

配置逻辑库

登录Mycat:mysql -uroot -p123456 -h localhost -P 8066,创建逻辑库

mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)

执行create database mydb;后,将在/mycat/conf/schemas/自动生成mydb.schema.json文件

{
	"customTables":{},
	"globalTables":{},
	"normalProcedures":{},
	"normalTables":{},
	"schemaName":"mydb",
	"shardingTables":{},
	"views":{}
}
customTables:mycat默认的表的配置

globalTables:全局表的配置

shardingTables:分片表的配置

normalTables:普通表的配置

修改schema的配置,指定mydb逻辑库默认的targetName,mycat会自动加载mydb下已经有的物理表或者视图作为单表

{
	"customTables":{},
	"globalTables":{},
	"normalProcedures":{},
	"normalTables":{},
	"schemaName":"mydb",
	"targetName":"prototype"
	"shardingTables":{},
	"views":{}
}

查看修改之后的schema的配置,发现已经自动加载了相关信息到normalTables中

{
	"customTables":{},
	"globalTables":{},
	"normalProcedures":{},
	"normalTables":{
		"mytb":{
			"createTableSQL":"CREATE TABLE `mydb`.`mytb` (\n\t`id` int(11) DEFAULT NULL,\n\t`name` varchar(30) DEFAULT NULL\n) ENGINE = InnoDB CHARSET = utf8",
			"locality":{
				"schemaName":"mydb",
				"tableName":"mytb",
				"targetName":"prototype"
			}
		}
	},
	"schemaName":"mydb",
	"shardingTables":{},
	"views":{}
}

登录Mycat:mysql -uroot -p123456 -h localhost -P 8066,进行查询

mysql> use mydb;
Database changed
mysql> SELECT * FROM mytb;
+------+-------+
| id   | name  |
+------+-------+
|    1 | mycat |
+------+-------+
1 row in set (0.03 sec)

此时,架构如下:

应用程序
mycat
MySQL

添加数据源

登录Mycat:mysql -uroot -p123456 -h localhost -P 8066,使用注解方式添加数据源

添加主库数据源

mysql> /*+ mycat:createDataSource{ "name":"write","url":"jdbc:mysql://IP:3306/mydb?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true", "user":"mycat","password":"123456" } */;
Query OK, 0 rows affected (0.00 sec)

添加从库数据源

mysql> /*+ mycat:createDataSource{ "name":"red","url":"jdbc:mysql://IP:3307/mydb?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true", "user":"root","password":"123456" } */;
Query OK, 0 rows affected (0.00 sec)

查询配置数据源结果

mysql> /*+ mycat:showDataSources{} */;
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述
通过注释命名添加数据源后,在对应目录会生成相关配置文件,查看数据源配置文件:mycat/conf/datasources

[root@administrator mycat]# ls conf/datasources
prototypeDs.datasource.json  red.datasource.json  write.datasource.json

更新集群配置

使用mycat自带的默认集群:prototype,对其修改更新即可

/*! mycat:createCluster{"name":"prototype","masters":["write"],"replicas":["red"]} */;

查看配置集群信息

/*+ mycat:showClusters{} */;

在这里插入图片描述
查看集群配置文件,发现集群配置信息已经更新

vim /usr/local/mycat/conf/clusters/prototype.cluster.json
{
	"clusterType":"MASTER_SLAVE",
	"heartbeat":{
		"heartbeatTimeout":1000,
		"maxRetryCount":3,
		"minSwitchTimeInterval":300,
		"showLog":false,
		"slaveThreshold":0.0
	},
	"masters":[
		"write"
	],
	"maxCon":2000,
	"name":"prototype",
	"readBalanceType":"BALANCE_ALL",
	"replicas":[
		"red"
	],
	"switchType":"SWITCH"
}

readBalanceType:查询负载均衡策略

BALANCE_ALL(默认值):获取集群中所有数据源

BALANCE_ALL_READ:获取集群中允许读的数据源

BALANCE_READ_WRITE:获取集群中允许读写的数据源,但允许读的数据源优先

BALANCE_NONE:获取集群中允许写数据源,即主节点中选择

switchType:控制主从切换

NOT_SWITCH:不进行主从切换

SWITCH:进行主从切换

此时,架构如下

应用程序
mycat
主MySQL
从MySQL

验证读写分离

修改MySQL的配置文件:my.cnf,设置logbin格式binlog_format=STATEMENT,重启MySQL,确保此时主从复制正常

登录MyCat:mysql -uroot -p123456 -h IP -P 8066,向数据表插入系统变量值,以此造成主从数据不一致,便于验证读写分离。

mysql> use mydb;
Database changed
mysql> INSERT INTO mytb VALUES(2,@@hostname);

登录主库:mysql -uroot -h IP -P 3306 -p查看表数据

mysql> SELECT * FROM mytb;
+------+---------------+
| id   | name          |
+------+---------------+
|    1 | mycat         |
|    2 | administrator |
+------+---------------+
2 rows in set (0.01 sec)

登录从库:mysql -uroot -h IP -P 3307 -p查看表数据

mysql> use mydb;
Database changed
mysql> select * from mytb;
+------+--------------+
| id   | name         |
+------+--------------+
|    1 | mycat        |
|    2 | 5990c4387bd9 |
+------+--------------+
2 rows

登录MyCat:mysql -uroot -p123456 -h IP -P 8066,查询验证

mysql> SELECT * FROM mytb;
+------+---------------+
| id   | name          |
+------+---------------+
|    1 | mycat         |
|    2 | administrator |
+------+---------------+
2 rows in set (0.01 sec)

mysql> SELECT * FROM mytb;
+------+--------------+
| id   | name         |
+------+--------------+
|    1 | mycat        |
|    2 | 5990c4387bd9 |
+------+--------------+
2 rows in set (0.01 sec)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现Mycat中间件读写分离一主两从,需要按照以下步骤进行配置: 1. 在你的Mycat配置文件中,找到并编辑`server.xml`文件。你可以参考之前提到的文章《CentOS下安装和使用Mycat实现分布式数据库》中的配置方法。确保你已经正确配置Mycat的主节点和两个从节点。 2. 在`server.xml`文件中,找到`<dataHost>`标签,并按照以下格式添加两个从节点的配置信息。例如: ```xml <dataHost name="node2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <writeHost host="node1" url="192.168.0.1:3306" user="root" password="root"/> <readHost host="node2" url="192.168.0.2:3306" user="root" password="root"/> </dataHost> <dataHost name="node3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <writeHost host="node1" url="192.168.0.1:3306" user="root" password="root"/> <readHost host="node3" url="192.168.0.3:3306" user="root" password="root"/> </dataHost> ``` 这里的`node2`和`node3`是从节点的名称,`192.168.0.1`是主节点的IP地址和端口号,`192.168.0.2`和`192.168.0.3`分别是两个从节点的IP地址和端口号。请根据你的实际情况进行修改。 3. 在`server.xml`文件中,找到`<schema>`标签,添加以下配置信息来指定读写分离规则: ```xml <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100"> <table name="user" primaryKey="id" dataNode="node1,node2,node3" rule="mod-long" /> </schema> ``` 这里的`testdb`是数据库的名称,`user`是表的名称,`node1,node2,node3`是数据节点的名称,`rule="mod-long"`表示使用取模的方式进行读写分离。请根据你的实际情况进行修改。 4. 保存并关闭`server.xml`文件。 5. 重启Mycat服务。 这样,你就成功配置Mycat中间件读写分离,其中包括一个主节点和两个从节点。当有读操作时,Mycat会自动将读请求分发给从节点进行处理,实现了读写分离的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Mycat中间件实现一主一从和双主双从的读写分离](https://blog.csdn.net/qq_33200967/article/details/80948708)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Mycat搭建读写分离(一主一从、双主双从)](https://blog.csdn.net/qq_41779565/article/details/125375231)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeDevMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值