前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MyCat 读写分离配置详解:从零到实现(0-1)

MyCat 读写分离配置详解:从零到实现(0-1)

原创
作者头像
神秘泣男子
发布2025-01-10 16:07:14
发布2025-01-10 16:07:14
11600
代码可运行
举报
运行总次数:0
代码可运行

前言

最近在项目中遇到一个问题:数据库的读写压力越来越大,主库快要“撑不住”了。为了解决这个问题,我决定尝试使用 MyCat 来实现数据库的读写分离。经过一番折腾,终于成功配置好了!为了帮助更多像我一样的朋友,这里整理了一份详细的 MyCat 读写分离配置文档,带你从头到尾搞定它!

本文适用于以下场景:

  • 主服务器 IP:192.168.14.111
  • 从服务器 IP:192.168.14.112

让我们开始吧!


1. 准备工作

1.1 安装 JDK 环境

MyCat 需要 Java 环境支持,推荐使用 JDK 1.8。以下是安装步骤:

安装 JDK:

代码语言:javascript
代码运行次数:0
复制
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

验证 JDK 安装:

代码语言:javascript
代码运行次数:0
复制
java -version

如果输出如下内容,说明安装成功:

代码语言:javascript
代码运行次数:0
复制
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)

配置环境变量(可选):

代码语言:javascript
代码运行次数:0
复制
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

1.2 下载并安装 MyCat

下载 MyCat: 前往 MyCat官网 或 GitHub 下载最新版本。或者直接通过命令下载(以 1.6 为例):

我这里有两个包连接 你自己选择一个 记得后边自己更改名称 (防止连接失效)

代码语言:javascript
代码运行次数:0
复制
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

解压安装:

代码语言:javascript
代码运行次数:0
复制
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

配置环境变量:

代码语言:javascript
代码运行次数:0
复制
echo "export MYCAT_HOME=/usr/local/mycat" >> /etc/profile
echo "export PATH=\$MYCAT_HOME/bin:\$PATH" >> /etc/profile
source /etc/profile

验证 MyCat 安装:

代码语言:javascript
代码运行次数:0
复制
mycat --version

如果输出类似如下内容,说明安装成功:

代码语言:javascript
代码运行次数:0
复制
Mycat-server version 1.6.7.4


2. 配置 MyCat 实现读写分离

MyCat 的核心配置文件是 server.xmlschema.xml,分别用于服务端配置和数据库路由配置。

2.1 配置 server.xml

编辑 server.xml 文件:

代码语言:javascript
代码运行次数:0
复制
vim /usr/local/mycat/conf/server.xml

修改以下内容: 设置 MyCat 的用户名和密码(客户端连接时需要用到):

代码语言:javascript
代码运行次数:0
复制
    <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":指定要管理的逻辑数据库。

2.2 配置 schema.xml

编辑 schema.xml 文件:

代码语言:javascript
代码运行次数:0
复制
vim /usr/local/mycat/conf/schema.xml

配置逻辑数据库和分片规则: 定义逻辑数据库 hello 并配置主从分离:

代码语言:javascript
代码运行次数:0
复制
<schema name="hello" checkSQLschema="false" sqlMaxLimit="100">
    <table name="*" dataNode="dn_hello" />
</schema>

定义数据节点 dn_hello 并指定主从数据库:

代码语言:javascript
代码运行次数:0
复制
<dataNode name="dn_hello" dataHost="localhost" database="hello" />

配置数据主机(主从服务器):

代码语言:javascript
代码运行次数:0
复制
<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)。
  • userpassword:主从服务器的数据库用户名和密码。

3. 启动 MyCat

启动 MyCat:

代码语言:javascript
代码运行次数:0
复制
mycat start

查看 MyCat 是否启动成功:

代码语言:javascript
代码运行次数:0
复制
netstat -anpt | grep 8066

如果看到类似如下内容,说明 MyCat 成功启动:

代码语言:javascript
代码运行次数:0
复制
tcp6 0 0 :::8066 :::* LISTEN 12345/java

4. 测试 MyCat 读写分离

4.1 使用 MyCat 连接数据库

安装 MySQL 客户端:

代码语言:javascript
代码运行次数:0
复制
yum install -y mysql

使用 MyCat 的 IP 和端口连接:

代码语言:javascript
代码运行次数:0
复制
mysql -u mycat -p -h 192.168.14.111 -P 8066

输入 mypassword 登录成功。

4.2 验证读写分离

写操作(写入主服务器): 在 MyCat 中执行以下命令:

代码语言:javascript
代码运行次数:0
复制
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):

代码语言:javascript
代码运行次数:0
复制
mysql -u root -p -h 192.168.14.111

执行:

代码语言:javascript
代码运行次数:0
复制
USE hello;
SELECT * FROM test_table;

可以看到写入的记录。

连接到从服务器(192.168.14.112):

代码语言:javascript
代码运行次数:0
复制
mysql -u root -p -h 192.168.14.112

执行:

代码语言:javascript
代码运行次数:0
复制
USE hello;
SELECT * FROM test_table;

如果主从复制正常,也可以看到写入的记录。

读操作(从从服务器读取): 在 MyCat 中多次执行以下命令:

代码语言:javascript
代码运行次数:0
复制
SELECT * FROM test_table;

每次查询结果可能会从不同的从服务器返回,通过观察查询延迟或日志可以验证读操作被分配到从服务器。


5. 注意事项

  • 主从复制状态: 确保主从复制正常运行(Slave_IO_RunningSlave_SQL_Running 均为 Yes)。
  • MyCat 日志: 查看 MyCat 日志以排查问题:
代码语言:javascript
代码运行次数:0
复制
tail -f /usr/local/mycat/logs/mycat.log
  • 负载均衡策略: 可以通过修改 schema.xml 中的 balance 参数调整负载均衡策略:
    • 0:轮询。
    • 1:基于权重。

总结

配置 MyCat 实现读写分离并不是一件难事,但需要对 MySQL 主从复制和 MyCat 的配置文件有一定的了解。通过本文的详细步骤,你应该可以轻松完成配置并实现读写分离。

在实际使用中,MyCat 不仅能帮助你分担数据库的读写压力,还能提升系统的性能和可用性。如果你遇到任何问题,别忘了查看日志或联系我一起讨论!

希望这篇文章对你有所帮助,祝你配置顺利!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1. 准备工作
    • 1.1 安装 JDK 环境
    • 1.2 下载并安装 MyCat
  • 2. 配置 MyCat 实现读写分离
    • 2.1 配置 server.xml
    • 2.2 配置 schema.xml
  • 3. 启动 MyCat
  • 4. 测试 MyCat 读写分离
    • 4.1 使用 MyCat 连接数据库
    • 4.2 验证读写分离
  • 5. 注意事项
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档