配置MySql主从数据库,MyCat分库分表,读写分离中间件(纯干货,无美图)

本文详细介绍了如何配置MySQL主从数据库,包括主库与从库的设置,以及Mycat作为读写分离中间件的安装与配置。通过Mycat实现逻辑数据库的分库分表,并验证了读写分离的效果。文中强调了使用GTID进行数据同步的重要性,并提供了Mycat的主要配置文件如schema.xml、rule.xml和server.xml的说明。
摘要由CSDN通过智能技术生成

先点赞,后观看,伸手才有好习惯

  • 基于Java环境开发
  • 主要配置文件 schema.xml(逻辑数据库)、rule.xml(分片规则)、server.xml(一些系统和用户)

理解:Mycat作为一个逻辑数据库,是需要依赖下面的真实数据库

配置主从

  • 坑点及建议:
    1、因为关注点在主从,别花太多时间在一台单机安装mysql两个端口,可尝试虚拟机两台
    2、mysql5.7跟之前的版本不一样,windows上面测试的朋友my.ini可以自己新建
    3、对于my.ini的各个参数的解释请随机去百度,这里有我的转载

  • 实操
    假设现在两台数据库的mysql均已正常安装,配置如下

服务器 IP 账号 密码
A AUSER APWD
B BUSER BPWD

一般进my.ini只需要更新以下所给信息(有则改之无则加):

主库配置及步骤

[mysqld]
#binlog格式,分三种:statement level,rowlevel,mixed
#三种模式的差别介绍可以看:https://juejin.im/post/5df32b2a6fb9a01628012fb3
binlog_format=mixed
#为服务器标识,主从一定不要一样  
server-id   = 1
#清理二进制日志的时间间隔
expire_logs_days = 10
#是需要同步的数据库  
binlog-do-db
#不需要同步的数据库
binlog-ignore-db = mysql                
binlog-ignore-db = test  

#设置gtid同步方式
gtid_executed_compression_period = 1000 #1000默认
gtid_mode = on #默认off
enforce_gtid_consistency = on #默认off

1、连接主库,并进入mysql

>mysql -u数据库用户名 -p数据库密码

2、为从库创建授权用户slave,密码slave ,B为对应的IP

grant replication slave on *.* to 'slave'@'B' identified by 'slave' ;

3、刷新权限信息

flush privileges;

4、自行创建数据库和数据表并插入相应数据,mysql默认InnoDB,主库可以不用修改引擎

从库配置及步骤

my.ini文件

[mysqld]
#binlog格式,分三种:statement level,rowlevel,mixed
#三种模式的差别介绍可以看:
binlog_format=mixed
#为服务器标识,主从一定不要一样  
server-id   = 13
#清理二进制日志的时间间隔
expire_logs_days = 10
#是需要同步的数据库  
binlog-do-db
#设置gtid同步方式
gtid_executed_compression_period = 1000 #1000默认
gtid_mode = on #默认off
enforce_gtid_consistency = on #默认off

1、连接从库,并进入mysql

>mysql -u数据库用户名 -p数据库密码

2、复制一份主库的数据库到从库,并赋予slave权限

grant all privileges on *.* to 'slave'@'%' identified by 'slave' with grant option;

3、刷新权限或者退出mysql命令行重启mysql服务

4、master建立数据同步

change master to master_host='A',master_user='slave',master_password='slave',master_auto_position=1;

重要说明:部分教程用的master_log_file & master_log_pos 参数来指定,但是slave一旦出现问题,无法确认断节点,数据容易造成不一致,所以才引入gtid(即global transaction ID全局事务ID),想看相应介绍的可以去mysql官网里面搜寻相应的版本然后看看.

5、mysql命令查看从库数据库状态

mysql>show slave status \G;

当显示的数据内有:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
就说明可以了

6、自行验证主库更新数据对从库的影响

Mycat

mycat架构图

avatar

MyCat简介

简介个毛线,[MyCat官网](http://mycat.io/)那么详细的介绍不看,非要听我在这摘录?

环境安装

由于Mycat是基于Java开发的,所以JDK环境先安装好,再去安装Mycat,安装教程一大把,我就不赘述了

实现过程

1、为简单明了的看清配置信息,会删除不影响结果的注释,且本记录只针对一个主库和一个从库,分库分表只需要加对应的配置即可,配置文件中有相应的详细说明
2、可以进入mysql把从库的引擎改成MyISAM,如果不想从库有写的功能,也可以将mysql设置成只读数据库

schema.xml 配置信息(完整的配置信息及解释在文末):
主要是配置读写数据库信息和对应表信息

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

	<!-- 每一个schema代表一个逻辑数据库 
	    这里的name是程序端使用的数据库名称,对应的数据库账号密码在server.xml中
	-->
	<schema name="MycatDemo" checkSQLschema="true" sqlMaxLimit="100">
		<!--  auto sharding by id (long)
			每个逻辑数据库下面对应的是所有的表,下方RDB代表真实数据库
			name:对应RDB中的表名
			primaryKey:RDB中该表的主键
			dataNode:这些表对应的数据库
			rule:对应的分片规则
		-->
		<table name="article" primaryKey="article_id" autoIncrement="true" dataNode="dn1"
			   rule="mod-long" />
	</schema>
	
	<!-- 各个数据结点的信息,便于上方schema使用 

	如果是多个数据结点和多个host,那就同步复制一份dataNode和dataHost数据,然后写上对应的配置信息
		name:结点的名称
		dataHost:结点的主机地址
		database:RDB数据库名称
	-->
	<dataNode name="dn1" dataHost="localhost1" database="demo" />
	
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<!-- 心跳语句检测,检测对应的mysql是否正常运行 -->
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="11.11.11.11:3306" user="root"
				   password="root">
			<!-- can have multi read hosts -->
			<readHost host="hostS2" url="22.22.22.22:3306" user="root" password="root" />
		</writeHost>
		<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
	</dataHost>
	
</mycat:schema>

rule.xml 配置信息(完整的配置信息及解释在文末):
主要定义一些分片规则和生成规则之类的

这里尤其要注意一点,有个叫mod-long的function在schema.xml中引用到了,但是我只做了一分数据库,所以这里我把默认的3改成了1,如果你有对应的多个数据库分表,则改成相应的数量。

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
	- you may not use this file except in compliance with the License. - You 
	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
	- - Unless required by applicable law or agreed to in writing, software - 
	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
	License for the specific language governing permissions and - limitations 
	under the License. -->
<!D
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值