zoukankan      html  css  js  c++  java
  • Docker | 安装mysql及mycat实现读写分离

    参考博客:https://www.cnblogs.com/kelelipeng/p/10346276.html

    1.准备docker镜像

    mysql 5.7的镜像,mycat镜像

     2.安装镜像文件生成容器

    docker run -itd --name mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mmfw%123 mysql-mmfw:5.7
    docker run -itd --name mysql2 -p 3307:3307 -e MYSQL_ROOT_PASSWORD=mmfw%123 mysql-mmfw:5.7
    docker run -itd --name mysql3 -p 3308:3308 -e MYSQL_ROOT_PASSWORD=mmfw%123 mysql-mmfw:5.7

    安装后生成三个mysql容器,如图所示:

     3. 进入docker容器,修改对应的配置:

    docker exec -it mysql1 /bin/bash
    vim etc/mysql/my.cnf

     数据库主库设置:

    3306主:
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    port=3306
    lower_case_tables_names=1 #关闭大小写敏感 默认0开启,1关闭

    #主从数据库设置
    server-id = 1 #[必须]服务器唯一ID,默认是1
    log-bin = mysql-bin #[必须]启用二进制日志
    binlog-do-db = mmfw #指定对名称为test_db的数据库记录二进制日志 #
    binlog-ignore-db = mysql #指定不对名称为mysql的数据库记录二进制日志 #
    binlog-ignore-db = information_schema #指定不对名称为information_schema的数据库记录二进制日志 #
    binlog_format = mixed #binlog日志格式,mysql默认采用,如果从服务器slave有别的slave要复制那么该slave也需要这一项#
    expire_logs_days = 7 #超过7天的binlog删除#

    3306主库修改后的配置文件

     同样步骤在从库部署一下:

    3307,3308 从库:
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    port=3307 # 修改端口号,mysql2为3307,mysql3为3308
    lower_case_tables_names=1 #关闭大小写敏感 默认0开启,1关闭
    server-id = 2 # 修改server_id,mysql2为2,mysql3为3
    replicate-do-db = mmfw #复制名称为test_db的数据库
    replicate-ignore-db = mysql #不需要(忽略)复制名称为mysql的数据库 #
    replicate-ignore-db = information_schema #不需要(忽略)复制名称为information_schema的数据库

    配置完成后,退出容器,并重启:使用工具连接测试是否安装成功

    4.docker安装mycat

    (1)创建挂载目录

    mkdir -p /home/mycat


    (2)将修改后的server.xml,schma.xml上传到服务器的/home/mycat文件夹下

    server.xml

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE mycat:server SYSTEM "server.dtd">
    <mycat:server xmlns:mycat="http://io.mycat/">  
            <system>  
               
                    <property name="defaultSqlParser">druidparser</property>  
                    <property name="mutiNodeLimitType">1</property>  
                    <property name="serverPort">8066</property>  
                    <property name="managerPort">9066</property> 
                    <property name="sequnceHandlerType">1</property>
        <!--    sequnceHandlerType参数主要配合主键自增情况,后续进行说明-->  
            </system>  
            <!-- 任意设置登陆 mycat 的用户名,密码,数据库  -->  
            <user name="root">  
                    <property name="password">mmfw%123</property>  
                    <property name="schemas">MMFW</property>  
            </user>  
     
            
    </mycat:server>

    schma.xml

    <?xml version="1.0"?>  
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">  
    <mycat:schema xmlns:mycat="http://io.mycat/">  
     
        <!-- 设置表的存储方式.schema name="TESTDB" 与 server.xml中的 TESTDB 设置一致  -->  
        <schema name="MMFW" checkSQLschema="false" sqlMaxLimit="100" dataNode="node_db03" ></schema>  
     
        <!-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost -->  
        <dataNode name="node_db03" dataHost="dataHost01" database="mmfw" />  
     
        <!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->  
       <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">  
                <heartbeat>select user()</heartbeat>  
                <writeHost host="hostM1" url="172.19.12.41:3306" user="root" password="mmfw%123">
                <readHost host="hostS1" url="172.19.12.41:3307" user="root" password="mmfw%123" />
                </writeHost>
        </dataHost>  
    </mycat:schema>

    (3)创建容器启动

    docker run --name mycat -p 8066:8066 -p 9066:9066 -v /home/mycat/server.xml:/usr/local/mycat/conf/server.xml -v /home/mycat/schema.xml:/usr/local/mycat/conf/schema.xml --privileged=true -d fify/mycat

    5.主从配置,使用工具连接数据库

    (1)查看主master的状态,如果没有数据,需要在my.cnf 中配置

    show master status;

    注意:show master status; 只有在my.cnf中配置了log-bin开启生成数据库二进制记录才会显示数据

    (2)配置从库,查看该slave的状态,只有该slave执行命令start slave; 后才有显示记录

    show slave status;
    stop slave; #停止从服务器
    reset slave; #重置从服务器
    start slave; #启动服务器
    从服务器关联到主服务器
    change master to master_user='root', master_password='mmfw%123', master_host='172.19.12.41',master_port=3306, master_log_file='mysql-bin.000002',master_log_pos=519;

    其中:

    master_host:为主库安装地址
    master_port:为主库端口号
    master_log_file:查询master状态中的File结果
    master_log_pos:查询master状态中的Position结果

    master_log_pos

    在两个从库分别执行以上操作后,进入容器内查看从库状态

    show slave statusG

    是否成功就看

    Slave_IO_Running: Yes 
    Slave_SQL_Running: Yes

    是否都为Yes

    如果有出现以上结果,则配置成功!

  • 相关阅读:
    html笔记之表单标签
    删除重复字符
    OC点语法和变量作用域
    PHP-You don’t have permissions to access xxx on this server!
    从70周年阅兵式寻找使命
    做市场需要的智能眼镜可以赚钱
    《华为你学不会》读书笔记
    做智能眼镜是为了更方便地拍摄
    智能眼镜是头戴式摄像机
    DA14580_583_DK_II开发板入门笔记
  • 原文地址:https://www.cnblogs.com/flafly/p/14447614.html
Copyright © 2011-2022 走看看