利用mycat实现基于mysql5.5主从复制的读写分离 整体步骤: 一、配置mysql主从环境 二、mycat的安装及部署

1.准备好两台服务器,一台作为主数据库服务器,一台作为从服务器,并安装好mysql数据库,此处略
2.配置好主从同步
3.下载JDK配置mycat依赖的JAVA环境,mycat采用java语言开发运行依赖jre
4.配置mycat的相关文件
5.测试

一、配置mysql主从环境

MYSQL主从同步的作用
(1) 数据分布
(2) 负载平衡(load balancing)
(3) 备份
(4) 高可用性(high availability)和容错
MYSQL主从同步的原理
关于MYSQL的主从同步,最主要的是要了解MYSQL的主从同步是如何工作的也即主从同步的原理,通过下图能很明白的指导其工作的过程:
利用mycat实现基于mysql5.5主从复制的读写分离
整体步骤:
一、配置mysql主从环境
二、mycat的安装及部署

大致描述一下过程:从服务器的IO线程从主服务器获取二进制日志,并在本地保存为中继日志,然后通过SQL线程来在从上执行中继日志中的内容,从而使从库和主库保持一致。主从同步的详细过程如下:
1. 主服务器验证连接。
2. 主服务器为从服务器开启一个线程。
3. 从服务器将主服务器日志的偏移位告诉主服务器。
4. 主服务器检查该值是否小于当前二进制日志偏移位。
5. 如果小于,则通知从服务器来取数据。
6. 从服务器持续从主服务器取数据,直至取完,这时,从服务器线程进入睡眠,主服务器线程同时进入睡眠。
7. 当主服务器有更新时,主服务器线程被激活,并将二进制日志推送给从服务器,并通知从服务器线程进入工作状态。
8. 从服务器SQL线程执行二进制日志,随后进入睡眠状态。
 
MYSQL主从同步的搭建实战
主从同步的搭建是一项比较细的技术活,前期做好了一些事情会让你在以后的工作中减少很多工作,搭建的时候需要注意一些问题,一会搭建的时候会一边搭建一边介绍需要注意的问题,让初学者能在刚开始的时候就有效的规避掉一些潜在的问题(MYSQL安装这里不做介绍):
主从同步环境介绍
操作系统环境:Centos 6.5 64 bit
MYSQL版本:MYSQL 5.5.48
主服务器的IP:192.168.8.60
从服务器的IP:192.168.11.145


环境拓扑

利用mycat实现基于mysql5.5主从复制的读写分离
整体步骤:
一、配置mysql主从环境
二、mycat的安装及部署

1.将服务器都安装ntp服务,保持主从数据库时间一致


8.102为时间服务器,手动同步一次
# yum install -y ntp
# ntpdate -u 192.168.8.102

2.备份8.60主数据库

# service mysqld stop
# cp -r /data/mydata/TD_OA /home
将数据库打包下载到本地传送到辅助服务器上
# chown -R mysql.mysql /data/

3.在主服务器上建立同步帐号

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.11.145' IDENTIFIED BY 'pass';
mysql> FLUSH PRIVILEGES;
注意:大家在设置权限的时候不要将密码设置过于简单。

利用mycat实现基于mysql5.5主从复制的读写分离
整体步骤:
一、配置mysql主从环境
二、mycat的安装及部署

主服务器my.cnf配置参考:

