6.4 設(shè)置同步
以下描述了如何快速設(shè)置mysql同步服務(wù)器。假設(shè)你打算同步全部的數(shù)據(jù)庫,并且之前沒有設(shè)置過。需要關(guān)閉master服務(wù)器以完成全部的步驟。
本章描述的過程可以用于一個slave的情況,也可以用于多個slave的情況。
這只是一個最直接設(shè)置slave的辦法,并不是只有一個。例如,已經(jīng)有了master的數(shù)據(jù)快照(snapshot),master已經(jīng)設(shè)置了服務(wù)器編號id(server_id)并且啟用了二進(jìn)制日志,這就無需關(guān)閉master或者阻止在master上更新數(shù)據(jù)了。詳情請看"6.9 replication faq"。
想要完全掌握mysql同步設(shè)置,最好把本章全部讀完,并且測試在"14.6.1 sql statements for controlling master servers"和"14.6.2 sql statements for controlling slave servers"中提到的全部語句。而且要熟悉各種同步設(shè)置選項,詳情請看"6.8 replication startup options"。
注意,這個過程以及后面一些同步sql語句需要有 super 權(quán)限。mysql 4.0.2以前,則是 process 權(quán)限。
請確認(rèn)master和slave上都安裝了較近的mysql版本,且這些版本之間要能兼容,在"6.5 replication compatibility between mysql versions"中列出來了。請確認(rèn)在最新版本中還有存在問題,否則不要報告該bug。
在master上新加一個帳戶,slave才能用它來連接。這個帳戶必須授予 replication slave 權(quán)限。如果這個帳戶只用于同步(推薦這么做),那就沒必要授予其他權(quán)限了。設(shè)定你的域是 mydomain.com,想要授權(quán)一個帳戶 repl 使用密碼 slavepass,允許它可以在域里的任何主機(jī)連接到master上。用 grant 語句來創(chuàng)建帳戶:
mysql> grant replication slave on *.*
-> to 'repl'@'%.mydomain.com' identified by 'slavepass';
在mysql 4.0.2以前,用 file 權(quán)限來代替 replication slave:
mysql> grant file on *.*
-> to 'repl'@'%.mydomain.com' identified by 'slavepass';
如果打算在slave上執(zhí)行 load table from master 或 load data from master 語句,那么必須給該帳戶授予附加權(quán)限:
授予全局 super 和 reload 權(quán)限。
授予對想要加載的所有表上的 select 權(quán)限。在master上任何沒有 select 權(quán)限的表都會被 load data from master 略過。
如果只用到 myisam 表,執(zhí)行 flush tables with read lock 語句刷新所有表并且阻止其他寫入:
mysql> flush tables with read lock;
不要退出執(zhí)行 flush tables 語句的客戶端,以保持讀鎖有效(如果退出了,讀鎖就釋放了)。然后從master上取得數(shù)據(jù)快照。比較簡單的辦法就是把數(shù)據(jù)目錄打包壓縮。例如,unix上的 tar, powerarchiver, winrar, winzip,或windows上的類似程序。想要用 tar 來創(chuàng)建一個壓縮包,包括所有的數(shù)據(jù)庫,只需執(zhí)行以下命令(把目錄改成你的真實路徑):
shell> tar -cvf /tmp/mysql-snapshot.tar .
如果只想打包一個數(shù)據(jù)庫 this_db,只需執(zhí)行命令:
shell> tar -cvf /tmp/mysql-snapshot.tar ./this_db
然后把這個文件拷貝到slave的 `/tmp` 目錄下。在slave上,執(zhí)行以下命令解開壓縮包(把目錄改成你的真實路徑):
shell> tar -xvf /tmp/mysql-snapshot.tar
可能不需要同步 mysql 數(shù)據(jù)庫,因為在slave上的權(quán)限表和master不一樣。這時,解開壓縮包的時候要排除它。同時在壓縮包中也不要包含任何日志文件,或者 `master.info~ 或 `relay-log.info` 文件。當(dāng)在master上的 flush tables with read lock 語句還生效時,在master上讀取當(dāng)前二進(jìn)制文件的文件名及偏移位置:
mysql > show master status;
+---------------+----------+--------------+------------------+
| file | position | binlog_do_db | binlog_ignore_db |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
新聞熱點
疑難解答
圖片精選