先点赞,后观看,伸手才有好习惯
- 基于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架构图
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