# cat /etc/my.cnf | grep "^[^#]"
[client]
port		= 3306
socket		= /tmp/mysql.sock
[mysqld]
port		= 3306
default-storage-engine=MyISAM
max_connections=1500
socket		= /tmp/mysql.sock
skip-external-locking
skip-innodb
key_buffer_size = 4096M
max_allowed_packet = 64M
table_open_cache = 2400
open_files_limit=65535
tmp_table_size=256M
sort_buffer_size = 16M
read_buffer_size = 16M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 128M
thread_cache_size = 256
query_cache_type=0
query_cache_size= 512M
innodb_buffer_pool_size = 1024M
skip-name-resolve
wait_timeout=300
thread_concurrency = 8
innodb_buffer_pool_instances = 35
innodb_file_per_table = 1
datadir = /data/mydata
log-bin=/data/binlogs/mysql-bin
binlog-do-db=TD_OA
binlog-ignore-db = mysql
expire_logs_day=30
max_binlog_size = 200M
slow_query_log=ON
slow-query-log-file=/data/binlogs/slow_query.log
long_query_time=2
log_bin_trust_function_creators=1
binlog_format=mixed
server-id	= 60
[mysqldump]
quick
max_allowed_packet = 64M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 1024M
sort_buffer_size = 512M
read_buffer = 256M
write_buffer = 256M
[mysqlhotcopy]
interactive-timeout

4、从服务器设置:


# mkdir /data/relaylog/
# chown -R mysql.mysql /data/relaylog
# vim /etc/my.cnf

server-id = 145 #配置serverid
relay-log = /data/relaylog/relay-bin#启用中继日志
replicate_wild_do_table=TD_OA.%#需要同步的数据库表
replicate_wild_ignore_table=mysql.%#忽略的数据库表
skip-slave-start#不自动启动复制

从服务器配置参考:

# cat /etc/my.cnf | grep "^[^#]"
[client]
port		= 3306
socket		= /tmp/mysql.sock
[mysqld]
port		= 3306
socket		= /tmp/mysql.sock
default-storage-engine=MyISAM
max_connections=1000
open_files_limit=65535
innodb_file_per_table = 1
datadir = /data/mydata
skip-external-locking
skip-innodb
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 4
log-bin=/data/binlogs/mysql-bin
relay-log = /data/relaylog/relay-bin
log_bin_trust_function_creators=1
binlog_format=mixed
server-id	= 145
replicate_wild_do_table=TD_OA.%
replicate_wild_ignore_table=mysql.%
skip-slave-start
read-only=ON
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout


注意:
1)  server-id这一项需要认真检查,一定不能和主服务器冲突了,不然到时候会出现莫民其妙的问题,因为同步的时候会会根据server-id做判断,如果server-id一样就不进行同步了,不然可能会导致死循环(主主同步或者环状同步的时候)。
2)   有的人会感觉奇怪我这里为什么要使用replicate-wild-ignore-table参数,而不是用replicate-do-db或者replicate-ignore-db来过滤需要同步的数据库和不需要同步的数据库。这里有几个原因:
A. replicate-wild-ignore-table参数能同步所有跨数据库的更新,比如replicate-do-db或者replicate-ignore-db不会同步类似
use mysql;
UPDATE test.aaa SET amount=amount+10;
B. replicate-wild-ignore-table=mysql.%在以后需要添加同步数据库的时候能方便添加而不需要重新启动从服务器的数据库。因为以后很可能需要同步其他的数据库。
如设置 replicate_do_db=test
use mysql;
update test.table1 set ......第二句将不会被执行
如设置 replicate_ignore_db=mysql
use mysql;
update test.table1 set ......
第二句会被忽略执行原因是设置replicate_do_db或replicate_ignore_db后,MySQL执行sql前检查的是当前默认数据库,所以跨库更新语句被忽略。
可以使用replicate_wild_do_table和replicate_wild_ignore_table来代替

replicate_wild_do_table=test.%

replicate_wild_ignore_table=mysql.%
这样就可以避免出现上述问题了
3) auto_increment_increment和auto_increment_offset参数,这 两个参数一般用在主主同步中,用来错开自增值, 防止键值冲突。
4)  --slave-skip-errors参数,不要胡乱使用这些跳过错误的参数,除非你非常确定你在做什么。当你使用这些参数时候,MYSQL会忽略那些错误,这样会导致你的主从服务器数据不一致。


