在《Mycat之——搭建Mycat+Zookeeper+HAProxy+Keepalived+MySQL高可用架構》一文中,我們搭建了Mycat的高可用環境,在高可用環境中,實現了HAProxy的高可用、Mycat的高可用、MySQL的高可用、Zookeeper的高可用和Keepalived的高可用。
我們就需要實現Mycat的管理和監控了,不然出了問題,我們是沒辦法及時發現的。
1.Mycat管理端口的配置
我們可以通過mysql命令登錄Mycat的管理端口,Mycat的管理端口是在server.xml文件中進行配置的,如下所示。
<property name="managerPort">3308</property>
上述配置將Mycat的管理端口配置爲3308。
2.登錄Mycat管理端口
我們可以使用如下方式登錄Mycat的管理端口
[root@binghe151 ~]# mysql -umycat -pmycat -h192.168.175.151 -P3308 --default-auth=mysql_native_password
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.29-mycat-1.6.7.5-test-20200228205020 MyCat Server (monitor)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
3.查看Mycat支持的所有管理命令
查看Mycat支持的所有管理命令,如下所示。
mysql> show @@help;
+--------------------------------------------------------------+--------------------------------------------+
| STATEMENT | DESCRIPTION |
+--------------------------------------------------------------+--------------------------------------------+
| show @@time.current | Report current timestamp |
| show @@time.startup | Report startup timestamp |
| show @@version | Report Mycat Server version |
| show @@server | Report server status |
| show @@threadpool | Report threadPool status |
| 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 @@datasource.synstatus | Report datasource data synchronous |
| show @@datasource.syndetail where name=? | Report datasource data synchronous detail |
| show @@datasource.cluster | Report datasource galary cluster variables |
| show @@processor | Report processor status |
| show @@command | Report commands status |
| show @@connection | Report connection status |
| show @@cache | Report system cache usage |
| show @@backend | Report backend connection status |
| show @@session | Report front session details |
| show @@connection.sql | Report connection sql |
| show @@sql.execute | Report execute status |
| show @@sql.detail where id = ? | Report execute detail status |
| show @@sql | Report SQL list |
| show @@sql.high | Report Hight Frequency SQL |
| show @@sql.slow | Report slow SQL |
| show @@sql.resultset | Report BIG RESULTSET SQL |
| show @@sql.sum | Report User RW Stat |
| show @@sql.sum.user | Report User RW Stat |
| show @@sql.sum.table | Report Table RW Stat |
| show @@parser | Report parser status |
| show @@router | Report router status |
| show @@heartbeat | Report heartbeat status |
| show @@heartbeat.detail where name=? | Report heartbeat current detail |
| show @@slow where schema = ? | Report schema slow sql |
| show @@slow where datanode = ? | Report datanode slow sql |
| show @@sysparam | Report system param |
| show @@syslog limit=? | Report system mycat.log |
| show @@white | show mycat white host |
| show @@white.set=?,? | set mycat white host,[ip,user] |
| show @@directmemory=1 or 2 | show mycat direct memory usage |
| show @@check_global -SCHEMA= ? -TABLE=? -retry=? -interval=? | check mycat global table consistency |
| switch @@datasource name:index | Switch dataSource |
| kill @@connection id1,id2,... | Kill the specified connections |
| stop @@heartbeat name:time | Pause dataNode heartbeat |
| 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 |
| reload @@sqlslow= | Set Slow SQL Time(ms) |
| reload @@user_stat | Reset show @@sql @@sql.sum @@sql.slow |
| rollback @@config | Rollback all config from memory |
| rollback @@route | Rollback route config from memory |
| rollback @@user | Rollback user config from memory |
| reload @@sqlstat=open | Open real-time sql stat analyzer |
| reload @@sqlstat=close | Close real-time sql stat analyzer |
| offline | Change MyCat status to OFF |
| online | Change MyCat status to ON |
| clear @@slow where schema = ? | Clear slow sql by schema |
| clear @@slow where datanode = ? | Clear slow sql by datanode |
+--------------------------------------------------------------+--------------------------------------------+
59 rows in set (0.00 sec)
這裏,列出了59個Mycat的管理命令。
4.管理Mycat
(1)重新加載配置文件
之前,我們修改Mycat的配置文件後,都是重啓Mycat使配置生效的。修改了配置文件後,其實我們可以通過reload命令來重新加載配置文件。例如,我們修改了配置文件之後,可以使用如下命令使配置生效。
mysql> reload @@config;
Query OK, 1 row affected (2.33 sec)
Reload config success
需要注意的是:執行上述命令期間,Mycat是不可使用的,並且使用reload @@config只能重新加載Mycat常用的配置文件,如果修改了一些特殊的配置文件,則還是需要重啓Mycat。
(2)查看邏輯庫
可以使用如下命令查看Mycat的邏輯庫,如下所示。
mysql> show @@databases;
+----------+
| DATABASE |
+----------+
| shop |
+----------+
1 row in set (0.04 sec)
(3)查看數據節點
如果想查看邏輯庫對應的物理數據庫所在的數據節點,則可以使用如下命令進行查看
mysql> show @@datanode;
+-----------+-----------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| NAME | DATHOST | INDEX | TYPE | ACTIVE | IDLE | SIZE | EXECUTE | TOTAL_TIME | MAX_TIME | MAX_SQL | RECOVERY_TIME |
+-----------+-----------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| custdb | binghe154/customer_db | 0 | mysql | 0 | 0 | 1000 | 1 | 0 | 0 | 0 | -1 |
| mycat | binghe151/mycat | 0 | mysql | 0 | 0 | 1000 | 1 | 0 | 0 | 0 | -1 |
| ordb | binghe152/order_db | 0 | mysql | 0 | 0 | 1000 | 1 | 0 | 0 | 0 | -1 |
| orderdb01 | binghe152/orderdb01 | 0 | mysql | 0 | 0 | 1000 | 0 | 0 | 0 | 0 | -1 |
| orderdb02 | binghe152/orderdb02 | 0 | mysql | 0 | 0 | 1000 | 0 | 0 | 0 | 0 | -1 |
| orderdb03 | binghe153/orderdb03 | 0 | mysql | 0 | 0 | 1000 | 0 | 0 | 0 | 0 | -1 |
| orderdb04 | binghe153/orderdb04 | 0 | mysql | 0 | 0 | 1000 | 1 | 0 | 0 | 0 | -1 |
| prodb | binghe153/product_db | 0 | mysql | 0 | 0 | 1000 | 0 | 0 | 0 | 0 | -1 |
+-----------+-----------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
8 rows in set (0.17 sec)
在Mycat中,支持使用\G來格式化結果輸出,如下所示。
mysql> show @@datanode \G
*************************** 1. row ***************************
NAME: custdb
DATHOST: binghe154/customer_db
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 1
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 2. row ***************************
NAME: mycat
DATHOST: binghe151/mycat
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 1
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 3. row ***************************
NAME: ordb
DATHOST: binghe152/order_db
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 1
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 4. row ***************************
NAME: orderdb01
DATHOST: binghe152/orderdb01
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 0
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 5. row ***************************
NAME: orderdb02
DATHOST: binghe152/orderdb02
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 0
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 6. row ***************************
NAME: orderdb03
DATHOST: binghe153/orderdb03
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 0
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 7. row ***************************
NAME: orderdb04
DATHOST: binghe153/orderdb04
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 1
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 8. row ***************************
NAME: prodb
DATHOST: binghe153/product_db
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 0
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
8 rows in set (0.00 sec)
查看shop邏輯庫對應的物理數據庫所在的數據節點,如下所示。
mysql> show @@datanode where schema=shop \G
*************************** 1. row ***************************
NAME: custdb
DATHOST: binghe154/customer_db
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 1
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 2. row ***************************
NAME: ordb
DATHOST: binghe152/order_db
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 1
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 3. row ***************************
NAME: orderdb01
DATHOST: binghe152/orderdb01
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 0
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 4. row ***************************
NAME: orderdb02
DATHOST: binghe152/orderdb02
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 0
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 5. row ***************************
NAME: orderdb03
DATHOST: binghe153/orderdb03
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 0
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 6. row ***************************
NAME: orderdb04
DATHOST: binghe153/orderdb04
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 1
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
*************************** 7. row ***************************
NAME: prodb
DATHOST: binghe153/product_db
INDEX: 0
TYPE: mysql
ACTIVE: 0
IDLE: 0
SIZE: 1000
EXECUTE: 0
TOTAL_TIME: 0
MAX_TIME: 0
MAX_SQL: 0
RECOVERY_TIME: -1
7 rows in set (0.00 sec)
(4)查看哪些數據節點可用
可以使用如下命令查看Mycat中哪些數據節點是可用的。
mysql> show @@heartbeat \G
*************************** 1. row ***************************
NAME: binghe53
TYPE: mysql
HOST: 192.168.175.153
PORT: 3306
RS_CODE: 1
RETRY: 0
STATUS: idle
TIMEOUT: 30000
EXECUTE_TIME: 3,11,5
LAST_ACTIVE_TIME: 2020-03-16 14:50:26
STOP: false
*************************** 2. row ***************************
NAME: binghe54
TYPE: mysql
HOST: 192.168.175.154
PORT: 3306
RS_CODE: 1
RETRY: 0
STATUS: idle
TIMEOUT: 30000
EXECUTE_TIME: 3,11,5
LAST_ACTIVE_TIME: 2020-03-16 14:50:26
STOP: false
*************************** 3. row ***************************
NAME: binghe51
TYPE: mysql
HOST: 192.168.175.151
PORT: 3306
RS_CODE: 1
RETRY: 0
STATUS: idle
TIMEOUT: 30000
EXECUTE_TIME: 2,11,5
LAST_ACTIVE_TIME: 2020-03-16 14:50:26
STOP: false
*************************** 4. row ***************************
NAME: binghe52
TYPE: mysql
HOST: 192.168.175.152
PORT: 3306
RS_CODE: 1
RETRY: 0
STATUS: idle
TIMEOUT: 30000
EXECUTE_TIME: 2,11,5
LAST_ACTIVE_TIME: 2020-03-16 14:50:26
STOP: false
4 rows in set (0.00 sec)
其中,每行輸出結果的 RS_CODE值爲1代表連接後端的MySQL正常;爲-1代表連接出錯;爲2代表連接超時;初始化的狀態爲0。我們可以根據RS_CODE值來判斷後端的MySQL節點是否正常。
(5)查看上層應用連接Mycat的所有連接信息
查看上層應用連接Mycat的所有連接信息,如下所示。
mysql> show @@connection \G
*************************** 1. row ***************************
PROCESSOR: Processor0
ID: 2
HOST: 192.168.175.151
PORT: 3308
LOCAL_PORT: 47682
USER: mycat
SCHEMA: NULL
CHARSET: utf8:45
NET_IN: 343
NET_OUT: 8158
ALIVE_TIME(S): 2344
RECV_BUFFER: 4096
SEND_QUEUE: 0
txlevel:
autocommit:
1 row in set (0.00 sec)
我們可以通過kill @@connection ID的方式來殺死連接Mycat的進程,例如,我們需要殺死ID爲4的連接,可以使用如下命令。
mysql> kill @@ connection 4;
(6)查看Mycat連接後端數據庫的信息
可以使用如下命令來查看Mycat連接後端數據庫的信息。
mysql> show @@backend \G
*************************** 1. row ***************************
processor: Processor0
id: 1238
mysqlId: 626
host: 192.168.175.154
port: 3306
l_port: 36852
net_in: 78
net_out: 0
life: 1
closed: false
borrowed: false
SEND_QUEUE: 0
schema: customer_db
charset: utf8:45
txlevel: 2
autocommit: true
*************************** 2. row ***************************
processor: Processor0
id: 1240
mysqlId: 626
host: 192.168.175.153
port: 3306
l_port: 40001
net_in: 78
net_out: 0
life: 1
closed: false
borrowed: false
SEND_QUEUE: 0
schema: orderdb04
charset: utf8:45
txlevel: 2
autocommit: true
*************************** 3. row ***************************
processor: Processor1
id: 1237
mysqlId: 688
host: 192.168.175.151
port: 3306
l_port: 35146
net_in: 78
net_out: 0
life: 1
closed: false
borrowed: false
SEND_QUEUE: 0
schema: mycat
charset: utf8:45
txlevel: 2
autocommit: true
*************************** 4. row ***************************
processor: Processor1
id: 1239
mysqlId: 2495
host: 192.168.175.152
port: 3306
l_port: 56900
net_in: 78
net_out: 0
life: 1
closed: false
borrowed: false
SEND_QUEUE: 0
schema: order_db
charset: utf8:45
txlevel: 2
autocommit: true
4 rows in set (0.13 sec)
(7)查看Mycat中的緩存狀態
mysql> show @@cache \G
*************************** 1. row ***************************
CACHE: ER_SQL2PARENTID
MAX: 1000
CUR: 0
ACCESS: 0
HIT: 0
PUT: 0
LAST_ACCESS: 0
LAST_PUT: 0
*************************** 2. row ***************************
CACHE: SQLRouteCache
MAX: 10000
CUR: 0
ACCESS: 0
HIT: 0
PUT: 0
LAST_ACCESS: 0
LAST_PUT: 0
*************************** 3. row ***************************
CACHE: TableID2DataNodeCache.TESTDB_ORDERS
MAX: 50000
CUR: 0
ACCESS: 0
HIT: 0
PUT: 0
LAST_ACCESS: 0
LAST_PUT: 0
3 rows in set (0.00 sec)
其中,各緩存的類型說明如下所示。
- ER_SQL2PARENTID:緩存ER分片中,表與父表之間的關係
- SQLRouteCache:緩存SQL的路由信息。
- TableID2DataNodeCache.TESTDB_ORDERS:緩存表與表的主鍵與分片的對應關係。如果我們的主鍵不爲分片鍵時,爲了加快查詢的速度,可以緩存主鍵與分片鍵的對應關係。
(8)查看數據節點所在的主機節點
mysql> show @@datasource;
Mycat命令行管理方式常用於管理單臺Mycat服務,如果需要同時管理Mycat集羣中的多個Mycat服務,就需要使用Mycat-Web進行管理了。