Mycat 1.6.5的部署与启动

准备工作

先说一下硬件:

  1. mycat服务器:阿里云ECS,centos7.4,2核2G1M带宽,外网带宽主要是为了yum安装方便;
  2. 数据库主库:阿里云RDS;
  3. 数据库读库:阿里云RDS只读实例;

登陆阿里云ECS之后,首先先进行如下操作:

1
2
3
4
5
6
7
8
wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz #下载1.6.5版本
yum install java-1.8.0-openjdk* -y #安装java 1.8
yum install -y mysql #安装mysql客户端
useradd mycat #创建mycat用户
passwd mycat #更改这个用户的密码
tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local #解压缩/usr/local
cd /usr/local/
chown -R mycat.mycat /usr/local/mycat/ #设置mycat目录的属主和属组

然后登陆到阿里云RDS读库和写库,看一下大小写是否是“不敏感”,否则可能会发生表找不到的问题,阿里云的RDS默认是不敏感的:

1
2
3
4
5
6
7
8
MySQL [(none)]> show global variables like '%lower_case%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF | #这个是“当前系统文件是否大小写敏感”,只读参数,无法修改
| lower_case_table_names | 1 | #这个是“表名是否大小写敏感”,可以修改,改完了重启生效
+------------------------+-------+
2 rows in set (0.00 sec)

Mycat原理和文件结构

Mycat的原理跟Atlas查不多,都是用一个虚拟的数据库作为前端,后面是挂上真实的写库和读库。如图:
akb48

mycat文件夹的文件结构很简单:

  1. conf:配置文件;
  2. lib:服务依赖的一些jar文件.;
  3. logs:日志存储文件夹;
  4. bin:可执行命令的地方:

mycat的配置文件主要在/usr/local/mycat/conf文件夹里,里面有很多文件,但是主要的配置文件是如下几个:

  1. server.xml用来配置虚拟数据库的信息;
  2. schema.xml用来配置真实读库写库的信息;
  3. rule.xml是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件;
    注意!在这个目录下,配置文件修改,需要重启Mycat或者通过9066端口reload才会生效。

首先在打开server.xml,在如下的地方做修改:

1
2
3
4
5
6
7
8
9
<user name="root" defaultAccount="true">	<!-- 这里是给虚拟库设定一个账号叫root,并且作为默认账号 -->
<property name="password">chenx1242</property> <!-- 账号root的密码 -->
<property name="schemas">TESTDB</property> <!-- 账号root对应的虚拟库,这个库保持默认比较好 -->
</user>
<user name="test"> <!-- 这里是给虚拟库设定一个账号叫test,并且作为默认账号 -->
<property name="password">26e9p69r</property> <!-- 账号test的密码 -->
<property name="schemas">TESTDB</property> <!-- 账号test对应的虚拟库,这个库保持默认比较好 -->
<property name="readOnly">true</property> <!-- 说明这个账号是只读账号 -->
</user>

然后打开schema.xml,编辑如下地方:

1
2
3
4
5
6
7
8
9
10
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="阿里云RDS:3306" user="账号" password="对应密码">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="阿里云只读RDS:3306" user="账号" password="对应密码"/>
</writeHost>
<!-- <writeHost host="hostS2" url="localhost:3316" user="root" password="123456"/> -->
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>

检查好格式并保存之后,就到mycat目录下的/bin/里./mycat start就启动mycat了。启动成功之后,8066和9066都是被监听的,如图:
akb48

akb48

启动故障排错

如果启动mycat失败,可以去logs文件夹里看日志,这里举例几个有代表性的错误:

  1. wrapper.log日志:Caused by: io.mycat.config.util.ConfigException: SelfCheck### schema mycat refered by user test is not exist!
    server.xml里schema最好选择默认的TESTDB,而不是错误里的自己起名的mycat。

  2. wrapper.log日志:org.xml.sax.SAXParseException; lineNumber: 23; columnNumber: 3; The content of elements must consist of well-formed character data or markup
    去检查一下server.xml的第23行,看一下是不是多了一个’<’或者’>’。

  3. wrapper.log日志:Caused by: io.mycat.config.util.ConfigException: user root duplicated!
    server.xml里普通账号root,只读账号也叫root,冲突了。

  4. wrapper.log日志:Caused by: org.xml.sax.SAXParseException; lineNumber: 16; columnNumber: 101; Element type "WriteHost" must be declared.
    schema.xml配置中writeHost写成了WriteHost导致报错。

  5. mycat.log日志如下:

    1
    2018-07-06 15:53:22.894  WARN [$_NIOREACTOR-8-RW] (io.mycat.backend.mysql.nio.MySQLConnectionAuthenticator.handle(MySQLConnectionAuthenticator.java:91)) - can't connect to mysql server ,errmsg:Access denied for user '数据库账号'@'本地IP' (using password: YES) MySQLConnection [id=8, lastTime=1530863602566, user=数据库账号, schema=db3, old shema=db3, borrowed=false, fromSlaveDB=false, threadId=4555911, charset=utf8, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=阿里云写库地址, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

    schema.xml里把真实库的配置写错了。

  6. mycat.log日志:(io.mycat.net.NIOConnector.finishConnect(NIOConnector.java:155)) - error: java.net.ConnectException: Connection refused
    schema.xml<dataHost>字段是否写入了多余的数据库。

参考资料

http://valleylord.github.io/post/201601-mycat-install/
https://www.jianshu.com/p/f15d64fcb2f3

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------