MySQL主从复制几个重要的启动选项
  (1)  log-slave-updates
  log-slave-updates这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的,但是,如果这个从服务器B是服务器A的从服务器,同时还作为服务器C的主服务器,那么就需要开发这个选项,这样它的从服务器C才能获得它的二进制日志进行同步操作
  (2)  master-connect-retry
  master-connect-retry这个参数是用来设置在和主服务器连接丢失的时候,重试的时间间隔,默认是60秒
  (3)  read-only
  read-only是用来限制普通用户对从数据库的更新操作,以确保从数据库的安全性,不过如果是超级用户依然可以对从数据库进行更新操作
  (4)  slave-skip-errors
  在复制过程中,由于各种的原因,从服务器可能会遇到执行BINLOG中的SQL出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理。
  Slave-skip-errors的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句。
  --slave-skip-errors=[err1,err2,…….|ALL]
  但必须注意的是,启动这个参数,如果处理不当,很可能造成主从数据库的数据不同步,在应用中需要根据实际情况,如果对数据完整性要求不是很严格,那么这个选项确实可以减轻维护的成本

重启服务使之生效
# service mysqld restart

5.主服务器状态

在主服务器执行查看状态,记录binlog日志的文件名及位置参数
mysql> show master status;

从服务器配置

mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.60',MASTER_USER='repluser',MASTER_PASSWORD='replpass2014',MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=691;
mysql> START SLAVE;


mysql> show slave statusG
*************************** 1. row ***************************
       Slave_IO_State: 
 Master_Host: 192.168.8.60
 Master_User: repluser
 Master_Port: 3306
Connect_Retry: 60
      Master_Log_File: mysql-bin.000006
  Read_Master_Log_Pos: 691
       Relay_Log_File: relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000006
     Slave_IO_Running: No
    Slave_SQL_Running: No
      Replicate_Do_DB: 
  Replicate_Ignore_DB: 
   Replicate_Do_Table: 
Replicate_Ignore_Table: 
Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
  Last_Errno: 0
  Last_Error: 
Skip_Counter: 0
  Exec_Master_Log_Pos: 691
      Relay_Log_Space: 107
      Until_Condition: None
       Until_Log_File: 
Until_Log_Pos: 0
   Master_SSL_Allowed: No
   Master_SSL_CA_File: 
   Master_SSL_CA_Path: 
      Master_SSL_Cert: 
    Master_SSL_Cipher: 
       Master_SSL_Key: 
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
       Last_SQL_Errno: 0
       Last_SQL_Error: 
Replicate_Ignore_Server_Ids: 
     Master_Server_Id: 6




利用mycat实现基于mysql5.5主从复制的读写分离
整体步骤:
一、配置mysql主从环境
二、mycat的安装及部署
遇到这样的错误如:“Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'"等或由于清数据导致主从库不同步了


解决办法如下:
先进入slave中执行:"slave stop;"来停止从库同步;
再去master中执行:"flush logs;"来清空日志;
然后在master中执行:"show master status;"查看下主库的状态,主要是日志的文件和position;
然后回到slave中,执行:"CHANGE MASTER TO MASTER_LOG_FILE='log-bin.000006',MASTER_LOG_POS=107;",文件和位置对应master中的;
最后在slave中执行:"slave start;"来启动同步。

状态OK:
mysql> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.8.60
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 6022
               Relay_Log_File: relay-bin.000005
                Relay_Log_Pos: 3733
        Relay_Master_Log_File: mysql-bin.000007
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: TD_OA.%
  Replicate_Wild_Ignore_Table: mysql.%
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 6022
              Relay_Log_Space: 3883
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 60


如果备份的时候停止了从服务器,需要重新启动从服务器的复制
mysql> slave start;

二、mycat的安装及部署

1.下载mycat1.4版本

https://github.com/MyCATApache/Mycat-download
# tar xf Mycat-server-1.4-release-20151019230038-linux.tar.gz
# mv mycat /usr/local/

2.部署jdk环境

检查现有版本JDK
# java -version

