hadoop離線分析(簡單版)-mysqlcluster

目錄

mysql各版本比較

mysqlcluster優點

mysqlcluster缺點

mysqlcluster和mycat對比

innoDB和NDB數據庫引擎對比

MySQL簇基本概念

ubuntu 16.04下安裝Mysql Cluster


mysql各版本比較

mysql各版本的區別:
MySQL Community Server 社區版本,開源免費,但不提供官方技術支持。
MySQL Enterprise Edition 企業版本,需付費,可以試用30天。
MySQL Cluster 集羣版,開源免費。可將幾個MySQL Server封裝成一個Server。
MySQL Cluster CGE 高級集羣版,需付費。
MySQL Workbench(GUI TOOL)一款專爲MySQL設計的ER/數據庫建模工具。MySQL Workbench又分爲兩個版本,分別是社區版(MySQL Workbench OSS)、商用版(MySQL Workbench SE)。

☆☆MySQL企業版和社區版之間有何不同?

2006年底,MySQL開始發行MySQL Enterprise,這個產品包含了一系列更健全的提高MySQL server可靠性、安全性和性能的服務。
如果您業務符合右側任何一個需求特徵,那麼推薦採用
Mysql企業版解決方案:
MySQL社區版是開源的GPL許可,可以免費獲取。
MySQL網絡版是通過MySQL認證的許可,需要花錢購買。
MySQL網絡版在網絡和企業部署功能、排錯功能、技術和產品支持、升級更新、享有MySQL知識庫、直接得到MySQL開發人員指導等方面,都是MySQL社區版所沒有的。
第一個 MySQL Community Server,這個不要錢!
第二個 MySQL Enterprise 這個要掏錢,不過可以打電話諮詢問題,也就是電話技術支持。
第三個 MySQL Cluster,這個單獨是沒法用的,要在1或2的基礎上用。當然用來平衡多臺數據庫的。

mysqlcluster優點

1)通過自動分片實現高水平的寫入擴展能力--擴展性強,在線擴容MySQL Cluster 自動將表分片(或分區)到不同節點上,使數據庫可以在低成本的商用硬件上橫向擴展,同時保持對應用程序完全應用透明。
2)99.999% 的可用性---高可用
憑藉其分佈式、無共享架構,MySQL Cluster 可提供 99.999% 的可用性,確保了較強的故障恢復能力和在不停機的情況下執行預定維護的能力。
3)SQL 和NoSQL API
MySQL Cluster 讓用戶可以在解決方案中整合關係數據庫技術和NoSQL技術
中的最佳部分,從而降低成本、風險和複雜性。
4)實時功能
MySQL Cluster 提供實時的響應時間和吞吐量,能滿足最苛刻的 Web、電信及企業應用程序的需求。
5)具有跨地域複製功能的多站點集羣--容災能力、沒有單點故障
跨地域複製使多個集羣可以分佈在不同的地點,從而提高了災難恢復能力和全球 Web 服務的擴展能力。
6)聯機擴展和模式升級
爲支持持續運營,MySQL Cluster 允許向正在運行的數據庫模式中聯機添加節點和更新內容,因而能支持快速變化和高度動態的負載。

mysqlcluster缺點

