暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Mycat从入门安装到MySQL主从复制,再到读写分离实现

大猫的Java笔记 2020-12-06
591
1.介绍




    Mycat可不是我的猫,他是基于Java语言编写的一款开源数据库中间件,是一个实现了MySQL协议的服务器。能够实现对主从数据库的读写分离主从复制水平或垂直切分表等功能。



2.下载



    下载地址:http://dl.mycat.org.cn/1.6-RELEASE/

    下载完成以后,将文件传输到Linux服务器,然后进行解压,解压后可以看到Mycat的文件如下所示。





3.修改配置



    修改conf目录下的serve.xml配置文件,更改用户和密码,我自己修改的用户为mycat,密码为mycat




    修改conf目录下的schema.xml配置文件,删除不用的测试表,从6行删除到32行。





    删除不用的测试表后添加默认的数据节点,新增dataNode为dn1





    删除多余的数据节点,同时配置好单主单从的MySQL的ip以及用户名和密码。





    最后将后面注释的也删除,当然也可以不删除,毕竟都注释了。我删除只是为了好看一点,最后的结果如下





    我是vm上面装了两个虚拟机,由于两台上面都有mycat_test这个库,所以我们将schema.xml中的数据库进行更改,由于前面已经配置了192.168.247.130为写主机,192.168.247.132为读主机所以这里就不需要更改了。








4.启动Mycat



    进入到bin目录下,执行./mycat start(后台启动)或./mycat console(控制台启动),这里选择控制台启动方便日志查看;启动后通过日志信息可以看到Mycat是用Java进行编写的。





5.Mycat登录



    命令:mysql -umycat -pmycat -P8066 -h172.20.2.34

    端口:8066表示数据窗口,9066表示后台管理维护的窗口





    打开数据库中的内容可以看到TESTDB库中的表就是实际数据库中的表。





6.MySQL读写分离配置
L



    这次主要是做单主单从,所以下面介绍的就是单主单从的配置,双主双从模式后续更。


    到读主机上的 /etc/my.cnf中配置如下参数。





    server_id是必须要指定的,且每一台机器都必须有不同的id,这样才能做区分类似于数据库表中的主键。


    binlog日志是必须开启的,因为主从复制,就是从机通过读binlog日志来进行复制的。


    binlog_formart是指定binlog的日志格式,可以配置为STATEMENT,STATEMENT记录的是操作数据库的一条完整SQL;ROW志中会记录成每一行数据被修改的形式;Mixed是STATEMENT和ROW的结合版,会根据具体情况选择对应的方式。

        STATEMENT:由于记录的是整个SQL当对整个表操作的时候记录的也会只有一行,而ROW是记录的每一行,当对整个表操作的时候实际上是记录了整个表每行的更改。


   binlog-ignore-db用于指定不需要主从复制的库,mysql和information都是自带的数据库并不需要进行主从复制。


    binlog-do-db是指定需要进行主从复制的库。  



    然后同样需要对从库进行配置,配置如下




    relay-log为中继日志,主从复制时从主机上的binlog增量日志中读取数据,然后放入到自己的relay-log中。


    配置完毕后将主从的MySQL进行重启生效配置。



7.分配复制用户以及必要配置
L



    当配置完毕以后,我们需要在主库上建立一个用户,专门用户主从复制

使用户命令如下,可以看到创建的用户名为slave,密码为123123,同时只给了slave权限。


GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';



    通过show master status命令查看binlog日志当前的状态,从机才知道从binlog的那个点开始读。





    到这个时候我们虽然配置了很多,但是其实主从两台机器是没有关系的,因为从机现在并不知道主机的ip,用户名和密码以及binlog日志当前点。所以需要在从机上继续做一些设置。


     CHANGE MASTER TO MASTER_HOST='主机的IP地址',

      MASTER_USER='slave',

    MASTER_PASSWORD='123123',MASTER_LOG_FILE='mysql-bin.具体数字,',MASTER_LOG_POS=具体值;





    启动从服务器复制功能执行命令start slave,


    查看从服务器状态

     show slave status\G;

    当Slave_IO_RunningSlave_SQL_Running为YES是表示配置成功。





    配置完成后再130上面插入一条记录,可以看到在132从库上面已经查询到了数据,此时主从复制已经完成。






8.读写分离
L



    虽然已经配置好了主从复制,但是并不能实现读写分离,为了演示这个问题我在数据库表中插入一个主机的名称用于区分数据究竟是哪一个库的。






    可以看到两个数据都因为插入了本机的名称所以导致数据不一样,这样通过mycat我们就可以区分是否读写分离了。


    打开mycat然后查询数据如下,可以看到不管怎么查询都是走的30这台机器。





    其实原因是因为我们没有修改mycat的配置文件,需要将mycat的schema.xml中的balance设置为3,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",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力


    由于我们是单主单从所以设置为3





    重启mycat后继续查看结果如下,由于在schema.xml配置文件中指定了读取从32,所以现在获取全部从32读。





    总结一下自己踩的坑,

    1.由于是虚拟机装的所以为了方便就拷贝了快照直接生成新的虚拟机,导致MySQL的uuid不一致,配置主从时看状态一直是NO没有两个都是YES。


    2.MySQL一直无法启动,通过查看MySQL日志发现是my.cnf配置错误。



1.各大培训机构,价格10万的视频 Java架构师视频免费送。


2.各种电子书籍经典Java书籍免费送


3.个人技术总结免费赠送


4.关注下方我的公众号进行免费获取





文章转载自大猫的Java笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论