官网可能受到DNS污染导致无法访问,下载服务失效,导致安装下载不便
可以修改操作系统的host文件添加下面行,绕过DNS解析

  1. 210.51.26.184 mycat.org.cn www.mycat.org.cn dl.mycat.org.cn

并刷新操作系统的host缓存

安装与启动

安装JDK,要求JDK1.8,非1.8环境请自行编译源码

缓存的JAR下载地址
http://dl.mycat.org.cn/2.0/

不提供安装包,只提供核心JAR包,JAR包可以独立运行,安装包是使用Java Service Wrapper做壳的,安装包请自己制作
JAR可以作为Java库引入自己业务项目中使用,Mycat2中的各个组件的设计都是可以独立使用的

jar包执行
  1. java -Dfile.encoding=UTF-8 -DMYCAT_HOME=mycat2\src\main\resources -jar mycat2-0.5-SNAPSHOP.jar
  2. Mycat2\mycat2\src\main\resources 是配置文件所在文件夹

实际上生产的启动命令

  1. java -server -Xms10240m -Xmx10240m -XX:MaxMetaspaceSize=1024m -XX:MetaspaceSize=1024m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+CMSClassUnloadingEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSParallelRemarkEnabled -XX:+CMSScavengeBeforeRemark -XX:+ExplicitGCInvokesConcurrent -XX:ErrorFile=/dump/hs_err.log -XX:OnError=/home/xxxxx/server/mycat/jvmOnError.sh -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/wq/server/mycat/dump.hprof -XX:OnOutOfMemoryError=/home/wq/server/mycat/dump.sh -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=35456,suspend=n -DMYCAT_HOME=/home/wq/server/mycat/resources -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=6375 -Dlogback.configurationFile=/mnt/wq/server/mycat/resources/logback.xml -jar /home/xxxxx/server/mycat/mycat2-1.20-jar-with-dependencies.jar

制作tar安装包
https://www.yuque.com/ccazhw/ml3nkf/gnqwyv

替换JAR的时候千万不要把旧的JAR保留在lib文件夹里面,改名也不可以,改扩展名也不可以

image.png

MySQL8安装后请设置XA RECOVER权限
GRANT XA_RECOVER_ADMIN ON . TO ‘root’@’%’;

安装包执行

出现权限不足请提升到管理员权限

1.13版本后,如果没有配置文件,会在第一次启动后自动创建

默认带有root账户,密码123456,并且自带默认数据源127.0.0.1:3306 root 123456

linux
  1. 下载安装包
  2. wget http://dl.mycat.org.cn/2.0/xxxx
  3. tar -xvf xxx.gz
  4. 修改具体的配置文件,每个版本都有点不一样
  5. cd mycat/bin
  6. ./mycat start
  7. ./mycat status
  8. ./mycat start 启动
  9. ./mycat stop 停止
  10. ./mycat console 前台运行
  11. ./mycat install 添加到系统自动启动(暂未实现)
  12. ./mycat remove 取消随系统自动启动(暂未实现)
  13. ./mycat restart 重启服务
  14. ./mycat pause 暂停
  15. ./mycat status 查看启动状态

windows
  1. 下载安装包
  2. http://dl.mycat.org.cn/2.0/xxxx
  3. tar -xvf xxx.gz
  4. 修改具体的配置文件,每个版本都有点不一样
  5. cd mycat/bin
  6. PowerShell
  7. ./mycat install
  8. ./mycat start
  9. ./mycat status
  10. CMD
  11. mycat install
  12. mycat start
  13. mycat status

查看wrapper.log文件

如果出现以下字样,则说明启动成功

  1. INFO io.mycat.vertx.VertxMycatServer - Mycat Vertx server startup.

如果启动后遇到乱码和时区问题,请注意设置JDK设置
-Dfile.encoding=UTF-8
-Duser.timezone=GMT+8
以及JDBC的连接字符串

  1. jdbc:mysql://localhost:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8

jdbc连接字符串关闭SSL可以提高性能

  1. useSSL=false

可以在java -jar 作为参数设置
也可以wrapper.conf里面设置

  1. wrapper.java.additional.11=-Dfile.encoding=UTF-8
  2. wrapper.java.additional.11=-Duser.timezone=GMT+8

验证设置成功可以在mycat里执行

  1. select now()

连接mycat的客户端参数也要设置时区

  1. serverTimezone=Asia/Shanghai

根据实际需求设置MySQL8设置时区

  1. [mysqld]
  2. default-time_zone='+8:00'

验证在mycat里能查询的值是预期请使用以下方法

  1. select now() from db1.normal limit 1; //normal是单表,而且至少有一条数据
  2. select now() from db1.sharding limit 1; //normal是分片表,而且至少有一条数据

设置输出日志

遇上配置目录不生效的情况,修改jar内的日志配置文件
例子
https://github.com/MyCATApache/Mycat2/issues/621

