MySQL的主从复制、读写分离

概述

当系统处于高并发的请求环境下,我们的服务器易出现单点故障单点压力问题,因此采用集群的方式进行·负载均衡·。同时,开启数据库的主从复制读写分离策略。本篇将以一台主机、一台从机介绍简单MySQL集群的搭建。

工具准备

什么是MyCat?https://www.jianshu.com/p/c6e29d724fca

主从复制

①准备2台MySQL服务器
②设置主机
  • 进入主机服务器,进入/etc/my.cnf进行设置
vim /etc/my.cnf  

在此文件下,添加如下配置

[mysqld]
#主机与从机的ID要不同
server-id=1
log-bin=mysql-bin #开启二进制日志文件的名字
log-slave-updates #从机随着日志文件的变化而变化 
slave-skip-errors=all #跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断

效果图如下:
在这里插入图片描述

  • 重启主机MySQL服务
 [root@hbase ~] systemctl restart mysql
  • .登录mysql执行如下命令检测配置是否生效
mysql> show variables like 'server_id';
#配置成功则显示如下
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+
1 row in set (0.00 sec)
  • 查看master`日志文件
mysql> show master status;
#这里的日志文件要与从机进行对接
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |     4294 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec
③设置从机
  • 进入从机服务器,进入/etc/my.cnf进行设置
vim /etc/my.cnf  

在此文件下,添加如下配置

[mysqld]
#id要区别与主机
server-id=2
log-bin=mysql-bin #开启二进制日志功能
log-slave-updates
slave-skip-errors=all #跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
  • 重启从机MySQL服务
 [root@hbase ~] systemctl restart mysql
  • .登录mysql执行如下命令检测配置是否生效
mysql> show variables like 'server_id';
#配置成功则显示如下
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
1 row in set (0.00 sec)
  • 执行如下命令,使得从机与主机日志保持一致
mysql> change master to
    -> master_host='10.10.0.151',
    -> master_user='root',
    -> master_password='0',
    -> master_log_file='mysql-bin.000002', #这里的文件要与主机的日志文件名保持一致
    -> master_log_pos=120;
  • 启动从节点
start slave;
  • 查看从节点状态
    当下图所示的两个状态都是 YES 成功配置
 show  master status\G;

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
         ...............................
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
  • 额外
    当以上状态中存在No的时候,我们可以使用以下命令查看mysql执行日志文件,查看异常信息。
cat /var/log/mysqld.log

出现以下异常时:
[ERROR] Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593

  • 停止从机
stop slave;
  • 找到auto.cnf文 件,并删除,重启mysql会产生一个新的此文件
    find / -name "auto.cnf"    # 查找

    rm -rf /var/lib/mysql/auto.cnf #删除
	
	systemctl restart mysql #重启mysql服务

此时我们再次启动从机,查看状态,两者即为yes。
至此,我们的主从复制就搭建完成。

读写分离

①安装MyCat
 [root@hbase mycat] tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
②配置schema.xml

进入 安装目录下的conf文件中

 [root@hbase mycat] vi schema.xml

配置如下信息


<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

         <!-- 定义MyCat的逻辑库 name是自定义的mycat逻辑库名 dataNode 定义数据节点,对应下一行的name -->
    <schema name="mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dataNode"></schema>
        <!-- 定义MyCat的数据节点 database配置你的真实数据库名 -->
    <dataNode name="dataNode" dataHost="dtHost" database="project" />
   <dataHost name="dtHost" maxCon="1000" minCon="10" balance="1"
                writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">
                <!--维持心跳-->
                <heartbeat>select user()</heartbeat>
                <!--写节点-->
                         <writeHost host="hostM1" url="10.10.0.151:3306" user="root"  password="0">
                <!--从节点-->
                         <readHost host="hostS1" url="10.10.0.152:3306" user="root" password="0" />
                </writeHost>
   </dataHost>


</mycat:schema>
③配置登陆mycat的权限server.xml
[root@hbase mycat] vi server.xml

配置如下信息

<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
            
          		<system>
                <!-- 这里配置的都是一些系统属性,可以自己查看mycat文献参考-->
                <property name="defaultSqlParser">druidparser</property>
                <property name="charset">utf8</property>
                </system>
              
                <!--配置mycat的用户信息-->
                <user name="root">
                <property name="password">root</property>
                        <!-- 配置逻辑库名  -->
                <property name="schemas">mycat</property>
                </user> 
    
</mycat:server> 
③配置启动超时等待时间

因为mycat默认的启动时间为5s,超时即失败。因此我们要自己设置它的启动等待时间
进入 wrapper.xml文件进行配置,在任意位置添加即可。

[root@hbase conf] vi wrapper.conf 
#设置启动等待时长为2小时 单位 s
wrapper.startup.timeout=7200

如下图所示
在这里插入图片描述

启动MyCat

进入bin目录下执行

 [root@hbase bin]# ./mycat console
查看日志

进入logs目录下

tail -f mycat.log  
SpringBoot集成

在yml文件中添加:

     #配置数据源(读写分离数据源)
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://10.10.0.151:8066/mycat #连接mycat逻辑库
    username: root
    password: root

至此,我们的读写分离配置完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值