最近在项目中遇到一个问题:数据库的读写压力越来越大,主库快要“撑不住”了。为了解决这个问题,我决定尝试使用 MyCat 来实现数据库的读写分离。经过一番折腾,终于成功配置好了!为了帮助更多像我一样的朋友,这里整理了一份详细的 MyCat 读写分离配置文档,带你从头到尾搞定它!
本文适用于以下场景:
192.168.14.111
192.168.14.112
让我们开始吧!
MyCat 需要 Java 环境支持,推荐使用 JDK 1.8。以下是安装步骤:
安装 JDK:
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
验证 JDK 安装:
java -version
如果输出如下内容,说明安装成功:
java version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
配置环境变量(可选):
echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk" >> /etc/profile
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profile
source /etc/profile
下载 MyCat: 前往 MyCat官网 或 GitHub 下载最新版本。或者直接通过命令下载(以 1.6 为例):
我这里有两个包连接 你自己选择一个 记得后边自己更改名称 (防止连接失效)
wget http://download.mycat.io/releases/1.6.7.4/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
wget http://dl.mycat.io/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
解压安装:
tar -zxvf Mycat-server-1.6.7.4-release-20221017150010-linux.tar.gz -C /usr/local/
mv /usr/local/mycat-server-1.6.7.4 /usr/local/mycat
配置环境变量:
echo "export MYCAT_HOME=/usr/local/mycat" >> /etc/profile
echo "export PATH=\$MYCAT_HOME/bin:\$PATH" >> /etc/profile
source /etc/profile
验证 MyCat 安装:
mycat --version
如果输出类似如下内容,说明安装成功:
Mycat-server version 1.6.7.4
MyCat 的核心配置文件是 server.xml
和 schema.xml
,分别用于服务端配置和数据库路由配置。
server.xml
编辑 server.xml
文件:
vim /usr/local/mycat/conf/server.xml
修改以下内容: 设置 MyCat 的用户名和密码(客户端连接时需要用到):
<user name="mycat" defaultAccount="true">
<property name="password">Abc-1234</property>
<property name="schemas">hello</property>
<property name="defaultSchema">hello</property>
name="mycat"
:MyCat 用户名。password="mypassword"
:MyCat 密码。schemas="hello"
:指定要管理的逻辑数据库。schema.xml
编辑 schema.xml
文件:
vim /usr/local/mycat/conf/schema.xml
配置逻辑数据库和分片规则:
定义逻辑数据库 hello
并配置主从分离:
<schema name="hello" checkSQLschema="false" sqlMaxLimit="100">
<table name="*" dataNode="dn_hello" />
</schema>
定义数据节点 dn_hello
并指定主从数据库:
<dataNode name="dn_hello" dataHost="localhost" database="hello" />
配置数据主机(主从服务器):
<dataHost name="localhost" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select 1</heartbeat>
<writeHost host="hostM" url="192.168.14.111:3306" user="root" password="rootpassword">
<readHost host="hostS" url="192.168.14.112:3306" user="root" password="rootpassword" />
</writeHost>
</dataHost>
主要就是针对我的红色框中的参数填写 多余的dateNode可以删掉
参数说明:
writeHost
:定义主服务器(192.168.14.111
)。readHost
:定义从服务器(192.168.14.112
)。user
和 password
:主从服务器的数据库用户名和密码。启动 MyCat:
mycat start
查看 MyCat 是否启动成功:
netstat -anpt | grep 8066
如果看到类似如下内容,说明 MyCat 成功启动:
tcp6 0 0 :::8066 :::* LISTEN 12345/java
安装 MySQL 客户端:
yum install -y mysql
使用 MyCat 的 IP 和端口连接:
mysql -u mycat -p -h 192.168.14.111 -P 8066
输入 mypassword
登录成功。
写操作(写入主服务器): 在 MyCat 中执行以下命令:
USE hello;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_table VALUES (1, 'write_test');
连接到主服务器(192.168.14.111
):
mysql -u root -p -h 192.168.14.111
执行:
USE hello;
SELECT * FROM test_table;
可以看到写入的记录。
连接到从服务器(192.168.14.112
):
mysql -u root -p -h 192.168.14.112
执行:
USE hello;
SELECT * FROM test_table;
如果主从复制正常,也可以看到写入的记录。
读操作(从从服务器读取): 在 MyCat 中多次执行以下命令:
SELECT * FROM test_table;
每次查询结果可能会从不同的从服务器返回,通过观察查询延迟或日志可以验证读操作被分配到从服务器。
Slave_IO_Running
和 Slave_SQL_Running
均为 Yes)。tail -f /usr/local/mycat/logs/mycat.log
schema.xml
中的 balance
参数调整负载均衡策略:0
:轮询。1
:基于权重。配置 MyCat 实现读写分离并不是一件难事,但需要对 MySQL 主从复制和 MyCat 的配置文件有一定的了解。通过本文的详细步骤,你应该可以轻松完成配置并实现读写分离。
在实际使用中,MyCat 不仅能帮助你分担数据库的读写压力,还能提升系统的性能和可用性。如果你遇到任何问题,别忘了查看日志或联系我一起讨论!
希望这篇文章对你有所帮助,祝你配置顺利!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。