zoukankan      html  css  js  c++  java
  • Mysql 读写分离

    配置Java环境

     tar xf jdk-8u161-linux-x64.tar.gz -C /usr/local/
    mv /usr/local/{jdk1.8.0_161,jdk}
    [root@master ~]# vim /etc/profile.d/jdk.sh
    
    export JAVA_HOME=/usr/local/jdk
    
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    
    export PATH=$JAVA_HOME/bin:$PATH
    [root@master ~]# exec bash
    [root@master ~]# java -version
    java version "1.8.0_161"
    Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
    

      下载mycat地址:https://github.com/MyCATApache/Mycat-download/blob/master/1.5-RELEASE/Mycat-server-1.5.1-RELEASE-20161130213509-linux.tar.gz

    [root@master ~]# tar xf Mycat-server-1.5.1-RELEASE-20161130213509-linux.tar.gz 
    [root@master ~]# mv mycat /usr/local/
    

      配置环境变量

    [root@master ~]# cat /etc/profile.d/mycat.sh 
    MYCAT_HOME=/usr/local/mycat 
    PATH=$MYCAT_HOME/bin:$PATH
    [root@master ~]# exec bash
    

     配置mycat(mycat的用户账号和授权信息是在conf/server.xml文件中配置

    <!--配置文件里面的账号密码是给前端的,告诉前端能用那些账号连接数据库。也就是图上的mysql-cilent。-->
    <!--此处需要注意的是:是在34行到43行修改文件。(千万不要全部删除替换)-->
    </system>
    <user name="root">	<!--这个账号就是用来给前端登录mycat的账号的。定义一下->
            <property name="password">123456</property>
            <property name="schemas">test</property> <!--定义操作的那个数据库->
    </user>
         
    <user name="user">
            <property name="password">user</property>
            <property name="schemas">test</property>
            <property name="readOnly">true</property> <!--只读->
    </user>
    

      

    编辑MyCAT的配置文件schema.xml,关于dataHost的配置信息如下:

    vim /usr/local/mycat/conf/schema.xml
    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://org.opencloudb/">
            <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'>
            </schema>
            <dataNode name="dn1" dataHost="dthost" database="test"/>
            <dataHost name="dthost" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="A76" url="192.168.19.76:3306" user="mycat" password="123456">
            </writeHost>
            <writeHost host="A77" url="192.168.19.77:3306" user="mycat" password="123456" />
            </dataHost>
    </mycat:schema>
    

    有两个参数需要注意,balance和 switchType。

    其中,balance指的负载均衡类型,目前的取值有4种:

    balance="0":不开启读写分离机制,所有读操作都发送到当前可用的writeHost上

    balance="1":全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡

    balance="2":所有读操作都随机的在writeHost、readhost上分发。

    balance="3":所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力

    switchType指的是切换的模式,目前的取值也有4种

    switchType='-1':表示不自动切换

    switchType='1':默认值,表示自动切换

    switchType='2':基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status

    switchType='3':基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like 'wsrep%'

    MySQL主从提前配置好的;两台数据创建用户

    mysql> grant all on *.* to mycat@'192.168.10.16' identified by '123456';
    Query OK, 0 rows affected, 1 warning (0.03 sec)
    
    mysql>  flush privileges;
    Query OK, 0 rows affected (0.02 sec)
    

      启动Mycat并查看端口:

    [root@master conf]# mycat start
    Starting Mycat-server...
    [root@master conf]# cat /usr/local/mycat/logs/wrapper.log 
    STATUS | wrapper  | 2020/04/16 09:36:55 | --> Wrapper Started as Daemon
    STATUS | wrapper  | 2020/04/16 09:36:55 | Launching a JVM...
    INFO   | jvm 1    | 2020/04/16 09:36:55 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0
    INFO   | jvm 1    | 2020/04/16 09:36:55 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
    INFO   | jvm 1    | 2020/04/16 09:36:55 |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
    INFO   | jvm 1    | 2020/04/16 09:36:55 | 
    INFO   | jvm 1    | 2020/04/16 09:36:56 | log4j 2020-04-16 09:36:56 [./conf/log4j.xml] load completed.
    INFO   | jvm 1    | 2020/04/16 09:36:58 | MyCAT Server startup successfully. see logs in logs/mycat.log
    [root@master conf]# ss -lntp | grep 9066
    LISTEN     0      100         :::9066                    :::*                   users:(("java",pid=9343,fd=60))
    

      测试

    [root@master ~]# mysql -uroot -p123456 -h192.168.10.16 -P8066
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 1
    Server version: 5.5.8-mycat-1.5.1-RELEASE-20161130213509 MyCat Server (OpenCloundDB)
    
    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql> show databases;
    +----------+
    | DATABASE |
    +----------+
    | test     |
    +----------+
    1 row in set (0.01 sec)
    
    mysql> select * from test.emp;
    +-------+-------+-------+------+---------------------+--------+------+--------+
    | empno | ename | job   | mgr  | hiredate            | sal    | comm | deptno |
    +-------+-------+-------+------+---------------------+--------+------+--------+
    |  7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800.00 | NULL |     20 |
    +-------+-------+-------+------+---------------------+--------+------+--------+
    1 row in set (42.59 sec)
    

      在mycat打开日志debug功能;并重启

    [root@master conf]# vim log4j.xml 
    
     - you may not use this file except in compliance with the License.
     - You may obtain a copy of the License at
     -  
     -      http://www.apache.org/licenses/LICENSE-2.0
     -  
     - Unless required by applicable law or agreed to in writing, software
     - distributed under the License is distributed on an "AS IS" BASIS,
     - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     - See the License for the specific language governing permissions and
     - limitations under the License.
    -->
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
      <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%d{MM-dd HH:mm:ss.SSS}  %5p [%t] (%F:%L) -%m%n" />
      </layout>
     </appender>
      <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="${MYCAT_HOME}/logs/mycat.log" />
        <param name="Append" value="false"/>
        <param name="MaxFileSize" value="1000KB"/>
        <param name="MaxBackupIndex" value="10"/>
        <param name="encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{MM/dd HH:mm:ss.SSS}  %5p [%t] (%F:%L) -%m%n" />
        </layout>
      </appender>
    
    
      <root>
        <level value="debug" />
    "log4j.xml" 42L, 1649C                
    [root@master conf]# mycat restart
    Stopping Mycat-server...
    Stopped Mycat-server.
    Starting Mycat-server...
    

      查询

    mysql> select * from test.emp;
    +-------+-------+-------+------+---------------------+--------+------+--------+
    | empno | ename | job   | mgr  | hiredate            | sal    | comm | deptno |
    +-------+-------+-------+------+---------------------+--------+------+--------+
    |  7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800.00 | NULL |     20 |
    +-------+-------+-------+------+---------------------+--------+------+--------+
    1 row in set (0.04 sec)
    日志
    04/16 10:00:36.873  DEBUG [$_NIOREACTOR-1-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=11, lastTime=1587002436867, user=mycat, schema=test, old shema=test, borrow
    ed=true, fromSlaveDB=false, threadId=11, charset=utf8, txIsolation=3, autocommit=true, attachment=dn1{select * from test.emp}, respHandler=SingleNodeHandler [node=dn1{select * from test.emp}, packetId=11], host=192.168.10.18, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]04/16 10:00:36.873  DEBUG [$_NIOREACTOR-1-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=11, lastTime=1587002436867, user=mycat, schema=test, old shema=test, borrowed=
    true, fromSlaveDB=false, threadId=11, charset=utf8, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=192.168.10.18, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
    

      插入数据

    mysql> insert into test.emp values (7491, 'ALL', 'SALE', 7678, '1981-02-20', 1698, 308, 37);
    Query OK, 1 row affected (0.12 sec)
    
    04/16 10:04:15.321  DEBUG [$_NIOREACTOR-0-RW] (NonBlockingSession.java:113) -ServerConnection [id=1, schema=null, host=192.168.10.17, user=root,txIsolation=3, autocommit=true, schema=null]ins
    ert into test.emp values (7491, 'ALL', 'SALE', 7678, '1981-02-20', 1698, 308, 37), route={   1 -> dn1{insert into test.emp values (7491, 'ALL', 'SALE', 7678, '1981-02-20', 1698, 308, 37)}
    

      

  • 相关阅读:
    GNU make manual 翻译(九十九)
    GNU make manual 翻译( 九十五)
    Shell的 for 循环小例子
    makefile中对目录遍历的小例子
    GNU make manual 翻译(九十三)
    GNU make manual 翻译( 一百)
    GNU make manual 翻译( 九十七)
    GNU make manual 翻译( 九十八)
    mapserver4.8.3 的readme.win32的中文翻译文件
    遥控器编程
  • 原文地址:https://www.cnblogs.com/rdchenxi/p/12707042.html
Copyright © 2011-2022 走看看