查找java相关文件并卸载
# rpm -qa | grep java
tzdata-java-2013g-1.el6.noarch
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
libvirt-java-0.4.9-1.el6.noarch
libvirt-java-devel-0.4.9-1.el6.noarch
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64


卸载openjdk1.7
# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
 rpm -qa | grep java
tzdata-java-2013g-1.el6.noarch
libvirt-java-0.4.9-1.el6.noarch
libvirt-java-devel-0.4.9-1.el6.noarch
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
# java -version
java version "1.6.0_28"
OpenJDK Runtime Environment (IcedTea6 1.13.0pre) (rhel-1.66.1.13.0.el6-x86_64)
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)
卸载openjdk1.6
# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
# java -version
-bash: /usr/bin/java: No such file or directory


安装jdk7
# rpm -ivh jdk-7u79-linux-x64.rpm

将java命令加入到环境变量中
vim /etc/profile
//添加内容
JAVA_HOME=/usr/java/jdk1.7.0_79
JRE_HOME=/usr/java/jdk1.7.0_79/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export    JAVA_HOME JRE_HOME PATH CLASSPATH

//使配置立即生效
# source /etc/profile
//查看PATH
# echo $PATH
/usr/local/mysql/bin:/usr/lib64/qt-3.3/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/java/jdk1.7.0_79/bin:/usr/java/jdk1.7.0_79/jre/bin



3、配置mycat中的jdk文件路径

# cd /usr/local/mycat/conf/
# vim wrapper.conf 
# Java Application
wrapper.java.command=/usr/java/jdk1.7.0_79/bin/java

4、读写分离配置(重点配置):

# cp schema.xml schema.xml.bak
# vim schema.xml

<schema name="TD_OA" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
<dataNode name="dn1" dataHost="localhost1" database="TD_OA" />
<dataNode name="dn2" dataHost="localhost1" database="TD_OA" />
<dataNode name="dn3" dataHost="localhost1" database="TD_OA" />
<!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
 <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" /> 
<dataNode       name="jdbc_dn2" dataHost="jdbchost" database="db2" /> 
<dataNode name="jdbc_dn3"       dataHost="jdbchost" database="db3" /> -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.8.60:3306" user="mycat"
password="pass">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.11.145:3306" user="mycat_r" password="pass" />
</writeHost>
</dataHost>

利用mycat实现基于mysql5.5主从复制的读写分离
整体步骤:
一、配置mysql主从环境
二、mycat的安装及部署

利用mycat实现基于mysql5.5主从复制的读写分离
整体步骤:
一、配置mysql主从环境
二、mycat的安装及部署

(1)<schema name="TD_OA" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
这里的TD_OA就是我们所宣称的数据库名称,必须和server.xml中的用户指定的数据库名称一致。添加一个dataNode="dn1",是指定了我们这个库只有在dn1上,没有分库。

(2)<dataNode name="dn1" dataHost="localhost1" database="TD_OA" />
这里只需要改database的名字,TD_OA就是你真是的数据库上的数据库名,可根据自己的数据库名称修改。

(3) <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

需要配置的位置:
balance="1" writeType="0" switchType="1"

balance
1、balance=0 不开启读写分离机制,所有读操作都发送到当前可用的writehostle .

2、balance=1 全部的readhost与stand by writeHost 参与select语句的负载均衡。简单的说,双主双从模式(M1àS1,M2àS2,并且M1和M2互为主备),正常情况下,M1,S1,S2都参与select语句的复杂均衡。

3、balance=2 所有读操作都随机的在readhost和writehost上分发

writeType
负载均衡类型,目前的取值有3种:
1、writeType="0", 所有写操作发送到配置的第一个writeHost。
2、writeType="1",所有写操作都随机的发送到配置的writeHost。
3、writeType="2",不执行写操作。