對需要進行分片的表需要修改引擎Innodb爲NDB,不需要分片的可以不修改。NDB的事務隔離級別只支持Read Committed,即一個事務在提交前,查詢不到在事務內所做的修改;而Innodb支持所有的事務隔離級別,默認使用Repeatable Read,不存在這個問題。外鍵支持:雖然最新的Cluster版本已經支持外鍵,但性能有問題(因爲外鍵所關聯的記錄可能在別的分片節點中),所以建議去掉所有外鍵。    
Data Node節點數據會被儘量放在內存中,對內存要求大。 數據庫系統提供了四種事務隔離級別:    
A.Serializable(串行化):一個事務在執行過程中完全看不到其他事務對數據庫所做的更新    
(事務執行的時候不允許別的事務併發執行。事務串行化執行,事務只能一個接着一個地執行,而不能併發執行。)。    
B.Repeatable Read(可重複讀):一個事務在執行過程中可以看到其他事務已經提交的新插入的記錄,但是不能看到其他其他事務對已有記錄的更新。    
C.Read Commited(讀已提交數據):一個事務在執行過程中可以看到其他事務已經提交的新插入的記錄,而且能看到其他事務已經提交的對已有記錄的更新。    
D.Read Uncommitted(讀未提交數據):一個事務在執行過程中可以看到其他事務沒有提交的新插入的記錄,而且能看到其他事務沒有提交的對已有記錄的更新。    
E.存在很多限制,比如:不支持外鍵,數據行不能超過8K(不包括BLOB和text中的數據)。雖然最新的Cluster版本已經支持外鍵,但性能有問題(因爲外鍵所關聯的記錄可能在別的分片節點中),所以建議去掉所有外鍵。Data Node節點數據會被儘量放在內存中,對內存要求大。
F.部署、管理、配置很複雜。G.佔用磁盤空間大,內存大。    
詳細可參照:InnoDB和NDB引擎對比

mysqlcluster和mycat對比

mysqlcluster是MYSQL的官方集羣方案,直接在數據庫級別支持ndb網絡節點,自動分片,自動join,單機故障不影響集羣;    
mysqlcluster數據都是放在內存裏的,有數據都得放到內存,再能讀取,所以數據大了,內存不夠用會嚴重影響性能,硬件只怕不便宜,而且實時同步依靠的是超大的網絡帶寬。當然他的功能是很有特色的。生產環境目前沒聽說過用這個案例。    
mysql cluster新版已經可以做成物理表了,但缺點也存在,除非了帶寬,磁盤容量也是個頭疼問題。
mycat這個是基於阿里巴巴的Cobar方案優化而來,其支持團隊也挺賣力的,支持半自動化分片、join。因爲需要DBA對每個表的分片策略進行配置和干涉。個人感覺沒有方案1的傻瓜式分片簡單。而阿里的本質上就是分庫、分表,水平拆分垂直拆分,業務拆分數據拆分 之類的技術,通過代碼來減少手工的工作量。    
所以,具體選哪個,還需要考慮實際項目需求,根據嚴密的實際數據測試才能給出最精準的答案。    
第四個 MySQL Workbench,這是個好東西,用來設計數據庫的。

innoDB和NDB數據庫引擎對比

特點 innoDB NDB
存儲限制 64TB 3TB,NDB:基於48個數據節點的實用上限,每個節點64GB內存;可增加基於磁盤的數據和BLOBS(二進制大文件)
外鍵支持 支持 MySQL Cluster NDB 7.3之前不支持外鍵、7.3和7.3之後支持
事務 支持所有事務 只支持Read Committed
MVCC 支持 不支持
數據壓縮 支持 不支持,mysqlcluster的檢查點和備份文件能壓縮
數據行最大支持(>14k) 支持VARBINARY,VARCHAR,BLOB和TEXTcolumns 僅支持BLOB和TEXTcolumns
數據備份 使用mysql複製的異步和半同步備份 在mysql集羣中自動同步複製
讀操作擴展 支持 支持,mysql集羣中的自動分區;mysql備份
寫操作擴展 需要應用程序級別進行區分(做分片) 支持,自動分區對mysqlcluster來說是透明的
高可用(HA) 需要其它軟件支持才能實現高可用 支持(99.9%的高可用)
故障恢復和故障轉移 需要其它軟件支持才能實現 支持,mysqlcluster中的主要特性
節點故障恢復時間 30秒或更久 通常都小於1秒
實時性能 不支持 支持
是否存儲在內存 不存在內存 有些數據可以選擇性地存儲在磁盤上;內存和磁盤數據存儲都是持久的
存儲引擎的NoSQL訪問 不支持。正在豐富的本地緩存接口 支持,多個API,包括:Memcached, Node.js/JavaScript, Java, JPA, C++,and HTTP/REST
併發、並行寫入 不支持 最多48個寫入,對併發寫入進行了優化
衝突檢測解決(多個複製主機) 不支持 支持
HashIndexes哈希索引 不支持 支持
在線添加節點 只能用於只讀備份 支持所有節點類型
在線升級 不支持 支持
聯機架構修改 5.6以後版本 支持

