MySQL实现读写分离

要想实现读写分离,一定要是基于主从复制而实现的

  1. 系统环境
  系统环境:centos7.0
  mycat的版本:1.6
  MySQL主机:192.168.126.143(mycat也使用这台主机)
  MySQL从机:192.168.126.148
  mycat的下载地址:http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
  1. 安装mycat
  #查询有没有安装mycat
  find / -name mycat
  #因为mycat是基于java语言编写的,所以一定要配置jdk的环境
  #解压jdk
  tar -zxvf jdk-8u221-linux-x64.tar.gz
  #配置环境变量
  [root@localhost home]# ls
  ange  jdk1.8.0_221  jdk-8u221-linux-x64.tar.gz
  [root@localhost home]# mv jdk1.8.0_221/ jdk8
  [root@localhost home]# mv jdk8 /usr/
  [root@localhost home]# ls
  ange  jdk-8u221-linux-x64.tar.gz
  [root@localhost home]# cd /usr/
  [root@localhost usr]# ls
  bin  etc  games  include  jdk8  lib  lib64  libexec  local  sbin  share  src  tmp
  [root@localhost usr]# vi /etc/profile
  #加到最末尾
  JAVA_HOME=/usr/jdk8
  CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
  PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
  export PATH CLASSPATH JAVA_HOME
  [root@localhost usr]# source /etc/profile
  [root@localhost usr]# java -version
  java version "1.8.0_221"
  Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
  Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
  [root@localhost usr]# 
  #安装mycat
  #报错
  [root@localhost usr]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz-bash: wget: 未找到命令
  #安装wget
  yum install wget
  #继续执行下载命令
  wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
  #加压下载好的压缩文件
  tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
  #mycat的目录结构
  -lib   jar包存放的目录
  -conf
   -schema.xml
   -server.xml
   -rule.xml
   -log4j2.xml
  -logs
   -mycat.log
   -wrapper.log
  -bin
   -mycat.sh

配置mycat

  • 先配置server.xml
  <!-- 有读写权限的用户(最高权限的用户) -->
  <user name="root">
      <property name="password">123456</property>
      <!-- 对应schema.xml的逻辑数据库名称 -->
      <property name="schemas">TESTDB</property>
  </user>
  
  <!-- 只有只读权限 -->
  <user name="user">
      <property name="password">123456</property>
      <property name="schemas">TESTDB</property>
      <property name="readOnly">true</property>
  </user>
  • schema.xml

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    
    	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    		<!-- 里面的tables是实现分库分表的 -->
    	</schema>
    	<dataNode name="dn1" dataHost="localhost1" database="youruike" />
    	<!--
    	1. balance="0",所有读操作都发送到当前可用的writeHost上。
    	2. balance="1",所有读操作都随机的发送到readHost。
    	3. balance="2",所有读操作都随机的在writeHost、readhost上分发。
    	4. balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3没有
    
    	1. writeType="0", 所有写操作都发送到可用的writeHost上。
    	2. writeType="1",所有写操作都随机的发送到readHost。
    	3. writeType="2",所有写操作都随机的在writeHost、readhost分上发
    	-->
    	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
    			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    		<!-- 心跳检测,检测主机和从机是否正常 -->
    		<heartbeat>select user()</heartbeat>
    		<writeHost host="hostM1" url="127.0.0.1:3306" user="root"
    				   password="123456">
    			<readHost host="hostS2" url="192.168.126.148:3306" user="root" password="123456" />
    		</writeHost>
    	</dataHost>
    </mycat:schema>
    
  • 启动mycat

    [root@localhost bin]# ./mycat start console
    Starting Mycat-server...
    [root@localhost bin]# ./mycat status console
    Mycat-server is running (11067).
    [root@localhost bin]# netstat -ntlp
    -bash: netstat: 未找到命令
    [root@localhost bin]# yum -y install net-tools
    [root@localhost bin]# netstat -ntlp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 127.0.0.1:32000         0.0.0.0:*               LISTEN      11069/java          
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1030/sshd           
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1188/master         
    tcp6       0      0 :::1984                 :::*                    LISTEN      11069/java          
    tcp6       0      0 :::8066                 :::*                    LISTEN      11069/java          
    tcp6       0      0 :::9066                 :::*                    LISTEN      11069/java          
    tcp6       0      0 :::3306                 :::*                    LISTEN      1742/mysqld         
    tcp6       0      0 :::39666                :::*                    LISTEN      11069/java          
    tcp6       0      0 :::22                   :::*                    LISTEN      1030/sshd           
    tcp6       0      0 :::41304                :::*                    LISTEN      11069/java          
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1188/master
    
  • 登录mycat查看配置内容

    #登录mycat的管理端口
    mysql -uroot -p123456 -h127.0.0.1 -P9066
    #查看帮助手册
    show @@help;
    #查看读写分离情况
    show @@datasource;
    #查看心跳检测
    show @@heartbeat;
    	RS_CODE 状态:
            OK_STATUS = 1;正常状态
            ERROR_STATUS = -1; 连接出错
            TIMEOUT_STATUS = -2; 连接超时
            INIT_STATUS = 0; 初始化状态
    #连接数据端口(登录mycat的主机,mycat在192.168.126.161)
    mysql -uroot -p123456 -h127.0.0.1 -P8066
    
  • 测试读写分离情况

    #修改日志打印情况
    <Loggers>
        <!--<AsyncLogger name="io.mycat" level="info" includeLocation="true" additivity="false">-->
        <!--<AppenderRef ref="Console"/>-->
        <!--<AppenderRef ref="RollingFile"/>-->
        <!--</AsyncLogger>-->
        <asyncRoot level="debug" includeLocation="true">
    
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile"/>
    
        </asyncRoot>
    </Loggers>
    
    #查看日志情况
    tail -f wrapper.log
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值