• MyCat实现数据库与数据库之间的读写分离


    一、Mycat的安装准备:

      1、jdk:要求jdk必须是1.7及以上版本

      2、Mysql:推荐mysql5.5以上版本

      3、Mycat

      Mycat的官方网站:

      http://www.mycat.org.cn/

      下载地址:

      https://github.com/MyCATApache/Mycat-download

      Mycat的安装

      Mycatwindowslinux多种版本。本教程为linux安装步骤,windows基本相同。

      第一步:下载Mycat-server-xxxx-linux.tar.gz

      第二步:将压缩包解压缩。建议将mycat放到/usr/local/mycat目录下。

      第三步:进入mycat目录,启动mycat

          ./mycat start

          停止:

          ./mycat stop

          mycat 支持的命令{ console | start | stop | restart | status | dump }

          Mycat的默认端口号为:8066

    二、Mycat的分片

      两台mysql数据库服务器

      Host1:192.168.37.101

      Host2:192.168.37.102

      host1环境:

      操作系统版本:centos6.4

      数据库版本:mysql-5.6

      mycat版本::1.4release(发行版)

      数据库名:db1、db3

     

      mysql节点2环境:  

      操作系统版本 : centos6.4

     

      数据库版本 : mysql-5.6

     

      mycat版本 :1.4 release

     

      数据库名 : db2

     

     

      配置重要文件Schema.xml

        <schema name="mycatName" checkSQLschema="false" sqlMaxLimit="100">

                    <!-- auto sharding by id (long) -->  id自动分片的规则

                    <table name="tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

            </schema>

       给mycat创建个虚拟的数据库名mycatName,给mycatName创建指定表名,和db1、db2、db3表名相同才能进行分片  

     

    MyCat安装到节点1上(需要安装jdk

     

       <dataNode name="dn1" dataHost="localhost1" database="db1" />

     

            <dataNode name="dn2" dataHost="localhost2" database="db2" />

     

            <dataNode name="dn3" dataHost="localhost1" database="db3" />

     

            <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"

     

                    writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

     

                    <heartbeat>select user()</heartbeat>

     

                    <!-- can have multi write hosts -->

     

                    <writeHost host="hostM1" url="192.168.37.101:3306" user="root"

     

                            password="root">

     

                            <!-- can have multi read hosts -->

     

                    </writeHost>

     

            </dataHost>

     

            <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"

     

                    writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

     

                    <heartbeat>select user()</heartbeat>

     

                    <!-- can have multi write hosts -->

     

                    <writeHost host="hostM1" url="192.168.37.102:3306" user="root"

     

                            password="root">

     

                            <!-- can have multi read hosts -->

     

                    </writeHost>

     

            </dataHost>

     

    </mycat:schema>

     

    schema.xml中删除<!--type="global"-->,不删除的话分节的话三张表都会有相3同数据

       配置重要文件Server.xml

    <user name="gaoxiansheng">

        <property name="password">123456</property>

        <property name="schemas">mycatName</property>

        <property name="readOnly">false</property>

    </user>

       配置重要文件rule.xml

    三、mycat读写分离:

        主从配置需要注意的地方

        1、主DB server和从DB server数据库的版本一致

        2、主DB server和从DB server数据库数据名称一致

        3、主DB server开启二进制日志,DB server和从DB serverserver_id都必须唯一


      1.拷贝my.cnf cp /usr/share/mysql/my-default.cnf /etc/
       改名 mv my-default.cnf my.cnf
       编辑 vim my.cnf 加入 lower_case_table_names=1 不区分大小写
       重启mysql service mysql restart
      2.主从复制:读写,删除增加一致性
       主服务器配置:(在192.168.37.101上配置)
      第一步:更改/etc/my.cnf 文件
         

    binlog-do-db=db1

    binlog-ignore-db=mysql

    #启用二进制日志

    log-bin=mysql-bin

    #服务器唯一ID,一般取IP最后一段

    server-id=134

     
      第二步:重启mysql服务
          service mysql restart
      第三步:建立一个用户
          mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
          mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';
      刷新权限
          mysql> FLUSH PRIVILEGES;
      查看mysql现在有哪些用户
          mysql>select user,host from mysql.user;

      第四步:查询master的状态
          mysql> show master status;
        +------------------+----------+--------------+------------------+-------------------+
        | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
        +------------------+----------+--------------+------------------+-------------------+
        | mysql-bin.000001 | 517| db1 | mysql | |
        +------------------+----------+--------------+------------------+-------------------+
        1 row in set
      从服务器配置:(在192.168.37.102上配置)
      第一步:
        在从服务器Hadoop02上复制文件
        cp /usr/share/mysql/my-default.cnf /etc/
        改名
        mv my-default.cnf my.cnf
        更改配置vim /etc/my.cnf
        server-id=106
      第二步:重启mysql服务
        service mysql restart
      第三步:配置从服务器
        change master to master_host='192.168.37.101',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=517
        注意语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户,“120”无单引号(此处的120就是show master status 中看到的position的值,这里的 mysql-bin.000001就是file对应的值)。

      第四步:启动从服务器复制功能
        Mysql>start slave;

      第五步:检查从服务器复制功能状态:
        mysql> show slave status

        ……………………(省略部分)
        Slave_IO_Running: Yes //此状态必须YES
        Slave_SQL_Running: Yes //此状态必须YES
        ……………………(省略部分)

        注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

        错误处理:
        如果出现此错误:
        Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
        因为是mysql是克隆的系统所以mysql的uuid是一样的,所以需要修改。
      配置mycat实现读写分离:

    <dataNode name="dn1" dataHost="localhost1" database="db1" />

    <dataNode name="dn2" dataHost="localhost1" database="db2" />

    <dataNode name="dn3" dataHost="localhost1" database="db3" />

    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"

    writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">

    <heartbeat>show slave status</heartbeat>

    <writeHost host="hostM" url="192.168.25.101:3306" user="root"password="root">

    <readHost host="hostS" url="192.168.25.102:3306" user="root"password="root" />

    </writeHost>

    </dataHost>

  • 相关阅读:
    最新版 VS2015|Visual Studio Enterprise 2015简体中文版(企业版)
    MY97 日期控件只输入今天之前的值
    VARIANT类型
    C++ Struct
    MFC网络编程
    套接字编程(VC_Win32)
    套接字相关函数
    网络编程
    char str[] 与 char *str的区别详细解析
    Windows下C++多线程同步与互斥简单运用
  • 原文地址:https://www.cnblogs.com/gentle-awen/p/9625506.html
Copyright © 2020-2023  润新知