win mycat及mysql主从库、读写分离的初使用

1、mysql主从复制。

服务器信息如下:

服务器主机名 ip 说明
mycat-node 192.168.1.73 mycat服务器,连接时使用该服务器
mycat-jessie 192.168.1.73 物理数据库1,作为主库master
mycat-jyp 192.168.1.52 物理数据库2,作为从库slave
备注:实验时,务必关闭关闭机器的iptables防火墙和selinux。
a) 安装ysql,请自行安装。
安装过程此处略...

b) mysql主从复制。
sql1: 登录用户名和密码:root/root
sql2: 登录用户名和密码:root/123456

1.1 主库master的配置

1)、找到数据库的配置文件

(my.cnf Linux系统)或者(my.ini win系统)

C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

2)、master配置:
找到mysqld部分,插入如下内容:


# 配置主从:
# 唯一,要与slave的不同。
server-id=1

skip-grant-tables
#(mysql路径)
basedir = C:\ProgramData\MySQL\MySQL Server 5.7\
#(data路径,存放日志文件)
datadir = C:\ProgramData\MySQL\MySQL Server 5.7\Data\

# 开启二进制日志
log-bin = mysql-bin

# 需要同步的数据库。如果是多个同步库,就以此格式另写几行即可。如果不指明对某个具体库同步,就去掉此行,表示同步所有库(除了ignore忽略的库)
binlog-do-db=db_img_0
binlog-do-db=db_img_1
binlog-do-db=db_info_0
binlog-do-db=db_info_1
binlog-do-db=role
binlog-do-db=role_user
binlog-do-db=user
# 表示不需要备份的数据库为mysql
binlog-ignore-db=mysql

3)、配置:

a) 首先重启mysql服务,
右键计算机管理---服务---mysql停止/启动。

b) 创建用户:
// CREATE USER ' 使用名 '@' 从库 IP 地址 ' IDENTIFIED BY ' 密码 ';
mysql>create user 'ir'@'192.168.1.52' identified by '123456';

c) 分配权限:
// GRANT REPLICATION SLAVE ON . TO ' 使用名 '@' 备机 IP 地址 ';
grant replication slave on *.* to 'ir'@'192.168.1.52';  

d) 刷新权限:
mysql> flush privileges; 

e) 查看master状态:

             File 的值为:    mysql-bin.000013;
         Position 的值为:    154;
     Binlog_Do_DB 的值为:    test;
 Binlog_Ignore_DB 的值为:    manual,mysql ;


记下 File 、 Position 的值,配置从库要用到。

1.2 主库master的配置

1)、master配置:
找到mysqld部分,插入如下内容:


# 配置主从:
# 与主库不同,
server-id=2

skip-grant-tables
#(mysql文件夹路径)
basedir = C:\ProgramData\MySQL\MySQL Server 5.7\
#(data路径,存放日志文件)
datadir = C:\ProgramData\MySQL\MySQL Server 5.7\Data\

# 开启二进制日志
log-bin = mysql-bin
# 需要同步的数据库。
binlog-do-db=db_img_0
binlog-do-db=db_img_1
binlog-do-db=db_info_0
binlog-do-db=db_info_1
binlog-do-db=role
binlog-do-db=role_user
binlog-do-db=user
# 表示不需要备份的数据库为mysql
binlog-ignore-db=mysql

2)、配置:

a) 首先重启mysql服务,
右键计算机管理---服务---mysql停止/启动。

b)、登录上Slave数据库。
用户名改和密码:"root 123456"

c)、停止同步。
输入 "stop slave;"。

d)、重置同步。
输入"reset slave;"。

e)、更改位置。(与Master查看的日志位置保持一致)
CHANGE MASTER TO        
MASTER_HOST='192.168.1.73',          # 主机的IP      
MASTER_USER='ir',                    # 之前创建的用户名       
MASTER_PASSWORD='123456',            # 之前创建的密码      
MASTER_LOG_FILE='mysql-bin.000013',  # 主库中show master status---File下的那个值       
MASTER_LOG_POS=154;                  # 主库中show master status---Position下的那个值       


f)、启动同步。
输入" start slave; "。

g)、查看是否同步成功。
输入" show slave status\G; "
结果如下表格所示:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

二者均为Yes表示成功啦!

如果slave_SQL_Running提示为NO,请等待10-20分钟后再次输入"show slave status\G;"

查看是否同步成功;若仍不成功,请检查之前操作是否存在问题。

输出结果如下:


       Slave_IO_State: Waiting for master to send event                  
          Master_Host: 192.168.1.73                  
          Master_User: ir                  
          Master_Port: 3306                
        Connect_Retry: 60             
      Master_Log_File: mysql-bin.000003         
  Read_Master_Log_Pos: 154              
       Relay_Log_File: DESKTOP-6BJDELI-relay-bin.000004                
        Relay_Log_Pos: 147655155       
Relay_Master_Log_File: mysql-bin.000013             
     Slave_IO_Running: Yes            
    Slave_SQL_Running: Yes              
      Replicate_Do_DB:           
  Replicate_Ignore_DB:  

至此,mysql主从复制,配置完成啦!!!

2、mycat的安装与使用。

2.1.1 安装jdk

因为 MyCat 是用 Java 开发的,因此 MyCat 运行需要安装 JDK(准确来说是 JRE 就够了),并且需要 JDK1.7 或以上版本。

新建JAVA_HOME
变量值为:C:\Program Files\Java\jdk1.8.0_121

新建classpath
值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

编辑path
后追加:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

命令行输入:java -version

C:\Users\sprivacy>java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

安装成功!!!

2.1.2 安装mycat

官网下载地址: http://www.mycat.io/

本文下载版本为1.6

安装目录为:
D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\

