Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6905740
  • 博文数量: 637
  • 博客积分: 10265
  • 博客等级: 上将
  • 技术积分: 6165
  • 用 户 组: 普通用户
  • 注册时间: 2004-12-12 22:00
文章分类

全部博文(637)

文章存档

2011年(1)

2010年(1)

2009年(3)

2008年(12)

2007年(44)

2006年(156)

2005年(419)

2004年(1)

分类:

2005-10-21 12:10:29

作者﹕myz <>
-以下這份文件是針對兩台MySQL伺服器進行One-way Replication -Starting in Version 3.23.15, MySQL supports one-way replication internally. -參考文件 1.

-測試環境 
RedHat 7.3 + MySQL 3.23.49
MySQL資料庫路徑: /var/lib/mysql
MySQL設定檔: /etc/my.cnf
Master IP: 192.168.1.1
Slave IP: 192.168.1.2
-設定步驟Master/Slave
-設定Master
1.確認Master/Slave機器上所裝的MySQL版本能進行replication.Use Version 3.23.29 or higher.
2.在Master MySQL上開放一個帳號給Slave
#mysql –u root –p
mysql>GRANT FILE ON *.* TO repl@192.168.1.2 IDENTIFIED BY ‘abc123’;
mysql>q
#
上面是Master開放一個帳號repl密碼abc123給IP:192.168.1.2有檔案處理的權限.
3.shutdown MySQL on the Master
#mysqladmin –u root –p shutdown
4.備份Master所有資料庫..通常都用tar指令.
#tar –cvf /tmp/mysql-snapshot.tar /var/lib/mysql
注意:tar的時候,MySQL是要在stop情況下
不過在mysql網站的FAQ有不用shutdown的方法
5.在master機器上修改/etc/my.cnf
在[mysqld]區段內加入參數
log-bin
server-id=這邊設定server-id=1
sql-bin-update-same
binlog-do-db=phpBB只針對phpBB資料庫做紀錄
6.Restart MySQL on the master
此時因為有加入log-bin參數,因此開始有index產生了,在/var/lib/mysql目錄下有.index檔案紀錄資料庫的異動log.

-接下來設定Slave
7.在slave設定/etc/my.cnf
在[mysqld]區段加入
master-host=
master-user=
master-password=
master-port=
server-id=
這邊設定
master-host=192.168.1.1
master-user=repl
master-password=abc123
master-port=3306
server-id=2
master-connect-retry=60預設重試間隔60秒
replicate-do-db=phpBB告訴slave只做phpBB資料庫的更新
log-slave-updates
8.將master上的mysql-snapshot.tar copy到slave上
用ftp傳到slave的/tmp
9.解壓縮
#cd /var/lib/
#tar xvf /tmp/mysql-snapshot.tar
#chown –R mysql:mysql mysql
#chmod –R 770 mysql(視情況)
10.Restart MySQL on the slave server
這時在/var/lib/mysql目錄會出現master.info,此檔案紀錄了Master MySQL server的資訊.

-狀況測試
1.Master跟Slave網路及服務都正常情況下,由Master端異動資料後,
到Slave端瀏覽資料,檢視是否有進行replication?!
2.模擬Slave掛點,可用在於slave真的掛點,或是slave不一定需要一直跟master connect.
將Slave MySQL server shutdown,由Master端異動資料,到slave端瀏覽,
此時Slave應該沒有被replication更新,然後再將Slave端MySQL server start起來,
預設60秒後Slave會嘗試跟Master要求進行replication.再去Slave端檢視是否有更新資料?!
3.模擬Master掛點.那沒搞頭了,因為是設定One-way replication.一旦Master掛點,
Slave端沒有Master的source可以download,所以沒搞頭了.
4.基於第3點狀況於是發展雙向Replication,即A/B都分別擔任Master/Slave身分

-以下是針對兩台MySQL伺服器進行雙向Replication
觀念同單向replication只是改成Master也有Slave身分, Slave也有Master的身分.
先分別在A/B都去grant一個進行replication的身分
[A]mysql>GRANT FILE ON *.* TO repl@192.168.1.2 IDENTIFIED BY ‘abc123’;
[B]mysql> GRANT FILE ON *.* TO repl@192.168.1.1 IDENTIFIED BY ‘abc123’;

做完單向replication後,stop A/B MySQL service,此時A/B資料是一樣的.

修改/etc/my.cnf設定
範例:
Server A
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=1
log-bin
sql-bin-update-same
binlog-do-db=phpBB

master-host=192.168.1.2
master-user=repl
master-password=abc123
log-slave-updates
master-connect-retry=60
replicate-do-db=phpBB
Server B
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=2
log-bin
sql-bin-update-same
binlog-do-db=phpBB

master-host=192.168.1.1
master-user=repl
master-password=abc123
log-slave-updates
master-connect-retry=60
replicate-do-db=phpBB

分別start A/B MySQL後,此時雙方都是Master/Slave身分,
一但哪一方資料異動就會通知對方來replication.
-若replication失效,我的做法是將A/B的master.info及.index,.00x都砍掉,
然後分別restart MySQL server,進行測試.檢視成果.

-再來由雙向replication延伸出replication chain/(circular),即A->B->C->…(->A)
觀念chain是單向replication的延伸, circular是chain的尾巴接回頭.
舉例A-B-C-A
A為B的master,B是C的master,而C是A的master.
反過來說
B是A的slave,C是B的slave,而A是C的slave.
只要將/etc/my.cnf檔案[mysqld]區段都加入master/slave對應的參數
宣告為master是
server-id=x其中x為主機id=1,2,3
log-bin
sql-bin-update-same
binlog-do-db=phpBB

定義slave是
master-host=192.168.1.x其中x為主機ip=1,2,3
master-user=repl
master-password=abc123
log-slave-updates
master-connect-retry=60
replicate-do-db=phpBB

-測試
1.各server(A/B/C)都咦髡?O
阅读(1882) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~