或者启动的时候添加

  1. -Dlogback.configurationFile=xxxx\logback.xml
  1. java -jar -Dlogback.configurationFile=xxx\logback.xml xxxx\mycat2-1.21-release-jar-with-dependencies-2021-1-12-1.jar

-D参数一定要写在jar路径前面
另外也可以把这个参数添加在wrapper.conf里面

  1. wrapper.java.additional.10=-Dlogback.configurationFile=./conf/logback.xml

Mycat2随着发展使用了不同的日志框架
到1.20为止使用slf4j接口框架,其实现是simplelogger
它的设置参考如下
simplelogger.properties

  1. # SLF4J's SimpleLogger configuration file
  2. # Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
  3. # Default logging detail level for all instances of SimpleLogger.
  4. # Must be one of ("trace", "debug", "info", "warn", or "error").
  5. # If not specified, defaults to "info".
  6. org.slf4j.simpleLogger.defaultLogLevel=info
  7. # Logging detail level for a SimpleLogger instance named "xxxxx".
  8. # Must be one of ("trace", "debug", "info", "warn", or "error").
  9. # If not specified, the default logging detail level is used.
  10. #org.slf4j.simpleLogger.log.xxxxx=
  11. # Set to true if you want the current date and time to be included in output messages.
  12. # Default is false, and will output the number of milliseconds elapsed since startup.
  13. #org.slf4j.simpleLogger.showDateTime=false
  14. # The date and time format to be used in the output messages.
  15. # The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
  16. # If the format is not specified or is invalid, the default format is used.
  17. # The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
  18. #org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
  19. # Set to true if you want to output the current thread name.
  20. # Defaults to true.
  21. #org.slf4j.simpleLogger.showThreadName=true
  22. # Set to true if you want the Logger instance name to be included in output messages.
  23. # Defaults to true.
  24. #org.slf4j.simpleLogger.showLogName=true
  25. # Set to true if you want the last component of the name to be included in output messages.
  26. # Defaults to false.
  27. #org.slf4j.simpleLogger.showShortLogName=false
  1. simplelogger.properties
  2. org.slf4j.simpleLogger.defaultLogLevel=debug
  3. 遇上配置目录不生效的情况,修改jar内的simplelogger.properties文件
  4. java启动参数
  5. -Dorg.slf4j.simpleLogger.defaultLogLevel=debug
  6. 生产环境依据情况设置级别
  7. -Dorg.slf4j.simpleLogger.defaultLogLevel=info
  8. debuginfo级别,性能有两倍差异

在2021-10-15号发布的1.20使用了logback,并添加了kafka连接器(lingkang提交该功能,通过更换maven依赖实现),便于记录并分析生产日志
它的设置参考如下
logback.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
  4. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  5. <pattern>%message %n</pattern>
  6. <charset>utf8</charset>
  7. </encoder>
  8. <topic>applog-test</topic>
  9. <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy"/>
  10. <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy"/>
  11. <producerConfig>bootstrap.servers=192.168.18.43:9092,192.168.18.44:9092</producerConfig>
  12. <producerConfig>linger.ms=1000</producerConfig>
  13. <producerConfig>acks=0</producerConfig>
  14. <producerConfig>client.id=localhost-time-collector-logback-relaxed</producerConfig>
  15. <producerConfig>max.block.ms=0</producerConfig>
  16. </appender>
  17. <logger name="org.apache.kafka.clients" level="error"></logger>
  18. <logger name="org.apache.kafka.clients.NetworkClient" level="error"></logger>
  19. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  20. <encoder>
  21. <pattern>
  22. %d[%level]%c{100}.%M:%L%m%n
  23. </pattern>
  24. </encoder>
  25. </appender>
  26. <root level="debug">
  27. <appender-ref ref="kafkaAppender"/>
  28. <appender-ref ref="CONSOLE" />
  29. </root>
  30. </configuration>

其中bootstrap.servers是kafka服务器的ip

不带kafka的配置如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  4. <encoder>
  5. <pattern>
  6. %d[%level]%c{100}.%M:%L%m%n
  7. </pattern>
  8. </encoder>
  9. </appender>
  10. <root level="debug">
  11. <appender-ref ref="CONSOLE" />
  12. </root>
  13. </configuration>

image.png

注意设置模拟的MySQL版本
server.json

  1. "serverVersion": "5.7.33-mycat-2.0" //与后端,客户端版本对应

2021-8-20号后,默认开启监控端口9066的http服务,该服务供Mycat UI监控,注意该端口不能被占用
监控页https://www.yuque.com/ccazhw/ml3nkf/gwx15x

0000-00-00 00:00:00问题
Caused by: com.mysql.cj.exceptions.DataReadException: Zero date value prohibited
jdbc字符串添加zeroDateTimeBehavior=convertToNull