前提Mysql服务已经搭建好主从复制,Mysql搭建主从复制可参考:Mysql8实现主从复制
涉及到需要修改的配置文件
– server.xml:定义用户以及系统相关变量,如端口等
– schema.xml:定义逻辑库,表、分片节点等内容
<user name="mycat" defaultAccount="true"> <!-- mycat登陆用户名 -->
<property name="password">123456</property> <!-- mycat登陆密码 -->
<property name="schemas">TESTDB</property> <!-- mycat连接逻辑库 -->
<property name="defaultSchema">TESTDB</property> <!-- mycat连接逻辑库 -->
</user>配置解释
– user name=”mycat”:通过Mycat服务连接Mysql服务的用户名,可随意修改
– name=”schemas”:Mycat的逻辑库TESTDB,可随意修改
这里的配置是一主一从,如果服务器数量条件允许建议搭建双主双从
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="2"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="jdbc:mysql://127.0.0.1:3306" user="root"
password="123456">
<readHost host="hostS1" url="jdbc:mysql://127.0.0.2:3306" user="root"
password="123456" />
</writeHost>
</dataHost>
</mycat:schema>这个标签内指明用于和后端数据库进行心跳检查的语句。例如,MYSQL可以使用select user(),Oracle可以使用select 1 from dual等。
这个标签还有一个connectionInitSql属性,主要是当使用Oracla数据库时,需要执行的初始化SQL语句就这个放到这里面来。例如:alter session set nls_date_format=’yyyy-mm-dd hh24:mi:ss'(把这里的中文冒号改为英文冒号),1.4主从切换的语句必须是:show slave status
这两个标签都指定后端数据库的相关配置给mycat,用于实例化后端连接池。唯一不同的是,writeHost指定写实例、readHost指定读实例,组着这些读写实例来满足系统的要求。
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去。
mycat启动相关命令,要先cd 到mycat\bin\路径下
linux 环境为:
./mycat start 启动
./mycat stop 停止
./mycat console 前台运行
./mycat restart 重启服务
./mycat pause 暂停
./mycat status 查看启动状态window 启动为:
直接双击运行 startup_nowrap.bat ,如果闪退用 cmd 模式运行查看日志
在写主机插入:insert into mytbl values (1,@@hostname);
这里只是举例,测试的时候可以找到一个varchar类型的新增数据时插入:@@hostname
@@hostname:不同主机上的名字会显示不一样,再测试查询这个插入的字段对比是哪台机器的即可,注意查询是要通过登陆Mycat服务查询
开发者只需要通过操作Mycat服务去操作数据,不需要关心数据在哪个服务器哪个库中,比如你的后端你是Java,只需要将配置数据库的地方改为mycat的服务即可,CRUD和正常操作Mysql一样即可
比如
jdbc:mysql://127.0.0.1:8066/TESTDB...后面省略如果使用Mycat1.x版本进行分库操作,需要注意跨库目前不支持JOIN操作,分表不分库Mycat1.6.7.6亲测默认支持JOIN操作,无须配置ER表关系