MySQL簇基本概念

NDB 是一種“內存中”存儲引擎,它具有可用性高和數據一致性好的特點。能夠使用多種故障切換和負載平衡選項配置NDB存儲引擎,但以簇層面上的存儲引擎開始最簡單。MySQL簇的NDB存儲引擎包含完整的數據集,僅取決於簇本身內的其他數據。下面名,我們將介紹設置由NDB存儲引擎和一些MySQL服務器構成的MySQL簇的設置方法。目前,MySQL簇的部分可以獨立於MySQL服務器進行配置。在MySQL簇中,簇的每個部分被視爲一個節點。

註釋:在很多情況下,術語“節點”用於指計算機,但在討論MySQL簇時,它表示的是進程。在單臺計算機上可以有任意數目的節點,所以我們纔有可能將多個不同功能的節點配置在同一臺計算機上,爲此,我們採用術語簇主機。

有三類簇節點,在最低的MySQL簇配置中,至少有三個節點,這三類節點分別是:

管理節點(MGM):這類節點的作用是管理MySQL簇內的其他節點,如提供配置數據,啓動並停止節點,運行備份等。由於這類節點負責管理其他節點的配置,所以管理節點應在其他節點之前先啓動。MGM節點是用命令ndb_mgm啓動的。數據存儲節點(NDB):這類節點用於保存簇的數據。數據集點的數目與副本的數目相關,是片段的倍數。例如,對於兩個副本,每個副本又兩個片段,那麼就有4個數據節點。沒有必要有一個以上的副本。。數據節點是用命令ndbd來啓動的。(本次實驗data保存位置/usr/local/mysql/data)

SQL節點:這類節點是用來訪問簇數據的節點。對於MySQL簇,客戶端節點是使用NDB 簇存儲引擎的傳統MySQL服務器。典型情況下,SQL節點是使用命令mysql -ndbcluster來啓動的,或將ndbcluster添加到my.cnf後面使用mysqld啓動。簇配置包括對簇中單獨節點的配置,以及設置節點之間的單獨通信鏈路。對於目前設計的MySQL簇,其意圖在於,從處理器的能力,內存空間和寬帶來講,存儲節點是同質的,此外,爲了提供單一的配置點,作爲整體,簇的所有配置均位於一個文件中。管理服務器(MGM節點)負責管理簇配置文件和簇日誌。簇中的每個節點從管理服務器檢索配置數據,並請求確定管理服務器所在的位置的方式。當數據節點內出現有趣的事件時,節點將關於這類事件的信息傳輸到管理服務器,然後,這類信息寫入簇日誌。管理節點、數據存儲節點、SQL節點三部分可看做三個進程。

ubuntu 16.04下安裝Mysql Cluster

五臺計算機設定方案:一臺管理節點,四臺數據節點四臺SQL節點

卸載程序:

卸載程序和所有配置文件。在終端中輸入以下命令,把<programname>替換成你希望完全移除的程序:

sudo apt-get --purge remove <programname>

查找mysql安裝目錄:find / -name mysql

Ubuntu中卸載mysql:①sudo apt-get autoremove --purge mysql-*  ②sudo apt purge mysql-*

清楚殘留數據:dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

卸載mysql:

sudo apt-get autoremove --purge mysql-server
sudo apt-get remove mysql-server
sudo apt-get autoremove mysql-server
sudo apt-get remove mysql-common (非常重要)
find / -name mysql ---查看有沒有mysql相關文件

目前5臺機器,爲了達到故障轉移和負載均衡,5臺均裝配管理節點、數據節點、SQL節點。