switchType
1、switchType=-1 表示不自动切换
2、switchType=1 默认值,自动切换
3、switchType=2 基于MySQL 主从同步的状态决定是否切换
(4)<writeHost host="hostM1" url="192.168.8.60:3306" user="mycat" password="pass">
<!– can have multi read hosts –>
<readHost host="hostS1" url="192.168.11.145:3306" user="mycat_r" password="pass" />

注意:
这里配置的是读写服务器的IP地址和端口访问,访问的用户名和密码;而且一定要先在客户端测试OK了以后在进行配置。

5、将mycat命令加入到配置文件中

# vim /etc/profile
export PATH=/usr/local/mycat/bin:$PATH
# source /etc/profile

6、创建管理用户

主库上对mycat用户授权如下:

用户:mycat 密码:pass 端口:3306

权限:insert,delete,update,select

命令:grant insert,delete,update,select on TD_OA.* to mycat@'192.168.8.%' identified by 'pass';
flush privileges;

从库上mycat_r用户授权如下:
用户:mycat_r 密码:pass 端口:3306
权限: select

grant select on TD_OA.* to mycat_r@'192.168.8.%' identified by 'pass';
flush privileges;

提示:由于主库和从库是同步mysql数据库复制的,所以从库上的mycat用户会自动和主库的一致,即无法实现只读select的授权
revoke insert,update,delete on TD_OA.* from mycat@'192.168.8.%'; #<=回收insert update delete 权限

修改mycat配置文件
vim /usr/local/mycat/conf/server.xml
<user name="mycat">
<property name="password">pass</property>
<property name="schemas">TD_OA</property>
</user>


<user name="mycat_r">
<property name="password">pass</property>
<property name="schemas">TD_OA</property>
<property name="readOnly">true</property>
</user>


注意:

①这里配置的是可以连接主库的两个用户

用户:mycat 密码:pass 给予此用户TD_OA数据库增删改查的权限。

用户:mycat_r 密码:pass 给予此用户TD_OA数据库读的权限。

②这里的TD_OA,不一定是你数据库上的真实库名,可以任意指定,只要接下来和schema.xml的配置文件的库名统一即可。

7、启动mycat

# mycat console #<=通过console命令启动mycat,这样方便提取信息
Running Mycat-server...
wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
wrapper  | JVM exited while loading the application.
jvm 1    | Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: oawebserver002: oawebserver002: Temporary failure in name resolution
解决:编辑Hosts文件将主机名和IP绑定
# vim /etc/hosts
192.168.8.60 oawebserver002
# mycat restart使配置生效


在客户端连接mysql主库服务器:

# yum install -y mysql
# mysql -umycat -ppass -h192.168.8.60 -P8066

8、管理命令与监控



mycat自身有类似其他数据库的管理监控方式,可通过mysql命令行,登陆端口9066执行相应的SQL操作,也可通过jdbc的方式进行远程连接管理。

登录:目前mycat有两个端口,8066数据端口,9066管理端口。命令行登录时通过9066管理端口来执行:

mysql -umycat -ppass -h127.0.0.1 -P9066 -DTD_OA

选项:

-h 后面接主机

-u mycat server.xml配置的逻辑库用户

-p mycat server.xml配置的逻辑库密码

-P 后面接的端口9066,注意P大写


-D Mycat server.xml中配置的逻辑库

1、查看所有的命令,如下:

