MySQL 群集是一種技術(shù),該技術(shù)允許在無共享的系統(tǒng)中部署“內(nèi)存中”和“磁盤中”數(shù)據(jù)庫的 Cluster 。通過無共享體系結(jié)構(gòu),系統(tǒng)能夠使用廉價(jià)的硬件,而且對(duì)軟硬件無特殊要求。此外,由于每個(gè)組件有自己的內(nèi)存和磁盤,不存在單點(diǎn)故障。MySQL Cluster 由一組計(jì)算機(jī)構(gòu)成,每臺(tái)計(jì)算機(jī)上均運(yùn)行著多種進(jìn)程,包括 MySQL 服務(wù)器,NDB Cluster 的數(shù)據(jù)節(jié)點(diǎn),管理服務(wù)器,以及(可能存在的)專門的數(shù)據(jù)訪問程序。
創(chuàng)新互聯(lián)建站是少有的網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、營銷型企業(yè)網(wǎng)站、成都小程序開發(fā)、手機(jī)APP,開發(fā)、制作、設(shè)計(jì)、賣友情鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,于2013年創(chuàng)立,堅(jiān)持透明化,價(jià)格低,無套路經(jīng)營理念。讓網(wǎng)頁驚喜每一位訪客多年來深受用戶好評(píng)
管理服務(wù)器(MGM節(jié)點(diǎn))負(fù)責(zé)管理 Cluster 配置文件和 Cluster 日志。Cluster 中的每個(gè)節(jié)點(diǎn)從管理服務(wù)器檢索配置數(shù)據(jù)。當(dāng)數(shù)據(jù)節(jié)點(diǎn)內(nèi)出現(xiàn)新的事件時(shí),節(jié)點(diǎn)將關(guān)于這類事件的信息傳輸?shù)焦芾矸?wù)器,然后,將這類信息寫入 Cluster 日志。
目前能夠運(yùn)行 MySQL Cluster 的操作系統(tǒng)有 Linux、Mac OS X 和 Solaris,最新的版本已經(jīng)支持 Windows 操作系統(tǒng)。
MySQL 群集的數(shù)據(jù)節(jié)點(diǎn)之間的通信是不加密的,并且需要高速的帶寬,所以建議把群集建立在一個(gè)高速局域網(wǎng)內(nèi),不建議跨網(wǎng)段、跨公網(wǎng)的部署這種系統(tǒng)體系。
MySQL 群集分為三種節(jié)點(diǎn):管理節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)和SQL節(jié)點(diǎn)。
管理節(jié)點(diǎn):主要用于管理各個(gè)節(jié)點(diǎn),能夠通過命令對(duì)某個(gè)節(jié)點(diǎn)進(jìn)行重啟、關(guān)閉、啟動(dòng)等操作。也能夠監(jiān)視全部節(jié)點(diǎn)的工作狀態(tài)。
數(shù)據(jù)節(jié)點(diǎn):主要是對(duì)數(shù)據(jù)的存儲(chǔ),不提供其他的服務(wù)。
SQL節(jié)點(diǎn):主要是對(duì)外提供SQL功能,類似一臺(tái)普通的 MySQL Server。
而SQL節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)可以是同一臺(tái)機(jī)器,也就是說這臺(tái)機(jī)器即是SQL節(jié)點(diǎn)也是數(shù)據(jù)節(jié)點(diǎn)。它們只是邏輯關(guān)系上的劃分,實(shí)際部署時(shí),甚至所有的階段都可以位于同一臺(tái)物理機(jī)器上,只是配置較復(fù)雜些。
一、軟件下載機(jī)器操作環(huán)境
配置 MySQL 群集必需使用其群集版本,注意和 MySQL Server 版本的區(qū)別。本文以 Windows 平臺(tái)下的 MySQL 群集版本 MySQL Cluster 7.1.3 為例(截至2010年6月初的最高版本),這是 MySQL Server 5.1 系列版本之一,添加了群集的功能。下載地址為:,選擇 mysql-cluster-gpl-noinstall-7.1.3-win32.zip 文件,這是一個(gè) for Windows 32位版本的、免安裝的二進(jìn)制版本。
根據(jù)自己的操作系統(tǒng)的位數(shù),也可以選擇 64 位版本的。還有一個(gè) 27.2M 的 Windows(x86, 32-bit) 版本,下載下來需要自己編譯,有經(jīng)驗(yàn)的高級(jí)用戶可以選用。
本實(shí)驗(yàn)在 2 臺(tái)安裝 Windows Server 2003(sp2) 的機(jī)器上進(jìn)行。節(jié)點(diǎn)分配及 IP 配置如下:
第一臺(tái)機(jī)器,IP 為 10.0.0.201,作為管理節(jié)點(diǎn)(MGM),SQL節(jié)點(diǎn)1(SQL1),數(shù)據(jù)節(jié)點(diǎn)1(NDBD1)。
第二臺(tái)機(jī)器,IP 為 10.0.0.202,作為SQL節(jié)點(diǎn)2(SQL2),數(shù)據(jù)節(jié)點(diǎn)2(NDBD2)。
管理節(jié)點(diǎn)最好不要與數(shù)據(jù)節(jié)點(diǎn)部署在同一臺(tái)服務(wù)器上,否則可能會(huì)因?yàn)樵摂?shù)據(jù)節(jié)點(diǎn)服務(wù)器的當(dāng)機(jī),而導(dǎo)致管理節(jié)點(diǎn)服務(wù)器的問題,從而導(dǎo)致整個(gè)群集系統(tǒng)的崩潰。
二,配置管理節(jié)點(diǎn):
在第一臺(tái)機(jī)器上,建文件夾 D:\mysql-cluster,在其下建立文件 config.ini,內(nèi)容如下:
[NDBD DEFAULT]
NoOfReplicas=1
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Managment Server
[NDB_MGMD]
hostname=10.0.0.201
# Storage Engines
[NDBD]
hostname=10.0.0.201
datadir= D:\data
[NDBD]
hostname=10.0.0.202
datadir= D:\data
# SQL Engines
[MYSQLD]
hostname=10.0.0.201
[MYSQLD]
hostname=10.0.0.202
Cluster 管理節(jié)點(diǎn)的默認(rèn)端口是1186,數(shù)據(jù)節(jié)點(diǎn)的默認(rèn)端口是 2202。從 MySQL 5.0.3開始,該限制已被放寬,Cluster 能夠根據(jù)空閑的端口自動(dòng)地為數(shù)據(jù)節(jié)點(diǎn)分配端口。如果你的版本低于5.0.22,請(qǐng)注意這個(gè)細(xì)節(jié)。
Cluster 管理節(jié)點(diǎn)作為一個(gè)服務(wù)端(通過運(yùn)行 db_mgmd.exe 程序讀取本配置文件來啟動(dòng)),通過本機(jī)上的客戶端 ndb_mgm.exe 來連接和操作。
三、配置 MySQL 數(shù)據(jù)庫服務(wù)器:
在2臺(tái)機(jī)器上,分別依次操作。
解壓 mysql-cluster-gpl-noinstall-7.1.3-win32.zip 文件到 D:\mysql-cluster-gpl-noinstall-7.1.3-win32 文件夾下,把 D:\mysql-cluster-gpl-noinstall-7.1.3-win32\bin 加到 Windows 的系統(tǒng) path 中。
打開DOS命令行窗口(配置完系統(tǒng)path后,在再次打開新的命令行窗口),執(zhí)行以下語句,讓 MySQL 作為 Windows 服務(wù)運(yùn)行:
mysqld.exe -install mysql
再在 Windows 服務(wù)管理界面里,配置 mysql 服務(wù),手動(dòng)啟動(dòng)(不要自動(dòng)啟動(dòng))。
把 D:\mysql-cluster-gpl-noinstall-7.1.3-win32 下的某個(gè)備用的配置文件(例如my-small.ini)復(fù)制為 my.ini 文件。
建立 D:\tmp 文件夾。
四、配置SQL節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn):
在2臺(tái)機(jī)器上,分別依次操作。
建立文件夾 D:\data。
編輯 NySQL 配置文件 D:\mysql-cluster-gpl-noinstall-7.1.3-win32\my.ini,在 [mysqld] 節(jié)末尾加語句:
#SQL群集節(jié)點(diǎn)
ndbcluster
ndb-connectstring=10.0.0.201
有了 ndbcluster 語句,mysql 服務(wù)將作為群集的 SQL 節(jié)點(diǎn)啟動(dòng)。mysqld.exe 命令帶參數(shù) –ndbcluster 運(yùn)行是一樣的效果。
mysql 服務(wù)連接到數(shù)據(jù)節(jié)點(diǎn)的 2202 默認(rèn)端口,或自動(dòng)分配的別的可用端口。
(問題:SQL節(jié)點(diǎn)如何獲得數(shù)據(jù)節(jié)點(diǎn)的IP地址?是否通過連接管理節(jié)點(diǎn),取得所有數(shù)據(jù)節(jié)點(diǎn)的IP地址的列表?)
這里的連接字符串的值在 MySQL 服務(wù)啟動(dòng)時(shí)使用,用于連接到管理節(jié)點(diǎn)。
在末尾加語句:
#NDB集群節(jié)點(diǎn)
[mysql_cluster]
ndb-connectstring=10.0.0.201
注:好像以下形式也可:
[ndbd]
ndb-connectstring=10.0.0.201
這里的連接字符串的值在數(shù)據(jù)節(jié)點(diǎn)啟動(dòng)時(shí)使用,用于連接到管理節(jié)點(diǎn)。
五,啟動(dòng)群集各服務(wù)器
啟動(dòng)順序依次是:管理節(jié)點(diǎn)、數(shù)據(jù)節(jié)點(diǎn)、SQL節(jié)點(diǎn)。
1,啟動(dòng)管理節(jié)點(diǎn)
在第一臺(tái)服務(wù)器的DOS窗口,運(yùn)行命令:
C:\ndb_mgmd.exe -f d:\mysql-cluster.conf\config.ini –configdir=d:\mysql-cluster
注:如果不帶 –configdir=d:\mysql-cluster 參數(shù),將默認(rèn)為 C:\mysql\mysql-cluster 文件夾。
屏幕顯示:
C:\ndb_mgmd.exe -f d:\mysql-cluster.conf\config.ini –configdir=d:\mysql-cluster
2010-06-10 01:16:57 [MgmtSrvr] INFO — NDB Cluster Management Server. mysql-5.1.44 ndb-7.1.3
2010-06-10 01:16:57 [MgmtSrvr] INFO — Reading cluster configuration from ‘d:\mysql-cluster.conf\config.ini'
2010-06-10 01:16:57 [MgmtSrvr] INFO — Got initial configuration from ‘d:\mysql-cluster.conf\config.ini', will try to set it when all ndb_mgmd(s) started
2010-06-10 01:16:57 [MgmtSrvr] INFO — Mgmt server state: nodeid 1 reserved for ip 10.0.0.201, m_reserved_nodes 1.
2010-06-10 01:16:57 [MgmtSrvr] INFO — Id: 1, Command port: *:1186
==INITIAL==
2010-06-10 01:16:57 [MgmtSrvr] INFO — Starting initial configuration change
2010-06-10 01:16:57 [MgmtSrvr] INFO — Configuration 1 commited
2010-06-10 01:16:57 [MgmtSrvr] INFO — Config change completed! New generation: 1
==CONFIRMED==
2,啟動(dòng)數(shù)據(jù)節(jié)點(diǎn)
分別在2臺(tái)服務(wù)器的DOS窗口運(yùn)行命令。
第一次,或初始化群集節(jié)點(diǎn)時(shí),運(yùn)行命令:
ndbd.exe –initial
初始化之后,只運(yùn)行 ndbd.exe 即可。若帶參數(shù) –initial 運(yùn)行,將使正常運(yùn)行的群集系統(tǒng)中,數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)全部丟失。
數(shù)據(jù)節(jié)點(diǎn)依賴管理節(jié)點(diǎn)服務(wù)器,進(jìn)行數(shù)據(jù)的自動(dòng)復(fù)制和同步,使各個(gè)數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)保持一致,并在某個(gè)數(shù)據(jù)節(jié)點(diǎn)意外關(guān)閉又恢復(fù)后,進(jìn)行數(shù)據(jù)的恢復(fù)重建。
3,啟動(dòng)SQL節(jié)點(diǎn)
有了 ndbcluster 語句,啟動(dòng) mysql 服務(wù),就啟動(dòng)了SQL節(jié)點(diǎn)。應(yīng)在前2種節(jié)點(diǎn)啟動(dòng)后,分別在2臺(tái)服務(wù)器上進(jìn)行。
六、群集管理
在所有的數(shù)據(jù)節(jié)點(diǎn)和SQL節(jié)點(diǎn)未啟動(dòng)之前,運(yùn)行群集管理節(jié)點(diǎn)服務(wù)的客戶端 ndb_mgm.exe,只能獲得以下信息:
C:\ndb_mgm.exe
— NDB Cluster — Management Client –
ndb_mgm show
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 10.0.0.201)
id=3 (not connected, accepting connect from 10.0.0.202)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.0.0.201 (mysql-5.1.44 ndb-7.1.3)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.0.0.201)
id=5 (not connected, accepting connect from 10.0.0.202)
ndb_mgm
說明數(shù)據(jù)節(jié)點(diǎn)、SQL節(jié)點(diǎn)均未連接到管理節(jié)點(diǎn)服務(wù)。
在所有的數(shù)據(jù)節(jié)點(diǎn)和SQL節(jié)點(diǎn)正確啟動(dòng)之后,將獲得以下信息:
ndb_mgm show
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 @10.0.0.201 (mysql-5.1.44 ndb-7.1.3, Nodegroup: 0, Master)
id=3 @10.0.0.202 (mysql-5.1.44 ndb-7.1.3, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.0.0.201 (mysql-5.1.44 ndb-7.1.3)
[mysqld(API)] 2 node(s)
id=4 @10.0.0.201 (mysql-5.1.44 ndb-7.1.3)
id=5 @10.0.0.202 (mysql-5.1.44 ndb-7.1.3)
ndb_mgm
關(guān)閉群集的DOS命令:
ndb_mgm -e shutdown
或在 ndb_mgm 環(huán)境下執(zhí)行 shutdown 命令。
以上命令或關(guān)閉管理節(jié)點(diǎn)服務(wù)和所有的數(shù)據(jù)節(jié)點(diǎn)。隨意、強(qiáng)行關(guān)閉群集系統(tǒng)(關(guān)機(jī)或關(guān)閉進(jìn)程),會(huì)導(dǎo)致數(shù)據(jù)沒有全部寫回磁盤而導(dǎo)致的數(shù)據(jù)丟失。
關(guān)閉SQL節(jié)點(diǎn)的 mysqld 服務(wù):
C:\net stop mysql,或:
C:\mysqladmin -u root shutdown
七、測試
正常運(yùn)行的 MySQL 群集系統(tǒng),通過SQL節(jié)點(diǎn)可以對(duì)數(shù)據(jù)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)庫操作,各數(shù)據(jù)節(jié)點(diǎn)可以自動(dòng)進(jìn)行數(shù)據(jù)同步。某一個(gè)數(shù)據(jù)節(jié)點(diǎn)關(guān)閉后,不影響SQL節(jié)點(diǎn)的使用。某些數(shù)據(jù)節(jié)點(diǎn)出錯(cuò)后,可以進(jìn)行恢復(fù)。需要注意的是,SQL節(jié)點(diǎn)建立數(shù)據(jù)庫時(shí),必須選擇“ndbcluster”數(shù)據(jù)庫引擎。如果不選擇“ndbcluster”引擎,建立的數(shù)據(jù)庫將不會(huì)進(jìn)入MySQL群集系統(tǒng)中,但是可以獨(dú)立使用。
另外,每個(gè) NDB 表必須有一個(gè)主鍵。如果在創(chuàng)建表時(shí)未定義主鍵,NDB Cluster 存儲(chǔ)引擎將自動(dòng)生成隱含的主鍵。該隱含的鍵也將占用空間,就像任何其他的表索引一樣。由于沒有足夠的內(nèi)存來容納這些自動(dòng)創(chuàng)建的鍵,出現(xiàn)問題并不罕見。
使用mysql的基本命令(在mysql命令行編輯每輸入完命令后最后一定要有分號(hào),不然會(huì)報(bào)錯(cuò))
顯示數(shù)據(jù)庫:show databases;
使用數(shù)據(jù)庫:use 數(shù)據(jù)庫名;建庫
命令:create database shujuku(數(shù)據(jù)庫名);
5.為數(shù)據(jù)庫設(shè)置權(quán)限(用戶和密碼)
命令:grant all privileges on shujuku.* to test@localhost
identified by “123456”;
當(dāng)你執(zhí)行完這個(gè)命令以后,只要你再以用戶名:test,密碼:123456登錄時(shí)你就只可以對(duì)shujuku這個(gè)數(shù)據(jù)庫操作,這樣避開使用root,對(duì)數(shù)據(jù)庫的安全有很大幫助.6.建表
命令:create table biao(id int(8) primary key,name
varchar(10));
剩下來的與標(biāo)準(zhǔn)sqsl命令基本上是一樣的,具體操作略
值得一提的是,你在命令行上輸入"?",就會(huì)有mysql命令的簡單幫助,如下:
呵呵,那樣,我們還可以知道退出,就是"exit",呵呵!
關(guān)于mysql-front的使用
我找了好幾個(gè)mysql的界面工具,覺得最簡潔方便還是mysql-front,可惜的是要收費(fèi),不過還好有試用期,呵呵,可以先感受感受一下,最重要一點(diǎn)是mysql-front有簡體中文版的,英文不好的我用起來就舒服多了.下面簡單說說使用吧.
首先,安裝就不用說了,有向?qū)?,而且很簡單.安裝好后第一次運(yùn)行時(shí)會(huì)跳出來一個(gè)要求添加對(duì)話的框,在這里你可以添加例如上面已經(jīng)設(shè)定好的shujuku,過程如下:
當(dāng)你在注冊(cè)的復(fù)選框里填上你在上面mysql設(shè)定好的用戶名和密碼后,在選擇數(shù)據(jù)庫框里就有shujuku
的數(shù)據(jù)庫了,選上,按確定.進(jìn)入mysql-fron后,你就會(huì)看到下面的界面,這是你就可以進(jìn)行操作了.
要說明的是,你還可以把root用戶也加進(jìn)去,這要你在mysql-fron的界面上選設(shè)置->對(duì)話->新建,再按上面進(jìn)行就可以,出了root你還可以加入更多的用戶,方法還是一樣的,設(shè)置不同的用戶,是方便對(duì)不同數(shù)據(jù)庫進(jìn)行管理,呵呵,root是權(quán)限最高的,可不要隨便讓別人使用你的root用戶,保正你數(shù)據(jù)庫的安全.
希望這篇文章的你有幫助!
-+-+-+-+-+-+-+-+-+-+-+-
-+-+mysql的主從配置+-+-
-+-+-+-+-+-+-+-+-+-+-+-
#############################################################################
常用命令
1.安裝一個(gè)mysqld服務(wù)
mysqld??install??
2.開啟mysql服務(wù)????????關(guān)閉mysql服務(wù)??
net?start?mysql??????net?stop?mysql
2.開啟一個(gè)?mysql?的?3307端口
命令行?進(jìn)入解壓目錄\bin目錄下
解壓目錄\bin?mysql?-uroot??-p??-P3307?-h127.0.0.1
-u?用戶名
-p密碼
-P端口
-h網(wǎng)址
#啟動(dòng)從庫
Start?slave
#停止從庫
Stop?slave
#############################################################################
開始
用一臺(tái)電腦測試
先在本電腦上安裝一個(gè)mysql(集成的也行)
解壓文件
然后解壓另一個(gè)mysql到電腦目錄
》》》》》1.
在解壓目錄創(chuàng)建一個(gè)mysql.ini
把一下文檔寫進(jìn)去配置一個(gè)端口號(hào)為3307
#mysqld
[mysqld]
port=3307
basedir=D:\mysqlsever?????????#D:\mysqlsever?改成你解壓目錄
datadir=D:\mysqlsever\data????#D:\mysqlsever?改成你解壓目錄
安裝一個(gè)mysqld服務(wù)????mysqld??install
開啟mysql服務(wù)?????????net?start?mysql
不能正常啟動(dòng)請(qǐng)查看配置
》》》》2.
#主庫3306
在命令行或者
grant?權(quán)限?on?數(shù)據(jù)庫對(duì)象?to?用戶
GRANT?all?privileges?REPLICATION?SLAVE,RELOAD,SUPER?ON?*.*
TO?mysql_backup1@'*'
IDENTIFIED?BY?'123456'with?grant?option;
flush?privileges;
》》》3.
在主庫運(yùn)行???SHOW?MASTER?STATUS???????//運(yùn)行后查看File和Postion
如??File?mysql-bin.000002???Postion?120
在從庫運(yùn)行??
CHANGE?MASTER?TO?master_host?=?'127.0.0.1',
master_user?=?'mysql_backup',
master_password?=?'123456',
master_log_file?=?'mysql-bin.000001',#看上面的File??從庫對(duì)照主庫寫
master_log_pos?=?4791;#看上面的Postion????從庫對(duì)照主庫寫
如果報(bào)錯(cuò)就停止就重新運(yùn)行
#啟動(dòng)從庫
Start?slave
#停止從庫
Stop?slave
在從庫運(yùn)行??Show?slave?status
Slave_IO_Running
Slave_SQL_Running
兩個(gè)字段全部是是Yes基本上就成功了
測試
在主庫上建立一個(gè)表??在從庫上刷新
############################################################################
一個(gè)最簡單的MySQL集群通常是一主一從的架構(gòu)(Master-Slave)
MySQL自帶有主從同步的功能
主要步驟如下:
在主庫上創(chuàng)建一個(gè)同步賬號(hào)
GRANT SELECT,REPLICATION SLAVE ON *.* TO user@'%' IDENTIFIED BY'123456'
在從庫上設(shè)置主庫
change master to master_host='主庫IP',master_port=主庫端口,master_user='user',master_password='123456',master_auto_position=1;(mysql5.6以上)
change master to master_host='主庫IP',master_port=主庫端口,master_user='user',master_password='123456',MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0,
在從庫上啟動(dòng)同步線程
start slave;
復(fù)雜的集群通常通過第三方軟件,比如剛剛GA的MySQL官方高可用MGR