五臺計算機分別創建用戶組和用戶名:mysql,mysql----------groupadd mysql,useradd -g mysql mysql
檢查是否添加成功:驗證用戶組添加:cat /etc/group,驗證用戶添加成功:cat /etc/passwd

安裝之前:    
安裝之前,如果之前安裝過mysql,那麼需要刪除相應的各種mysql文件,刪除之前請停止mysql服務。並且不要忘記刪除my.cnf這些配置文件。確保刪除乾淨。不然可能會和後面的安裝有衝突。如果是實驗,關閉防火牆,實際中,防火牆打開對應端口。保證服務器之前能互相訪問,能ping通。保證固定的ip地址。保證沒有別的程序佔用需要使用的端口。如3306等。這些都確認完畢後再進行安裝。    
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT 添加3306端口規則    
ufw status 查看防火牆狀態    
在實際情況中最好將數據節點和mysql節點分開。在實際中負載均衡服務還需要做備份,因爲萬一負載均衡服務器宕機將會導致所有數據節點都無法訪問,所以需要對負載均衡服務器備份,有條件的話,分開管理節點和負載均衡器。

安裝配置mysql-cluster

1)安裝mysql-cluster

下載mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz

將下載後的壓縮包放在/usr/local下

mv /home/hadoop01/mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz /usr/local

解壓:

tar xvf mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz

ln -s /usr/local/mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64 /usr/local/mysql

將需要的文件取出:

cd mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64

cp bin/ndb_mgm* /usr/local/bin

cd /usr/local/bin

chmod +x ndb_mgm*,加入執行權限

2)新建配置文件並且初始化管理節點

mkdir /var/lib/mysql-cluster

創建/var/lib/mysql-cluster/config.ini(管理節點配置文件)

touch config.ini

vim config.ini

[ndbd default]   #數據結點,配置數據結點的行爲    
NoOfReplicas=2   #集羣中每個表保存的拷貝數,定義在Cluster環境中相同數據的分數    
    #節點組數=節點數/NoOfReplicas,經過試驗,當數據節點數爲5,    
    #NoOfReplicas爲2時,不整除有餘數時候不允許☆    
DataMemory=1024M   #指定數據內存,默認值爲 80MB,最小值 1MB,無大小限制。每個數據節點中給數據分配的內存    
IndexMemory=128M   #指定索引內存,默認值爲 18MB,最小值 1MB,無大小限制。每個數據節點中給索引分配的內存    
    當太大時候有可能mysql登陸不了,出現下列情況    
         
[ndb_mgmd]   #集羣中結點的唯一標識,取值 1~63。    
nodeid=1        
HostName=10.10.100.19   #保存管理服務器輸出文件的位置,包括日誌,進程輸出文件,以及程序的pid文件。   #保存管理服務器輸出文件的位置,包括日誌,進程輸出文件,以及程序的pid文件。
DataDir=/var/lib/mysql-cluster   #管理節點log所在路徑:ndb_1_cluster.log   #管理節點log所在路徑:ndb_1_cluster.log
         
[ndbd]        
nodeid=6   #指定存放跟蹤文件,日誌文件,pid文件以及錯誤日誌的目錄。    
HostName=10.10.100.19        
DataDir=/usr/local/mysql/data        
         
[ndbd]        
nodeid=7        
HostName=10.10.100.18        
DataDir=/usr/local/mysql/data        
         
[ndbd]        
nodeid=8        
HostName=10.10.100.17        
DataDir=/usr/local/mysql/data        
         
[ndbd]        
nodeid=9        
HostName=10.10.100.16        
DataDir=/usr/local/mysql/data        
         
[ndbd]        
nodeid=10        
HostName=10.10.100.15        
DataDir=/usr/local/mysql/data        
         
[mysqld]        
nodeid=21        
HostName=10.10.100.19        
         
[mysqld]        
nodeid=22        
HostName=10.10.100.18        
         
[mysqld]        
nodeid=23        
HostName=10.10.100.17        
         
[mysqld]        
nodeid=24        
HostName=10.10.100.16        
         