mysql> show @@help;
+--------------------------------------+-----------------------------------+
| STATEMENT                            | DESCRIPTION                       |
+--------------------------------------+-----------------------------------+
| clear @@slow where datanode = ?      | Clear slow sql by datanode        |
| clear @@slow where schema = ?        | Clear slow sql by schema          |
| kill @@connection id1,id2,...        | Kill the specified connections    |
| offline                              | Change MyCat status to OFF        |
| online                               | Change MyCat status to ON         |
| reload @@config                      | Reload basic config from file     |
| reload @@config_all                  | Reload all config from file       |
| reload @@route                       | Reload route config from file     |
| reload @@user                        | Reload user config from file      |
| rollback @@config                    | Rollback all config from memory   |
| rollback @@route                     | Rollback route config from memory |
| rollback @@user                      | Rollback user config from memory  |
| show @@backend                       | Report backend connection status  |
| show @@cache                         | Report system cache usage         |
| show @@command                       | Report commands status            |
| show @@connection                    | Report connection status          |
| show @@connection.sql                | Report connection sql             |
| show @@database                      | Report databases                  |
| show @@datanode                      | Report dataNodes                  |
| show @@datanode where schema = ?     | Report dataNodes                  |
| show @@datasource                    | Report dataSources                |
| show @@datasource where dataNode = ? | Report dataSources                |
| show @@heartbeat                     | Report heartbeat status           |
| show @@parser                        | Report parser status              |
| show @@processor                     | Report processor status           |
| show @@router                        | Report router status              |
| show @@server                        | Report server status              |
| show @@session                       | Report front session details      |
| show @@slow where datanode = ?       | Report datanode slow sql          |
| show @@slow where schema = ?         | Report schema slow sql            |
| show @@sql where id = ?              | Report specify SQL                |
| show @@sql.detail where id = ?       | Report execute detail status      |
| show @@sql.execute                   | Report execute status             |
| show @@sql.slow                      | Report slow SQL                   |
| show @@threadpool                    | Report threadPool status          |
| show @@time.current                  | Report current timestamp          |
| show @@time.startup                  | Report startup timestamp          |
| show @@version                       | Report Mycat Server version       |
| stop @@heartbeat name:time           | Pause dataNode heartbeat          |
| switch @@datasource name:index       | Switch dataSource                 |
+--------------------------------------+-----------------------------------+
40 rows in set (0.01 sec)

2、显示mycat数据库的列表,对应的在scehma.xml配置的逻辑库
mysql> show @@databases;
+----------+
| DATABASE |
+----------+
| TD_OA    |
+----------+
1 row in set (0.00 sec)

3、显示mycat数据节点的列表,对应的是scehma.xml配置文件的dataNode节点
mysql> show @@datanode;
+------+------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| NAME | DATHOST          | INDEX | TYPE  | ACTIVE | IDLE | SIZE | EXECUTE | TOTAL_TIME | MAX_TIME | MAX_SQL | RECOVERY_TIME |
+------+------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| dn1  | localhost1/TD_OA |     0 | mysql |      0 |   10 | 1000 |      10 |          0 |        0 |       0 |            -1 |
| dn2  | localhost1/TD_OA |     0 | mysql |      0 |   10 | 1000 |      10 |          0 |        0 |       0 |            -1 |
| dn3  | localhost1/TD_OA |     0 | mysql |      0 |   10 | 1000 |      10 |          0 |        0 |       0 |            -1 |
+------+------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+

其中,NAME表示datanode的名称;dataHost 对应的是dataHost属性的值,数据主机的名称,ACTIVE表示活跃的连接数,IDIE表示闲置的连接数,SIZE对应的是总连接的数量。


mysql> show @@heartbeat;
+--------+-------+----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| NAME   | TYPE  | HOST           | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME    | STOP  |
+--------+-------+----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| hostM1 | mysql | 192.168.8.60   | 3306 |       1 |     0 | idle   |       0 | 0,0,0        | 2016-04-22 19:19:05 | false |
| hostS1 | mysql | 192.168.11.145 | 3306 |       1 |     0 | idle   |       0 | 0,0,0        | 2016-04-22 19:19:05 | false |
+--------+-------+----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+

RS_CODE状态为1,正常状态


4、获取当前mycat的版本
mysql> show @@version;


5、显示mycat前端连接状态
mysql> show @@connection;


6、显示mycat后端连接状态
mysql> show @@backend;


7、显示数据源
mysql> show @@datasource;

特别说明:
reload @@config,这个命令在执行的时候,mycat服务不可用,防止提交的事物出错。