MySQL Cluster 日常維護


在前面幾篇文章已經詳細介紹了MySQL Cluster的搭建,配置講解。而且相信大家都掌握了基本用法。現在我們來看看Cluster的日常維護。熟悉日常維護,將有助於工作中更好的管理和使用Cluster。

一. 數據備份

相信大家都熟悉mysql的日常備份工具,比如mysqldump對數據庫進行邏輯備份。這個方法同樣適用MySQL Cluster,備份方法和其他存儲引擎一樣,唯一的區別是在任意的SQL節點備份數據。我們來看一個例子。

我這里在SQL節點192.168.0.70上面使用mysqldump備份test庫:

[root@192.168.0.70 ~]# mysqldump  --single-transaction --skip-comments test > /data/bak.sql
DROP TABLE IF EXISTS `t1`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t1` (
  `name` varchar(20) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
INSERT INTO `t1` VALUES ('yayun'),('atlas');
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

可以看見導出的SQL和其他引擎沒有區別,這里就不詳細介紹了。我們重點介紹cluster的物理備份方法。還是以前面搭建的cluster環境為例子。當集群全部啟動以后,進入管理節點執行start backup命令啟動備份。輸入?可以查看各種幫助選項。

ndb_mgm> ?
---------------------------------------------------------------------------
 NDB Cluster -- Management Client -- Help
---------------------------------------------------------------------------
HELP                                   Print help text
HELP COMMAND                           Print detailed help for COMMAND(e.g. SHOW)
SHOW                                   Print information about cluster
CREATE NODEGROUP <id>,<id>...          Add a Nodegroup containing nodes
DROP NODEGROUP <NG>                    Drop nodegroup with id NG
START BACKUP [NOWAIT | WAIT STARTED | WAIT COMPLETED]
START BACKUP [<backup id>] [NOWAIT | WAIT STARTED | WAIT COMPLETED]
START BACKUP [<backup id>] [SNAPSHOTSTART | SNAPSHOTEND] [NOWAIT | WAIT STARTED | WAIT COMPLETED]
                                       Start backup (default WAIT COMPLETED,SNAPSHOTEND)
ABORT BACKUP <backup id>               Abort backup
SHUTDOWN                               Shutdown all processes in cluster
CLUSTERLOG ON [<severity>] ...         Enable Cluster logging
CLUSTERLOG OFF [<severity>] ...        Disable Cluster logging
CLUSTERLOG TOGGLE [<severity>] ...     Toggle severity filter on/off
CLUSTERLOG INFO                        Print cluster log information
<id> START                             Start data node (started with -n)
<id> RESTART [-n] [-i] [-a] [-f]       Restart data or management server node
<id> STOP [-a] [-f]                    Stop data or management server node
ENTER SINGLE USER MODE <id>            Enter single user mode
EXIT SINGLE USER MODE                  Exit single user mode
<id> STATUS                            Print status
<id> CLUSTERLOG {<category>=<level>}+  Set log level for cluster log
PURGE STALE SESSIONS                   Reset reserved nodeid's in the mgmt server
CONNECT [<connectstring>]              Connect to management server (reconnect if already connected)
<id> REPORT <report-type>              Display report for <report-type>
QUIT                                   Quit management client

<severity> = ALERT | CRITICAL | ERROR | WARNING | INFO | DEBUG
<category> = STARTUP | SHUTDOWN | STATISTICS | CHECKPOINT | NODERESTART | CONNECTION | INFO | ERROR | CONGESTION | DEBUG | BACKUP | SCHEMA
<level>    = 0 - 15
<id>       = ALL | Any database node id

For detailed help on COMMAND, use HELP COMMAND.
ndb_mgm> 

輸入start backup啟動備份,如下:

ndb_mgm> START BACKUP
Waiting for completed, this may take several minutes
Node 2: Backup 1 started from node 1
Node 2: Backup 1 started from node 1 completed
 StartGCP: 1232 StopGCP: 1235
 #Records: 2061 #LogRecords: 0
 Data: 51864 bytes Log: 0 bytes
ndb_mgm> 

在備份日志中,需要注意"Backup 1",它表示該備份的唯一ID,如果做第二次備份,備份ID會變成"Backup 2"。當日志中顯示"Node 2: Backup 1 started from node 1 completed"時,本次備份結束。備份的數據保存在每個NDB(數據節點)下,具體的備份路徑是$MYSQL_HOME/data/BACKUP/BACKUP-ID。這是默認的,我的數據放在/data/mysql-cluster/data/,所以備份也在該目錄下面。上面的備份可以在兩個數據節點都可以看到:

[root@192.168.0.40 BACKUP-1]# pwd
/data/mysql-cluster/data/BACKUP/BACKUP-1
[root@192.168.0.40 BACKUP-1]# ll
total 48
-rw-r--r-- 1 root root 25660 Apr 16 22:24 BACKUP-1-0.3.Data
-rw-r--r-- 1 root root 14096 Apr 16 22:24 BACKUP-1.3.ctl
-rw-r--r-- 1 root root    52 Apr 16 22:24 BACKUP-1.3.log
[root@192.168.0.40 BACKUP-1]# 
[root@192.168.0.50 BACKUP-1]# pwd
/data/mysql-cluster/data/BACKUP/BACKUP-1
[root@192.168.0.50 BACKUP-1]# ll
total 48
-rw-r--r-- 1 root root 26748 Apr 16 22:24 BACKUP-1-0.2.Data
-rw-r--r-- 1 root root 14096 Apr 16 22:24 BACKUP-1.2.ctl
-rw-r--r-- 1 root root    52 Apr 16 22:24 BACKUP-1.2.log
[root@192.168.0.50 BACKUP-1]# 

大家或許發現了以上兩個節點的備份文件名不一樣,一個包含".2",另外一個包含".3",這個數字表明了此備份是哪個數據節點上的數據。下面清楚的顯示了ID號。

[ndbd(NDB)]     2 node(s)
id=2    @192.168.0.50  (mysql-5.5.19 ndb-7.2.4, Nodegroup: 0, Master)
id=3    @192.168.0.40  (mysql-5.5.19 ndb-7.2.4, Nodegroup: 0)

對於大數據量的備份,MySQL Cluster還提供了幾個備份的參數可供調整,這些參數需要寫在config.ini的[NDBD DEFAULT]或者[NDBD]組中,對各參數的具體說明如下:

(1)BackupDataBufferSize:將數據寫入磁盤之前用於對數據進行緩沖處理的內存量。

(2)BackupLogBufferSzie: 將日志記錄寫入磁盤之前用於對其進行緩沖處理的內存量。

(3)BackupMemory:          在數據庫節點中為備份分配的總內存。它應是分配給備份數據緩沖的內存和分配給日志緩沖的內存之和。

(4)BackupWriteSize:        每次寫入磁盤的塊大小,適用於備份數據緩沖和備份日志緩沖。

二. 數據恢復

對於用"start backup" 進行備份的cluster,必須使用ndb_restore工具進行數據恢復。ndb_restore是mysql cluster帶的管理工具,在shell中執行,而不是ndb_mgm工具中的一個命令。

我們上面已經備份數據了,我們人為刪除test庫下面的表t1,然后恢復數據:

mysql> drop table test.t1;
Query OK, 1 row affected (0.64 sec)
mysql
>

(1)在數據節點2(192.168.0.50)的shell命令中執行如下命令:

[root@192.168.0.50 ~]# ndb_restore -b 1 -n 2 -c host=192.168.0.30:1186 -m -r /data/mysql-cluster/data/BACKUP/BACKUP-1/
Backup Id = 1
Nodeid = 2
backup path = /data/mysql-cluster/data/BACKUP/BACKUP-1/
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1.2.ctl'
File size 14096 bytes
Backup version in files: ndb-6.3.11 ndb version: mysql-5.5.19 ndb-7.2.4
Stop GCP of Backup: 1234
Connected to ndb!!
Successfully restored table `test/def/t1`
Successfully restored table event REPL$test/t1
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1-0.2.Data'
File size 26748 bytes
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_7_3(8) fragment 0
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_sample(5) fragment 0
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(3) fragment 0
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(9) fragment 0
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_head(4) fragment 0
_____________________________________________________
Processing data in table: test/def/t1(10) fragment 0
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(2) fragment 0
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(7) fragment 0
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1.2.log'
File size 52 bytes
Restored 1 tuples and 0 log entries

NDBT_ProgramExit: 0 - OK

[root@192.168.0.50 ~]# 

其中命令行中的各參數意義如下:

參數                    說明
-b                      備份id
-n                      NDB節點id
-m                      恢復表定義
-r                      備份路徑
-c                      cluster管理節點連接

因為是第一個節點恢復,所以需要加參數-m來恢復表定義,這樣在其他節點恢復時就不需要再加該參數,否則會報如下錯誤:

Unable to find table: `t1`
Restore: Failed to restore table: `test/def/t1` ... Exiting 

(2)在節點3(192.168.0.40)再進行恢復:

[root@192.168.0.40 ~]# ndb_restore -b 1 -n 3 -c host=192.168.0.30:1186 -r /data/mysql-cluster/data/BACKUP/BACKUP-1/    
Backup Id = 1
Nodeid = 3
backup path = /data/mysql-cluster/data/BACKUP/BACKUP-1/
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1.3.ctl'
File size 14096 bytes
Backup version in files: ndb-6.3.11 ndb version: mysql-5.5.19 ndb-7.2.4
Stop GCP of Backup: 1234
Connected to ndb!!
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1-0.3.Data'
File size 25660 bytes
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_7_3(8) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_sample(5) fragment 1
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(3) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(9) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_head(4) fragment 1
_____________________________________________________
Processing data in table: test/def/t1(10) fragment 1
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(2) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(7) fragment 1
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1.3.log'
File size 52 bytes
Restored 1 tuples and 0 log entries

NDBT_ProgramExit: 0 - OK

[root@192.168.0.40 ~]# 

(4)查看數據是否恢復(任意SQL節點,這里選擇192.168.0.70):

mysql> select * from t1;
+-------+
| name  |
+-------+
| yayun |
| atlas |
+-------+
2 rows in set (0.05 sec)

mysql> 

此時數據已經恢復正常。

三 .日志管理

MySQL Cluster提供了兩種日志,分別是集群日志(cluster log)和節點日志(node log)。前者記錄了所有Cluster節點生成的日志,后者僅僅記錄了數據節點的本地事件。在大多數情況下,一般推薦使用集群日志,因為它在一個地方記錄了所有節點的數據,更方便進行管理。節點日志一般在開發過程中使用,或者用來調試程序代碼。

clusterlog一般記錄在配置文件(config.ini)所在的目錄下,文件名格式為ndb_<nodeid>_cluster.log,其中nodeid為管理節點號。

下面是測試環境中的一段clusterlog:

[root@192.168.0.30 mysql-cluster]# tail -n 10 ndb_1_cluster.log 
 #Tablespaces: 0 #Logfilegroups: 0 #datafiles: 0 #undofiles: 0
2014-04-16 23:21:48 [MgmtSrvr] INFO     -- Node 6: Restore data: backup 3 from node 3 #Records: 3201 Data: 44814 bytes
2014-04-16 23:21:48 [MgmtSrvr] INFO     -- Node 6: Restore log: backup 3 from node 3 #Records: 0 Data: 0 bytes
2014-04-16 23:21:48 [MgmtSrvr] INFO     -- Node 6: Restore completed: backup 3 from node 3
2014-04-16 23:21:48 [MgmtSrvr] ALERT    -- Node 2: Node 6 Disconnected
2014-04-16 23:21:48 [MgmtSrvr] INFO     -- Node 2: Communication to Node 6 closed
2014-04-16 23:21:48 [MgmtSrvr] INFO     -- Node 3: Communication to Node 6 closed
2014-04-16 23:21:48 [MgmtSrvr] ALERT    -- Node 3: Node 6 Disconnected
2014-04-16 23:21:51 [MgmtSrvr] INFO     -- Node 3: Communication to Node 6 opened
2014-04-16 23:21:52 [MgmtSrvr] INFO     -- Node 2: Communication to Node 6 opened
[root@192.168.0.30 mysql-cluster]# 

可以使用ndb_mgm客戶端管理工具打開或者關閉日志,具體操作如下:

[root@192.168.0.30 ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> clusterlog info
Connected to Management Server at: localhost:1186
Severities enabled: INFO WARNING ERROR CRITICAL ALERT 
ndb_mgm> 

當前日志是打開的,可以用clusterlog off命令關閉日志:

ndb_mgm> clusterlog off
Cluster logging is disabled
ndb_mgm> 

查看日志狀態發現已關閉:

ndb_mgm> clusterlog info
Cluster logging is disabled.
ndb_mgm> 

執行命令clusterlog on將日志打開:

ndb_mgm> clusterlog on
Cluster logging is enabled.
ndb_mgm> clusterlog info
Severities enabled: INFO WARNING ERROR CRITICAL ALERT 
ndb_mgm> 

cluster中的日志有很多類型,可以按照如下類別進行過濾,使得日志只記錄我們關心的信息。

(1)Category(類別):可以是STARTUP,SHUTDOWN,STATISTICS,CHECKPOINT,NODERESTART,CONNECTION,ERROR或者INFO中的任意值。具體的信息大家可以查閱mysql相關文檔。

(2)Priority(優先級):由從1-15的數字表示,1表示最重要,而15表示最不重要。每種Category都有一個 默認的優先級閥值,如下面所示,優先級閥值以下的日志將被記錄,反之,優先級閥值以上的日志將不會被記錄。

類別            默認閥值(所有數據節點)
STARTUP                 7
SHUTDOWN                7
STATISTICS              7
CHECKPOINT              7
NODERESTART             7
CONNECTION              7
ERROR                   15
INFO                    7

(3)Severity Level(嚴重級別):可以是下面的值之一,ALERT,CRITICAL,ERROR,WARNING,INFO或DEBUG。這些值的含義如下:

嚴重級別                        事件定義
ALERT                   應立刻更正的情況,如損壞的系統數據庫
CRITICAL                臨界狀況,如設備錯誤或資源不足
ERROR                   應予以更正的狀況,如配置錯誤
WARNING                 不能稱為錯誤的情況,但仍需要特別處理
INFO                    通報性信息
DEBUG                   調試信息,用於NDB Cluster開發

這3種分類可以讓我們從3個不同的角度來對日志進行過濾。過濾的方法可以用ndb_mgm工具來完成,具體設置方法如下。

(1)node_id CLUSTERLOG category=threshold:用於小於等於threshold的優先級將category事件記錄到cluster日志。node_id可以為ALL(所有節點)。或者只指定某個節點。

(2)CLUSTERLOG TOGGLE severity_level:使得指定的severity_level打開或者關閉。

例如,要將測試環境中的節點2的STARTUP事件只記錄級別為3以下的日志,可以進入ndb_mgm后執行命令:

ndb_mgm> 2 clusterlog startup=3
Executing CLUSTERLOG STARTUP=3 on node 2 OK!

ndb_mgm> 

如果要在cluster中過濾掉DEBUG和INFO信息,可以執行如下命令:

ndb_mgm> clusterlog toggle debug info
DEBUG enabled
INFO disabled
ndb_mgm> 

然后查看日志狀態,發現DEBUG和INFO信息已經不存在了。

ndb_mgm> clusterlog info
Severities enabled: DEBUG WARNING ERROR CRITICAL ALERT 
ndb_mgm> 

 

總結:

通過幾天學習,對mysql cluster有了初步了解,后續還會進一步的學習,雖然目前企業應用的並不多。我相信在將來一定會完善。功能會越來越強大。詳細的參考還請大家閱讀mysql的官方文檔。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM