Skip to content


mysql读写分离(需先完成主从复制)

启动顺序:41,42,43

架构说明:

ip 角色 安装配置
192.168.242.43 mycat管理端 mycat,jdk1.8.0_161
192.168.242.41 mysql主(写) mysql
192.168.242.42 mysql从(读) mysql

安装jdk

# 解压下载好的jdk
tar -zxf /home/hadoop/jdk-8u161-linux-x64.tar.gz -C /usr/local/java/

# 配置java环境变量
vi /etc/profile

export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}

# 使配置生效
source /etc/profile

image-20241105142829771

mycat安装

# 解压mycat安装包
tar -zxf /home/hadoop/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local/

配置mycat的server.xml

vi /usr/local/mycat/conf/server.xml


        <user name="root" defaultAccount="true">
                <!-- password是mycat登录密码 -->
                <property name="password">root</property>
                <!--schemas是 mycat 逻辑数据库名,自己定义不一定和真实数据库同名(实际测试不一样连接不上),和schema.xml的逻辑数据库同名即可-->
                <property name="schemas是">mycat_sql</property>

                <!-- 表级 DML 权限设置 -->
                <!--
                <privileges check="false">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>
                 -->
        </user>
<!-- 这里需要注释
        <user name="user">
                <property name="password">user</property>
                <property name="schemas">TESTDB</property>
                <property name="readOnly">true</property>
        </user>
-->

image-20241105154422597

配置schema.xml

vi /usr/local/mycat/conf/schema.xml
### !!!!注意!!!! <schema name="mycat_sql" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" />这里最好与真是数据库名称一样,否则连接不上

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="mycat_sql" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" />
    <dataNode name="dn1" dataHost="auth" database="zxnbmk" />
    <dataHost name="auth" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM" url="192.168.242.41:3306" user="mycat_wr" password="123">
            <readHost host="hostS" url="192.168.242.42:3306" user="mycat_re" password="123" />
        </writeHost>
    </dataHost>
</mycat:schema>

image-20241105151348009

只读数据库(从)添加用户

# 添加仅具有读权限的mwycat_sql用户
create user 'mycat_re'@'%' identified with mysql_native_password by '123';
GRANT select ON *.* TO 'mycat_re';
flush privileges;

image-20241105152830608

读写数据库(主)添加用户

# 添加仅具有读写权限的mycat_sql用户
CREATE USER 'mycat_wr'@'%' IDENTIFIED WITH mysql_native_password BY '123';
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'mycat_wr'@'%';
FLUSH PRIVILEGES;

image-20241105153053582

数据库连接(密码在server.xml配置的)

image-20241105154840553

image-20241105154925136

image-20241105165300707

image-20241105165323272

Comments