[mysqld]        
nodeid=25        
HostName=10.10.100.15        

 註釋:簇管理節點的默認端口是1186,數據節點的默認端後是2202。

NoOfReplicas解讀:    
定義在Cluster環境中相同數據的分數,通俗一點來說就是每一份數據存放NoOfReplicas份。如果希望能夠冗餘,那麼至少設置爲2(一般情況來說此參數值設置爲2就夠了),最大隻能設置爲4。另外,NoOfReplicas值得大小,實際上也就是node group大小的定義(也就是說node group最大隻能是4)。NoOfReplicas參數沒有系統默認值,所以必須設定,而且只能設置在[NDBD DEFAULT]中,因爲此數值在整個Cluster集羣中一個node group中所有的NDBD節點都需要一樣。另外NoOfReplicas的數目對整個Cluster環境中NDB節點數量有較大的影響,因爲NDB節點總數量是NoOfReplicas * 2 * node_group_num;

mysql目錄下創建data目錄:mkdir /usr/local/mysql/data    
使用配置文件初始化管理節點    
/usr/local/bin/ndb_mgmd --ndb_nodeid=1 -f /var/lib/mysql-cluster/config.ini --initial    
cd /usr/local/bin目錄下(ndb_mgmd和ndb_mgm存在於此目錄下)    
查看狀態:./ndb_mgm -e show    
進入ndb_mgm格式:./ndb_mgm,輸入完進入:ndb_mgm>模式,輸入ndb_mgm>show,    
正確顯示哪個是管理節點,哪個是SQL節點,哪個是數據存儲節點

管理節點關閉:ndb_mgm -e shutdown            
到此爲止管理節點配置完畢,接下去配置數據和sql節點            
3)安裝配置數據和mysql節點            
groupadd mysql            
useradd -g mysql mysql            
添加用戶組和用戶            
驗證用戶組添加:cat /etc/group,驗證用戶添加成功:cat /etc/passwd            
爲/var/lib/mysql-cluster文件夾賦予權限            
chown root:mysql /var/lib/mysql-cluster            
進入:cd /usr/local/mysql/bin/            
./mysqld --initialize            
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data            
初始化數據庫(這裏要注意,如果你安裝的版本和我的不同,數據庫初始化的命令使不同的,            
很多之前的版本會使用:scripts/mysql_install_db --user=mysql來初始化,這個            
已經被mysql在新的版本中廢棄了,所以需要使用下面的命令安裝,如果你需要安裝別的版本請參考            
mysql官網的對應版本的安裝命令。)            
apt-get install libaio-dev            
裝完再次執行:./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data            
(官方文檔:mysql_install_db:because its functionality has been integrated into mysqld)            
scripts/mysql_install_db --user=mysql            
記住初始密碼:            
hadoop01:SSfdRA9Yf6:p            
hadoop02:-c_ec-yk8swA,UUID: a974c1dc-28d2-11e8-a5c0-2cfda157ba9b            
hadoop03:>*=N,p2*RQ;v            
hadoop04:wI<QYpE,(7w!            
hadoop05:fmagpNtFU9..

 chown -R root .        
chown -R mysql data        
chgrp -R mysql .        
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld : 把mysql.server重命名爲mysqld        
chmod +x /etc/init.d/mysqld        
這個應該是ubuntu的一個bug,,/sbin/下面沒有insserv這個文件,一般這個文件在/usr/lib/insserv/insserv中,        
我們可以建個鏈接。解決方法如下:sudo ln -s /usr/lib/insserv/insserv  /sbin/insserv        
chkconfig --add mysqld  --mysql註冊爲開機啓動的服務        
mysqld              0:off  1:off  2:on   3:on   4:on   5:on   6:off

cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
vim /etc/my.cnf

[client]            
port = 3306            
socket=/tmp/mysql.sock            
default-character-set=utf8     #解決數據內中文亂碼問題      
[mysql]            
default-character-set=utf8     #解決數據內中文亂碼問題      
[mysqld]            
ndbcluster            
ndb-connectstring=10.10.100.19            
#default-storage-engine=NDBCLUSTER            
user=mysql            
max_allowed_packet=1024M            
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER            
basedir=/usr/local/mysql/            
datadir=/usr/local/mysql/data            
socket=/tmp/mysql.sock            
port=3306            
server-id=1     #管理端配置文件中對應的 noteId      
explicit_defaults_for_timestamp=true            
log_timestamps=SYSTEM            
character-set-server=utf8            
collation-server=utf8_general_ci            
skip-character-set-client-handshake            
#skip-grant-tables            
             
[ndbd]            
connect-string=10.10.100.19            
             
[ndb_mgm]            
connect-string=10.10.100.19:1186            
             
[ndb_mgmd]            
config-file=/var/lib/mysql-cluster/config.ini            
             
[mysql_cluster]            
ndb-connectstring=10.10.100.19            

 4)啓動數據存儲節點:        
