mysql主从搭建与mycat读写分离

    技术2022-07-10  129

    这里写目录标题

    第三章 搭建读写分离3.1 搭建一主一从1、 搭建 MySQL 数据库主从复制2、 修改 Mycat 的配置文件 schema.xml3、 启动 Mycat4、 验证读写分离

    第三章 搭建读写分离

    我们通过 Mycat 和 MySQL 的主从复制配合搭建数据库的读写分离,实现 MySQL 的高可用性。 我们将搭建:一主一从、双主双从两种读写分离模式。

    3.1 搭建一主一从

    一个主机用于处理所有写请求,一台从机负责所有读请求,架构图如下

    1、 搭建 MySQL 数据库主从复制

    ① MySQL 主从复制原理

    ② 主机配置(master)

    修改配置文件:vi /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 vi /etc/my.cnf 在my.cnf [mysqld]下添加 server-id=1 log-bin=mysql-bin binlog-ignore-db=mysql binlog-do-db=testdb binlog_format=STATEMENT

    binlog 日志三种格式

    ③ 从机配置(slave)

    修改配置文件:vi /etc/my.cnf #从服务器唯一ID server-id=2 #启用中继日志 relay-log=mysql-relay vi /etc/my.cnf 在my.cnf [mysqld]下添加 server-id=2 relay-log=mysql-relay

    ④ 主机、从机重启 MySQL 服务 ,查看状态

    systemctl restart mysqld systemctl status mysql

    ⑤ 主机从机查看都关闭防火墙

    systemctl status firewall systemctl disable firewalld

    ⑥ 在主机上建立帐户并授权 slave

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

    ⑦ 在从机上配置需要复制的主机

    #复制主机的命令 CHANGE MASTER TO MASTER_HOST=‘主机的IP地址’, MASTER_USER=‘slave’, MASTER_PASSWORD=‘123456’, MASTER_LOG_FILE=‘mysql-bin.具体数字’,MASTER_LOG_POS=具体值; 具体数字和具体值在上面 show master status查看得到;

    在slave1登录mysql mysql -uroot -p123456 CHANGE MASTER TO MASTER_HOST='192.168.100.101', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=120 ; #启动从服务器复制功能 start slave; #查看从服务器状态,是否配置成功 #下面两个参数都是Yes,则说明主从配置成功! # Slave_IO_Running: Yes # Slave_SQL_Running: Yes show slave status\G; # \G按列显示

    ⑧ 主机新建库、新建表、insert 记录,从机复制

    master mysql -uroot -p123456 create database testdb; testdb是/etc/my.cnf 配置 use testdb; create table mytb(id INT,name VARCHAR(20)); insert into mytb values(1,"zhangsan"); select * from mytb;

    slave1登录mysql查看

    mysql -uroot -p123456 show databases; use testdb; show tables; select * from mytb;

    ⑨ 如何停止从服务复制功能

    stop slave;

    ⑩ 如何重新配置主从

    stop slave; reset master;
    2、 修改 Mycat 的配置文件 schema.xml

    之前的配置已分配了读写主机,是否已实现读写分离?

    验证读写分离 (1)在写主机插入:insert into mytb values (1,@@hostname); 主从主机数据不一致了 (2)在Mycat里查询:select * from mytbl;

    master insert into mytb values (2,@@hostname); Mycat select * from mytb;

    修改的balance属性,通过此属性配置读写分离的类型

    负载均衡类型,目前的取值有4 种:

    1)balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。 2)balance="1",全部的 readHost stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。 3)balance="2",所有读操作都随机的在 writeHost、readhost 上分发。 4)balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力

    最好是balance=“3”和balance=“1”

    为了能看到读写分离的效果,把balance设置成2,会在两个主机间切换查询

    cd /usr/mycat/conf vi schema.xml <dataHost name="host1" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

    3、 启动 Mycat
    cd /usr/mycat ./bin/mycat start
    4、 验证读写分离
    在master mysql insert into mytb values (3,@@hostname); Mycat select * from mytb;

    Processed: 0.009, SQL: 9