centOS下mysql主从复制架构和读写分离

1. 什么是主从复制架构

主从复制架构有多个mysql节点,一个主节点,其他的是从节点,从节点不处理请求,只是同步主节点的数据

2. 工作步骤

  (1)  master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
  (2)  slave将master的binary log events拷贝到它的中继日志(relay log);
  (3)  slave重做中继日志中的事件,将改变反映它自己的数据

3. 主从复制架构步骤

1. 使用链接克隆创建一个主节点所在的虚拟机,和若干(我这里用了一个)从节点所在的虚拟机 -VMware右键虚拟机,点击管理,点击克隆

2. 开启主节点和从节点的虚拟机

3. 启动各自mysqld服务

4. 修改配置文件 vim /etc/my.cnf ,加末尾就可以
    * master:  server-id=1             不能重复
                log-bin=mysql-bin       生成日志文件的前缀
                log-slave-updates       日志变化时从节点自动更新
                slave-skip-errors=all   从节点更新时自动跳过错误的语句

    * slave(可以不配置,如果从节点还有从节点就必须配置了): 
                server-id=2             
                log-bin=mysql-bin       
                log-slave-updates       
                slave-skip-errors=all  

5. 重启mysql,登陆mysql,使用show variables like 'server_id'语句查看是否生效

6. 主节点执行 show master status; 命令 ,记录下 File 和Position  

7. 从节点执行:
    * change master to
      master_host = '主节点ip',
      master_user = 'root',
      master_password = '-RootC21w',
      master_log_file = 'File下的内容',
      master_log_pos = Positon下的内容;

8. 开启从节点  start slave  (stop slave 是关闭,show slave status; 查看从节点状态);
    *Slave_IO_Running: Yes
     Slave_SQL_Running: Yes    两个都是Yes表示开启成功

-9. 如果是克隆的虚拟机,mysql的uuid是相同的,会导致Slave_IO_Running: No,需要去修改uuid
    *vim /var/lib/mysql/auto.cnf

--10. 每次重启主节点的mysqld后,要重新配置从节点
    * 从节点执行reset slave;
    * 主节点执行 show master status; 命令 ,记录下 File 和Position 
    * 执行第七步
    * start slave;开启

4. 读写分离架构步骤

1. 下载  http://dl.mycat.org.cn/1.6.7.1/Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz

2. 解压  tar -zxvf Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz -C /usr/java/mycat/

3. 替换  使用 mysql-connector-java-8.*.jar 替换 mycat/lib 下的 mysql-connector-java/5.1.35

4. 赋予权限   chmod 777 mysql-connector-java-8.0.16.jar  

5. 添加环境变量
    * vim /etc/profile
    * 编辑模式下输入  export MYCAT_HOME=/usr/mycat/mycat1.6.7.1/
                     export PATH=$PATH:$MYCAT_HOME/bin
    * 保存

6. 使环境变量生效  source /etc/profile

7. 修改配置文件:进入mycat的config目录,执行 vim schema.xml
      * 把里面除了xml头和mycat标签都删除,写入下面内容:

        <!--定义一个mycat逻辑库,名字设为logic,dataNode表示映射的真实数据的节点,起名logicNode
             checkSQLschema表示是否校验SQL语法
             sqlMaxLimit表示SQL的最大长度-->
        <schema name="logic" checkSQLschema="true" sqlMaxLimit="200" dataNode="logicNode"></schema>

        <!--定义mycat的数据节点,name要和dataNode一致,dataHost映射真实主机,database映射真实的库-->
        <dataNode name="logicNode" dataHost="logicHost" database="test" />

        <!--定义数据主机 name要和dataHost一致-->
        <dataHost name="logicHost" maxCon="1000" minCon="10" balance="1"
                writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">

                <!--心跳监测,查看节点是否正常-->
                <heartbeat>select user()</heartbeat>

                <!--写节点-->
                <writeHost host="hostM1" url="jdbc:mysql://主节点ip:3306?useSSL=false&amp;serverTimezone=GMT%2B8" user="root" password="-RootC21w">

                        <!--从节点-->
                        <readHost host="hostS1" url="jdbc:mysql://从节点ip:3306?useSSL=false&amp;serverTimezone=GMT%2B8" user="root" password="-RootC21w" />

                </writeHost>

        </dataHost>

8. 修改配置文件:进入mycat的config目录,执行 vim server.xml
     * 把里面除了xml头和mycat标签都删除,写入下面内容:

        <system>
                <property name="defaultSqlParser">druidparser</property>
                <property name="charset">utf8</property>
        </system>

        <!--登陆虚拟库logic 的用户名和密码-->
        <user name="root">
                <property name="password">root</property>
                <property name="schemas">logic</property>
        </user>

9. 启动:进入bin目录,执行./mycat start/console  (用console启动可以生成日志)

10. 启动虚拟数据库   mysql -uroot -proot -P8066 -hMyCat所在的虚拟机ip

8. 程序中连接逻辑数据库,库名是设置的虚拟库名,端口号是8066
posted @ 2021-09-26 14:23  一只小白的进修路  阅读(49)  评论(0)    收藏  举报