官网可能受到DNS污染导致无法访问,下载服务失效,导致安装下载不便
可以修改操作系统的host文件添加下面行,绕过DNS解析
210.51.26.184 mycat.org.cn www.mycat.org.cn dl.mycat.org.cn
安装与启动
安装JDK,要求JDK1.8,非1.8环境请自行编译源码
缓存的JAR下载地址
http://dl.mycat.org.cn/2.0/
不提供安装包,只提供核心JAR包,JAR包可以独立运行,安装包是使用Java Service Wrapper做壳的,安装包请自己制作
JAR可以作为Java库引入自己业务项目中使用,Mycat2中的各个组件的设计都是可以独立使用的
jar包执行
java -Dfile.encoding=UTF-8 -DMYCAT_HOME=mycat2\src\main\resources -jar mycat2-0.5-SNAPSHOP.jar
Mycat2\mycat2\src\main\resources 是配置文件所在文件夹
实际上生产的启动命令
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文件夹里面,改名也不可以,改扩展名也不可以
MySQL8安装后请设置XA RECOVER权限
GRANT XA_RECOVER_ADMIN ON . TO ‘root’@’%’;
安装包执行
1.13版本后,如果没有配置文件,会在第一次启动后自动创建
默认带有root账户,密码123456,并且自带默认数据源127.0.0.1:3306 root 123456
linux
下载安装包
wget http://dl.mycat.org.cn/2.0/xxxx
tar -xvf xxx.gz
修改具体的配置文件,每个版本都有点不一样
cd mycat/bin
./mycat start
./mycat status
./mycat start 启动
./mycat stop 停止
./mycat console 前台运行
./mycat install 添加到系统自动启动(暂未实现)
./mycat remove 取消随系统自动启动(暂未实现)
./mycat restart 重启服务
./mycat pause 暂停
./mycat status 查看启动状态
windows
下载安装包
http://dl.mycat.org.cn/2.0/xxxx
tar -xvf xxx.gz
修改具体的配置文件,每个版本都有点不一样
cd mycat/bin
PowerShell
./mycat install
./mycat start
./mycat status
CMD
mycat install
mycat start
mycat status
查看wrapper.log文件
如果出现以下字样,则说明启动成功
INFO io.mycat.vertx.VertxMycatServer - Mycat Vertx server startup.
如果启动后遇到乱码和时区问题,请注意设置JDK设置
-Dfile.encoding=UTF-8
-Duser.timezone=GMT+8
以及JDBC的连接字符串
jdbc:mysql://localhost:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
jdbc连接字符串关闭SSL可以提高性能
useSSL=false
可以在java -jar 作为参数设置
也可以wrapper.conf里面设置
wrapper.java.additional.11=-Dfile.encoding=UTF-8
wrapper.java.additional.11=-Duser.timezone=GMT+8
验证设置成功可以在mycat里执行
select now()
连接mycat的客户端参数也要设置时区
serverTimezone=Asia/Shanghai
根据实际需求设置MySQL8设置时区
[mysqld]
default-time_zone='+8:00'
验证在mycat里能查询的值是预期请使用以下方法
select now() from db1.normal limit 1; //normal是单表,而且至少有一条数据
select now() from db1.sharding limit 1; //normal是分片表,而且至少有一条数据
设置输出日志
遇上配置目录不生效的情况,修改jar内的日志配置文件
例子
https://github.com/MyCATApache/Mycat2/issues/621
或者启动的时候添加
-Dlogback.configurationFile=xxxx\logback.xml
java -jar -Dlogback.configurationFile=xxx\logback.xml xxxx\mycat2-1.21-release-jar-with-dependencies-2021-1-12-1.jar
-D参数一定要写在jar路径前面
另外也可以把这个参数添加在wrapper.conf里面
wrapper.java.additional.10=-Dlogback.configurationFile=./conf/logback.xml
Mycat2随着发展使用了不同的日志框架
到1.20为止使用slf4j接口框架,其实现是simplelogger
它的设置参考如下
simplelogger.properties
# SLF4J's SimpleLogger configuration file
# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
# Default logging detail level for all instances of SimpleLogger.
# Must be one of ("trace", "debug", "info", "warn", or "error").
# If not specified, defaults to "info".
org.slf4j.simpleLogger.defaultLogLevel=info
# Logging detail level for a SimpleLogger instance named "xxxxx".
# Must be one of ("trace", "debug", "info", "warn", or "error").
# If not specified, the default logging detail level is used.
#org.slf4j.simpleLogger.log.xxxxx=
# Set to true if you want the current date and time to be included in output messages.
# Default is false, and will output the number of milliseconds elapsed since startup.
#org.slf4j.simpleLogger.showDateTime=false
# The date and time format to be used in the output messages.
# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
# If the format is not specified or is invalid, the default format is used.
# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
# Set to true if you want to output the current thread name.
# Defaults to true.
#org.slf4j.simpleLogger.showThreadName=true
# Set to true if you want the Logger instance name to be included in output messages.
# Defaults to true.
#org.slf4j.simpleLogger.showLogName=true
# Set to true if you want the last component of the name to be included in output messages.
# Defaults to false.
#org.slf4j.simpleLogger.showShortLogName=false
simplelogger.properties
org.slf4j.simpleLogger.defaultLogLevel=debug
遇上配置目录不生效的情况,修改jar内的simplelogger.properties文件
java启动参数
-Dorg.slf4j.simpleLogger.defaultLogLevel=debug
生产环境依据情况设置级别
-Dorg.slf4j.simpleLogger.defaultLogLevel=info
debug与info级别,性能有两倍差异
在2021-10-15号发布的1.20使用了logback,并添加了kafka连接器(lingkang提交该功能,通过更换maven依赖实现),便于记录并分析生产日志
它的设置参考如下
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%message %n</pattern>
<charset>utf8</charset>
</encoder>
<topic>applog-test</topic>
<keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy"/>
<deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy"/>
<producerConfig>bootstrap.servers=192.168.18.43:9092,192.168.18.44:9092</producerConfig>
<producerConfig>linger.ms=1000</producerConfig>
<producerConfig>acks=0</producerConfig>
<producerConfig>client.id=localhost-time-collector-logback-relaxed</producerConfig>
<producerConfig>max.block.ms=0</producerConfig>
</appender>
<logger name="org.apache.kafka.clients" level="error"></logger>
<logger name="org.apache.kafka.clients.NetworkClient" level="error"></logger>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d[%level]%c{100}.%M:%L%m%n
</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="kafkaAppender"/>
<appender-ref ref="CONSOLE" />
</root>
</configuration>
其中bootstrap.servers是kafka服务器的ip
不带kafka的配置如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d[%level]%c{100}.%M:%L%m%n
</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
注意设置模拟的MySQL版本
server.json
"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