设置环境变量:
第一步:
    新建MYCAT_HOME
    变量值为:D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat(mycat解压路径)

第二步:
    编辑path
    后面追加" %MYCAT_HOME%\bin "

进入mycat---bin目录下: .\mycat.bat start

PS D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\bin> .\mycat.bat start
wrapper  | Starting the Mycat-server service...
wrapper  | Mycat-server started.

安装成功。

2.2 配置

2.2.1 修改schema.xml

数据库设置,name与server.xml中schema对应

    <schema name="db_im" checkSQLschema="false" sqlMaxLimit="100">
        <!-- 拆分写法 -->
        <table name="db_img" dataNode="dn11,dn21,dn31,dn41,dn51,dn61,dn71,dn81,dn91,dn101" rule="mod-long1" />
        <table name="db_info" dataNode="dn1,dn2,dn3,dn4,dn5,dn6,dn7,dn8,dn9,dn10" rule="mod-long1" />
        <table name="role_user" primaryKey="id" type="gloab" dataNode="dn11"/>
        <table name="role" primaryKey="id" type="gloab" dataNode="dn11">
            <!-- <childTable name="role_user" joinKey="role_id" parentKey="id"/> -->
        </table>
        <!-- 不拆分写法 -->
        <table name="user" primaryKey="id" type="gloab" dataNode="dn11"/>
    </schema>

分片信息,分库相关配置

    <dataNode name="dn1" dataHost="localhost1" database="db_info_0" />
    <dataNode name="dn2" dataHost="localhost1" database="db_info_1" />
    <dataNode name="dn3" dataHost="localhost1" database="db_img_0" />
    <dataNode name="dn4" dataHost="localhost1" database="db_img_1" />

物理数据库,真正存储数据的数据库,读写分离配置:

    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
              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.1.73:3306" user="root"
                   password="root">
            <!-- can have multi read hosts -->
            <readHost host="hostS2" url="192.168.1.52:3306" user="root" password="123456" />
        </writeHost>
        <!-- <writeHost host="hostS1" url="localhost:3316" user="root"
                   password="123456" /> -->
        <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
    </dataHost>

备注: schema.xml文件中有三点需要注意:balance="1",writeType="0" ,switchType="1"

balance=1:readHost及备用的writeHost参与select的负载均衡。
switchType=2:基于mysql主从同步的状态决定是否切换。
hearHbeat:主从切换的心跳语句必须为show slave status;

mycat主从分离只是在读的时候做了处理,写入数据的时候,只会写入到writeHost,需要通过mycat的主从复制将数据复制到readHost。

如果mysql没有主从复制配置,mycat在读写分离后,数据写入writeHost后,readHost一直没有数据。

2.2.2 修改rule.xml

分库分表配置还需要配置rule文件:

    <tableRule name="mod-long">
        <rule>
            <columns>id</columns>
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>
    // 此处需要修改,根据db_id取mod;如果还有分片的。复制此段代码继续添加。
    <tableRule name="mod-long1">
        <rule>
            <columns>db_id</columns>
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>
    
    // 分片的规则为字符串时:
    <tableRule name="mod-long2">
        <rule>
            <columns>authentication_id</columns>
            <algorithm>partition-by-string-hash-function</algorithm>
        </rule>
    </tableRule>

分片数量:

    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">4</property>
    </function>

分片规则为字符串时:

    <tableRule name="mod-long3">
        <rule>
            <columns>client_id</columns>
            <algorithm>partition-by-string-hash-function</algorithm>
        </rule>
    </tableRule>
    
    <tableRule name="mod-long4">
        <rule>
            <columns>token_id</columns>
            <algorithm>partition-by-string-hash-function</algorithm>
        </rule>
    </tableRule>

规则为字符串时,需要指定:

    <function name="partition-by-string-hash-function" class="io.mycat.route.function.PartitionByString">
        <property name="partitionLength">512</property> <!--求模基数  zero-based -->
        <property name="partitionCount">2</property> <!-- 分片数量  -->
        <property name="hashSlice">0:6</property> <!-- hash预算位  -->
    </function>

2.2.3 修改server.xml

server 文件跟读写分离关系不大,但是在这里需要该文件配置来连接mycat的用户及权限。

    <user name="root">
        <property name="password">root</property>
        <property name="schemas">db_im</property>
        
        <!-- 表级 DML 权限设置 -->
        <!--        
        <privileges check="false">
            <schema name="db_im" 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">db_im</property>
        <property name="readOnly">true</property>
    </user>
    

备注:
server文件里mycat的登录用户名和密码可以任意设置,该用户名及密码是作为登陆mycat时的账户信息。我这里配置的是root/root账户。

我这里没有做特殊权限,这些可以自己根据需求定义。

逻辑库名(即db_im)也即是登陆mycat后显示的库名,登陆后显示的就是代理的真是的mysql数据库的相关表,要和schema里的相对应。

3、测试

启动mycat服务

// 进入mycat安装目录下的bin文件:输入 .\mycat.bat start

PS D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\bin> .\mycat.bat start

出现以下结果,表示启动成功:
PS D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\bin> .\mycat.bat start
wrapper  | Starting the Mycat-server service...
wrapper  | Mycat-server started.

navicat 连接mycat:

连接名:    test_mycat
ip:         192.168.1.73
端口:      8066 (mycat默认端口)
用户名:
密码:      root

连接成功,执行相关新增、删除、查询语句,可以实现读写分离相关功能。

停止mycat服务

// 进入bin文件输入:  .\mycat.bat stop
PS D:\soooooft\mycat\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\bin> .\mycat.bat stop
wrapper  | Stopping the Mycat-server service...
wrapper  | Mycat-server stopped.

停止成功!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容