cd /usr/local/mysql/bin        
./ndbd --ndb_nodeid=7 --initial   ----首次,或更改後        
./ndbd --ndb_nodeid=7  ---二次        
☆☆☆注意:應僅在首次啓動ndbd時,或者在備份/恢復或者配置變化後重啓ndbd時使用        
“–initial”參數,這很重要,因爲該參數會使數據節點刪除由早期ndbd實例創建的,用於恢復        
的任何文件,包括恢復用日誌文件。

5)啓動SQL節點

./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data        
以上執行之後,添加chkconfig --del mysqld,重啓機器,再執行:/etc/init.d/mysqld start        
再添加chkconfig --add mysqld        
以下命令都在/etc/init.d目錄下執行        
systemctl start mysqld        
①/usr/local/mysql/bin路徑下執行:./mysqld start        
②cd /usr/local/mysql/bin,執行./mysqld_safe --user=mysql &         
(如果用./mysqld --initialize命令執行,需要用安全模式./mysqld_safe --user=mysql & 啓動,但是本安裝包存在缺陷需要修復) 
執行:cd /usr/local/mysql/bin 目錄./mysql_upgrade ☆☆☆☆需要調研如何修復        
③/etc/init.d/mysqld start        
/etc/init.d/mysqld start --disable-partition-engine-check

設定root新密碼:hjhmysql        
查看mysql進程:ps -aux | grep mysql        
對應的PID:ps ax|grep mysql        
編輯profile文件,vim /etc/profile,在文件最後添加如下兩行:        
PATH=$PATH:/usr/local/mysql/bin        
export PATH        
執行:source profile        
cd /usr/local/mysql/bin目錄,mysql -u root -p,輸入初始密碼,或者直接./mysql -u root -p        
用初始密碼登陸後,會被告知重置密碼:set password = password('hjhmysql');        
把登陸密碼改成hjhmysql        
進入mysql模式:mysql>        
輸入exit即是退出mysql模式        
查看mysql狀態:        
service mysqld status        
service mysqld start        
service mysqld stop        
/bin/sh /etc/init.d/mysqld start        
bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data        
/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data        
解決:Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)問題        
mkdir /var/run/mysqld        
chmod 777 /var/run/mysqld/        
service mysqld restart

查看管理節點       /usr/local/bin/ndb_mgm -e show        
停止管理節點       /usr/local/bin/ndb_mgm -e shutdown        
啓動管理節點       /usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini        
初始化管理節點啓動  /usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial        
啓動數據節點       /usr/local/mysql/bin/ndbd        
初始化mysql        ./mysqld --initialize        
啓動sql節點         /etc/init.d/mysqld start        
管理節點機器:(關閉順序:先關閉sql節點:/etc/init.d/mysqld stop,再關閉管理節點)        
ndb_mgm> shutdown #關閉所有cluster進程

chkconfig --del mysqld
chkconfig --add mysqld

☆☆☆☆☆注意:

mysql-cluster節點是按順序啓動的,即:1->6->7->21->22

