1.安裝MySQL(http://www.linuxidc.com/Linux/2009-03/18988.htm)
2.啟動(dòng)多個(gè)MySQL服務(wù)器
要實(shí)現(xiàn)在單機(jī)上啟動(dòng)多個(gè)MySQL服務(wù)器,有兩種方法,一種是直接使用mysqld_safe來運(yùn)行多個(gè)服務(wù)器-
當(dāng)然這樣分別編輯配置文件,而且關(guān)閉服務(wù)器的時(shí)候也要讀取配置文件,所以比較麻煩,另一種方法是使用
MySQL提供到工具mysqld_multi腳本來管理多個(gè)服務(wù)器,下面使用的方法是mysqld_safe來實(shí)現(xiàn)。
3.前置條件
假設(shè)MySQL安裝到目錄為/usr/local/mysql/,設(shè)為MYSQL_DIR通常它是一個(gè)鏈接文件。
數(shù)據(jù)文件目錄為$MYSQL_DIR/data。
現(xiàn)在要添加另一個(gè)服務(wù)器的數(shù)據(jù)目錄,因?yàn)闉榱四M分布式服務(wù)器到同步,不可能讓多個(gè)服務(wù)器共享一個(gè)數(shù)據(jù)目錄。
$cd $MYSQL_DIR
$sudo cp -r -p data var2
上面的指令將data保留原來到權(quán)限復(fù)制一份到var2,var2也就是另一個(gè)服務(wù)器的數(shù)據(jù)目錄,這樣,在原始
狀態(tài)下,兩個(gè)數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)是一致的。
4.假設(shè)有MySQL的合法用戶root:root。
5.啟動(dòng)安裝好以后的那個(gè)服務(wù)器
$cd $MYSQL_DIR/bin
$sudo ./mysqld_safe --user=mysql --binlog-do-db=test &
上面的命令表示啟動(dòng)服務(wù)器并且使用二進(jìn)制日志記錄數(shù)據(jù)庫test的更新動(dòng)作。
6.測(cè)試是否啟動(dòng)成功
$mysql -u root -p -S/tmp/mysql.sock
輸入密碼后,如果能夠成功登錄的話表示成功,這里最容易出現(xiàn)2002錯(cuò)誤,表示socket文件錯(cuò)誤,你可以
使用命令
$ps aux|grep mysql
來查看當(dāng)前服務(wù)器使用的socket文件,然后在登錄的時(shí)候使用相應(yīng)的socket文件。
7.編輯配置文件
$sudo vi /etc/my.cnf
最初的時(shí)候,這個(gè)配置文件是針對(duì)前面啟動(dòng)的服務(wù)器的,現(xiàn)在我們把它修改一下,然后就可以啟動(dòng)另一個(gè)服務(wù)器
找到[mysqld]段落,然后修改如下:
[mysqld]
server-id=2 #原來是1
socket=/tmp/mysql.sock2 #原來是/tmp/mysql.sock
port=3307 #原來是3306
#下面3行是添加的
pid-file=$MYSQL_DIR/var2/localhost.pid2
datadir=$MYSQL_DIR/var2
log=$MYSQL_DIR/var2/db2.log
注意使用最前面的MySQL安裝目錄來代替上面的$MYSQL_DIR。
8.啟動(dòng)第二個(gè)服務(wù)器
$cd $MYSQL_DIR/bin
$sudo ./mysqld_safe --user=mysql &
9.測(cè)試第二個(gè)服務(wù)器
$mysql -u root -p -P 3307 -S /tmp/mysql.sock2
輸入密碼后,應(yīng)該能夠正確連接到mysql服務(wù)器。
現(xiàn)在,兩個(gè)服務(wù)器能夠正常的運(yùn)行在同一臺(tái)機(jī)器上了,剩下的就是配置主從服務(wù)器,然后讓主服務(wù)器更新,從服務(wù)器
連接主服務(wù)器并且保持同步。
10.同步服務(wù)器
注意到我們啟動(dòng)第一個(gè)服務(wù)器的時(shí)候使用了一個(gè)參數(shù)--binlog-do-db=test表示,我們希望把數(shù)據(jù)庫test的更新
操作都記錄到二進(jìn)制日志文件中。
1)登錄到主服務(wù)器
$mysql -u root -p -P 3306 -S /tmp/mysql.sock
2)查看主服務(wù)器的狀態(tài)
mysql>show processlist\G
上面這條命令執(zhí)行后應(yīng)該看到至少兩個(gè)線程,第一個(gè)就是登錄的線程,第二個(gè)就是發(fā)送二進(jìn)制日志
的線程。
mysql>flush tables with read lock;
mysql>show master status;
mysql>unlock tables;
記住show master status\G命令輸出的結(jié)果,這里的File是二進(jìn)制日志文件,Position是偏移量,Binlog_Do_DB
表示對(duì)哪些數(shù)據(jù)庫記錄更新操作,Binlog_Ignore_DB表示忽略哪些數(shù)據(jù)庫更新。待會(huì)兒配置從服務(wù)器時(shí)要使用File和
Position。
3)登錄到從服務(wù)器
$mysql -u root -p -P 3307 -S /tmp/mysql.sock2
4)配置從服務(wù)器
首先要確保停止從服務(wù)器同步線程
mysql>stop slave;
然后設(shè)置主服務(wù)器參數(shù)
mysql>change master to
->master_host='127.0.0.1',
->master_user='root',
->master_password='root',
->master_log_file='mysql-bin.000016',
->master_log_pos=102;
最后啟動(dòng)從服務(wù)器同步線程
mysql>start slave;
檢查從服務(wù)器同步線程是否啟動(dòng)成功
mysql>show slave status\G
如果從上面的輸出中看到了IO線程和LOG線程都是YES的話,那么表示啟動(dòng)成功,最后一行輸出表示從服務(wù)器
比主服務(wù)器滯后多少。
查看線程
mysql>show processlist;
當(dāng)從服務(wù)器同步成功啟動(dòng)以后,上面這條命令應(yīng)該輸出至少3個(gè)線程,第一個(gè)是登錄線程,第二個(gè)是IO線程,第
三個(gè)是日志線程。
11.測(cè)試同步
在主服務(wù)器中的數(shù)據(jù)庫test中任意執(zhí)行一些更新操作,然后在從服務(wù)器中查看,應(yīng)該馬上就能夠看到更新結(jié)果
本文出自:億恩科技【mszdt.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|