• CentOS 安装 配置MyCat,实现MySQL的主从复制和读写分离


    CentOS 安装 配置MyCat,实现MySQL的主从复制和读写分离

    MyCat是Java语言开发的,所以需要提前安装openJDK或JDK。

    安装JDK

    1、下载mycat安装包(略)

    这里使用的是:Mycat-server-1.6.7.1-release-linux.tar.gz

    2、解压,移动到安装目录

    # 解压
    tar -zxvf Mycat-server-1.6.7.1-release-linux.tar.gz
    
    # 移动到安装目录
    mv mycat /usr/local/
    

    3、修改配置

    3.1、修改server.xml配置

    # 进入配置文件目录
    cd /usr/local/mycat/conf
    # 修改server.xml
    vi server.xml
    

    修改内容:

    • 下面的<user name="user"这一段是不需要改的
    • 将MyCat的默认用户root 修改为自定义用户名,例如:mycat
    • 密码修改为自定义密码
    • scemas修改为自定义逻辑库名称
            <user name="rayfoo_root" defaultAccount="true">
                    <property name="password">rayfoo</property>
                    <property name="schemas">RAYFDB</property>
    
                    <!-- 表级 DML 权限设置 -->
                    <!--
                    <privileges check="false">
                            <schema name="TESTDB" dml="0110" >
                                    <table name="tb01" dml="0000"></table>
                                    <table name="tb02" dml="1111"></table>
                            </schema>
                    </privileges>
                     -->
            </user>
    

    3.2、修改schema.xml

    # 进入配置文件目录
    cd /usr/local/mycat/conf
    # 修改schema.xml
    vi schema.xml
    

    修改逻辑数据库名称和节点:

    • 保留一个dataNode
    • 保留一个dataHost
    • 配置读库readHost
    • 配置写库writeHost
    • 这里如果修改了schema的name,那么server.xml的schema的name也需要同步修改
    • balance="3"开启读写分离
    • 读写分离必须使用mycat的虚拟库才能实现 !!!
    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    
            <schema name="RAYFOODB" checkSQLschema="false" sqlMaxLimit="100">
            </schema>
            <dataNode name="dn1" dataHost="primaryhost" database="testdb" />
            <dataHost name="primaryhost" 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.2.183:3306" user="root"
                                       password="rayfoo">
                            <!-- can have multi read hosts -->
                            <readHost host="hostS2" url="192.168.2.184:3306" user="root" password="rayfoo" />
                    </writeHost>
            </dataHost>
    </mycat:schema>
    
    

    4、启动MyCat

    # 进入安装目录
    cd /usr/local/mycat/bin
    
    # 启动mycat 启动方式1:控制台启动,一般用于调试,可以查看日志
    ./mycat console
    
    # 后台启动
    ./mycat start
    

    5、开放端口

    # 开启防火墙
    firewall-cmd --permanent --add-port=8066/tcp
    # 查看列表
    firewall-cmd --permanent --list-ports
    # 重启防火墙
    firewall-cmd --reload
    

    6、使用mysql命令登录

    # 进入mysql安装目录
    cd /usr/local/mysql/bin
    
    # 登录mycat
    ./mysql -urayfoo_root -prayfoo -P 8066 -h 192.168.2.183
    

    7、MySQL配置主从复制

    配置主从复制尽量配合MyCat使用,一般配置主库为写库,从库为读库。使用主从复制一定要避免手动写入从库数据!!!!!!

    7.1、修改配置

    配置主数据库my.cnf

    • 注意:别直接复制,binlog-do-db一定要改
    #主服务器唯一ID
    server-id=1
    #启用二进制日志
    log-bin=mysql-bin
    # 设置不要复制的数据库(可设置多个)
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    #设置需要复制的数据库
    binlog-do-db=需要复制的主数据库名字
    #设置logbin格式
    binlog_format=MIXED
    

    配置从数据库my.cnf

    #从服务器唯一ID
    server-id=2
    #启用中继日志
    relay-log=mysql-relay
    

    重启主从数据库,确保都开放了3306端口

    7.2、创建账户,配置主从复制

    在主机上建立帐户并授权 slave,注意这里一定要重启数据库后再执行,否则查询show master status;为空

    #在主机MySQL里执行授权命令
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
    #查询master的状态
    mysql> show master status;
    
    #记录下File和Position的值
    #执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化
    

    在从机上配置需要复制的主机,注意这里一定要重启数据库后再执行

    mysql> CHANGE MASTER TO MASTER_HOST='主机的IP地址',
    MASTER_USER='slave',
    MASTER_PASSWORD='123123',
    MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;
    
    #启动从服务器复制功能
    mysql> start slave;
    #查看从服务器状态
    mysql> show slave status\G;
    
    #下面两个参数都是Yes,则说明主从配置成功!
    # Slave_IO_Running: Yes
    # Slave_SQL_Running: Yes
    

    此时,主数据库的任何操作都会自动在从数据库执行

    7.3、停止、取消主从复制

    在从机执行:

    mysql> stop slave;
    

    恢复主从复制:

    mysql> start slave;
    

    取消原有主从关系,重新配置主从;需要在从机执行:

    mysql> stop slave;
    mysql> reset master;
    

    8、双主从复制和读写分离

    双向主从复制需要四台机器,先分别搭建两套主从;然后再将两台主机做为互相主从复制。以此实现高可用。

    双主双从模式的读写分离,将两个主库作为写库,两个从库作为读库即可。

    8.1、双主双从复制

    8.1.1、master1配置

    修改配置文件: vim /etc/my.cnf
    #主服务器唯一ID
    server-id=1
    #启用二进制日志
    log-bin=mysql-bin
    # 设置不要复制的数据库(可设置多个)
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    #设置需要复制的数据库
    binlog-do-db=需要复制的主数据库名字
    #设置logbin格式
    binlog_format=STATEMENT
    # 在作为从数据库的时候, 有写入操作也要更新二进制日志文件
    log-slave-updates
    #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1, 取值范围是1 .. 65535
    auto-increment-increment=2
    # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
    auto-increment-offset=1
    

    8.1.2、master2配置

    修改配置文件: vim /etc/my.cnf
    #主服务器唯一ID
    server-id=3
    #启用二进制日志
    log-bin=mysql-bin
    # 设置不要复制的数据库(可设置多个)
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    #设置需要复制的数据库
    binlog-do-db=需要复制的主数据库名字
    #设置logbin格式
    binlog_format=STATEMENT
    # 在作为从数据库的时候,有写入操作也要更新二进制日志文件
    log-slave-updates
    #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
    auto-increment-increment=2
    # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
    auto-increment-offset=2
    

    8.1.3、slavel1配置

    修改配置文件: vim /etc/my.cnf
    #从服务器唯一ID
    server-id=2
    #启用中继日志
    relay-log=mysql-relay
    

    8.1.4、slavel2配置

    修改配置文件: vim /etc/my.cnf
    #从服务器唯一ID
    server-id=4
    #启用中继日志
    relay-log=mysql-relay
    

    8.1.5、执行复制

    8.1.5.1、双主机、 双从机重启 mysql 服务

    8.1.5.2、开放mysql默认端口

    8.1.5.3、在两台主机上建立帐户并授权 slave
    #在主机MySQL里执行授权命令
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
    #查询Master1的状态
    mysql> show master status;
    
    #登录master2 查询Master2的状态
    mysql> show master status;
    
    #分别记录下File和Position的值
    #执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
    
    8.1.5.4、在从机上配置需要复制的主机(Slava1 复制 Master1, Slava2 复制 Master2)
    #复制主机的命令
    mysql> CHANGE MASTER TO MASTER_HOST='主机的IP地址',
    MASTER_USER='slave',
    MASTER_PASSWORD='123123',
    MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;
    

    分别在两台从机执行命令

    8.1.5.5、分别启动两台从服务器复制功能
    # 分别启动两台服务器的复制功能
    mysql> start slave;
    
    # 分别查看从服务器状态
    mysql> show slave status\G;
    
    
    #下面两个参数都是Yes,则说明主从配置成功!
    # Slave_IO_Running: Yes
    # Slave_SQL_Running: Yes
    
    8.1.5.6、分别在两台主服务器互相复制

    Master2的复制Master1、Master1的复制Master2

    8.2、双主双从读写分离

    …
    <dataNode name="dn1" dataHost="host1" database="testdb" />
    <dataHost name="host1" 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.140.128:3306" user="root" password="123123">
        <!-- can have multi read hosts -->
        <readHost host="hostS1" url="192.168.140.127:3306" user="root" password="123123" />
      </writeHost>
      <writeHost host="hostM2" url="192.168.140.126:3306" user="root" password="123123">
        <!-- can have multi read hosts -->
        <readHost host="hostS2" url="192.168.140.125:3306" user="root" password="123123" />
      </writeHost>
    </dataHost>
    … #
    balance="1": 全部的readHost与stand by writeHost参与select语句的负载均衡。
    #writeType="0": 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
    #writeType="1",所有写操作都随机的发送到配置的 writeHost, 1.5 以后废弃不推荐
    #writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties 。
    #switchType="1": 1 默认值,自动切换。
    # -1 表示不自动切换
    # 2 基于 MySQL 主从同步的状态决定是否切换。
    
  • 相关阅读:
    模拟算法(八)
    迭代算法(七)
    试探法是一种委婉的做法(六)
    贪心算法并不贪婪(五)
    各个击破的分治算法(四)
    充分利用自己的递归算法(三)
    一起学Spring之Web基础篇
    C# 利用AForge进行摄像头信息采集
    一起学Spring之注解和Schema方式实现AOP
    一起学Spring之AOP
  • 原文地址:https://www.cnblogs.com/zhangruifeng/p/16357819.html
Copyright © 2020-2023  润新知