數據節點與SQL節點分組原理:當NoOfReplicas=1時不啓動SQL節點,只啓動數據節點時,數據節點均分到0組;當啓動SQL節點後,則分配相應SQL相應的數據節點0,1,2組。

問題記錄:

當SQL服務啓動正常,但是管理節點檢測狀態爲not connected,則表示SQL服務和管理節點沒連接上    
原因在於,之前先裝apt install mysql-client-core-5.7等組件,影響到mysql-cluster的    
初始化安裝。雖然能夠登陸>mysql,但是是mysql-server-5.7的mysql而不是mysql-cluster的    
數據庫,所以無法連接·    
啓動mysqlserver時:/etc/init.d/mysqld start時,出現以下錯誤    
參照/usr/local/mysql/data/hadoop01-System-Product-Name.err路徑下log

問題1:        
TIMESTAMP with implicit DEFAULT value is deprecated.         
Please use --explicit_defaults_for_timestamp server option (see documentation for more details).        
my.cnf中:[mysqld]下加入explicit_defaults_for_timestamp=true,去除log中的警告。        
問題2:        
[Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO'         
sql modes should be used with strict mode. They will be merged with strict mode in         
a future release.        
 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.        
sql_mode是個很容易被忽視的變量,默認值是空值,在這種設置下是可以允許一些非法操作的,        
比如允許一些非法數據的插入。在生產環境必須將這個值設置爲嚴格模式,所以開發、測試環境的        
數據庫也必須要設置,這樣在開發測試階段就可以發現問題。        
所以在my.cnf配置文件[mysqld]下加入:        
[mysqld]        
sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'

問題3:
mysqld: Table 'mysql.plugin' doesn't exist
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
解決方法一
執行:進入目錄cd /usr/local/mysql/bin
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
再次執行:/etc/init.d/mysqld start

搞定!!

 問題4:
輸入初始密碼錯誤,可進行初始密碼跳過配置:
vim /etc/my.cnf在[mysqld]後面任意一行添加“skip-grant-tables”用來跳過密碼驗證的過程
保存my.cnf後重啓mysql當添加skip-grant-tables後,輸入完mysql -u root -p 出現password直接回車即可
set password for 'username'@'host' = password('hjhmysql');
在之前的版本中,密碼字段的字段名是 password,5.7版本改爲了 authentication_string
use mysql; #使用mysql數據庫
update user set authentication_string = password('hjhmysql'), password_expired = 'N', password_last_changed = now() where user = 'root';
注意nodeid啓動順序基礎上,在hadoop01配置的管理節點+數據節點+SQL節點,在hadoop02配置的數據節點+SQL節點完成如下爲正確情況:/usr/local/mysql/bin目錄下,./ndb_mgm -e show查看所有節點連接情況

問題5:            
2018-03-20T11:24:54.004571+08:00 0 [Note] Event Scheduler: Loaded 0 events            
2018-03-20T11:24:54.004743+08:00 0 [Note] /usr/local/mysql/bin/mysqld: ready for connections.            
Version: '5.7.17-ndb-7.5.5-cluster-gpl'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Cluster Community Server (GPL)            
2018-03-20T11:24:54.004795+08:00 0 [Note] NDB Index Stat: Wait for cluster to start            
2018-03-20T11:24:54.004832+08:00 2 [Note] NDB Util: Wait for cluster to start            
2018-03-20T11:24:54.004838+08:00 1 [Note] NDB Binlog: Check for incidents            
2018-03-20T11:24:54.004851+08:00 1 [Note] NDB Binlog: Wait for cluster to start            
2018-03-20T11:25:24.008048+08:00 0 [Warning] NDB : Tables not available after 30 seconds.  Consider increasing --ndb-wait-setup value            
2018-03-20T11:25:24.008101+08:00 0 [Note] Executing 'SELECT * FROM INFORMATION_SCHEMA.TABLES;' to get a list of tables using the deprecated partition engine. You may use the startup option '--disable-partition-engine-check' to skip this check.             
2018-03-20T11:25:24.008114+08:00 0 [Note] Beginning of list of non-natively partitioned tables            
2018-03-20T11:25:24.014317+08:00 4 [Warning] NDB: Failed to acquire global schema lock, error: (4009)Cluster Failure         
2018-03-20T11:25:24.014957+08:00 4 [Warning] NDB: Failed to acquire global schema lock, error: (4009)Cluster Failure          
2018-03-20T11:25:24.016930+08:00 4 [Warning] NDB: Failed to acquire global schema lock, error: (4009)Cluster Failure          
2018-03-20T11:25:24.017563+08:00 4 [Warning] NDB: Failed to acquire global schema lock, error: (4009)Cluster Failure          
2018-03-20T11:25:24.019886+08:00 4 [Warning] NDB: Failed to acquire global schema lock, error: (4009)Cluster Failure        
2018-03-20T11:25:24.020228+08:00 0 [Note] End of list of non-natively partitioned tables            
ndb_waiter — Wait for NDB Cluster to Reach a Given Status:等待NDB集羣達到一個給定的狀態            
出現這種情況,在配置文件沒有問題情況下,其實是NDB集羣等待時間不夠,解決辦法:            
https://stackoverflow.com/questions/46216448/mysql-ndb-cluster-sql-node-connect-failure            
在啓動選項中:/etc/init.d/mysqld start --disable-partition-engine-check

問題6:mysql的log日誌時間與系統時間不符            
在MySQL 5.7.2 新增了 log_timestamps 這個參數,該參數主要是控制 error log、genera log,等等記錄日誌的顯示時間參數且默認安裝後error_log,slow_log 日誌時間戳默認爲UTC,因此會造成與系統時間不一致,與北京時間相差8個小時            
SHOW GLOBAL VARIABLES LIKE 'log_timestamps';            
+---------------------+-------------------+            
|Variable_name  |              Value   |            
+---------------------+-------------------+            
|log_timestamps |              UTC     |            
+---------------------+-------------------+            
因爲log_timestamps  是一個GLOBAL的全局參數,所以直接在登錄後去set全局參數,重啓後就會直接失效            
因此需要在mysql的配置文件中[mysqld]中增加一條log_timestamps的配置            
log_timestamps=SYSTEM            
            
問題7:mysql cluster集羣停掉一臺數據節點後整個集羣掛掉,包括其他數據節點和sql節點全部和管理節點斷開            
問題:管理節點參數設置以及數據節點內存過小導致的            
            
問題8:排查問題技巧            
MySQL Cluster 自帶了一個錯誤代碼的查看的小程序。通過這個小東西我們可以方便的定位問題的原因。             
這個程序就是 perror 在MYSQL安裝目錄的bin下面。            
例:如報錯:ERROR 1005 (HY000) at line 474868: Can't create table 'Table Name'(errno: 136)            
#/usr/local/mysql/bin/perror --ndb 136            
MySQL error code 136: No more room in index file            
通過它的解釋 我們把 index的相關選項改高一些。如下: (依實際情況決定數值大小)            
MaxNoOfTables: 1024            
MaxNoOfOrderedIndexes: 1024            
MaxNoOfUniqueHashIndexes: 1024            
這樣問題就能解決了。            
問題9:當數據節點、SQL節點超過3個節點☆☆☆時,啓動時出現以下錯誤?????????????(沒有時間繼續探索)
2018-03-21T10:57:12.603042+08:00 0 [Note] Beginning of list of non-natively partitioned tables            
2018-03-21T10:57:13.042641+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546            
2018-03-21T10:57:23.701884+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546            
2018-03-21T10:57:34.100379+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546            
2018-03-21T10:57:44.537059+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546            
2018-03-21T10:57:54.754540+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546            
2018-03-21T10:58:05.120320+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546            
2018-03-21T10:58:15.807656+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546            
可能是某個管理節點的config.ini配置文件[NDBD DEFAULT]中配置參數設置問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章