mysql 命令行 设置同步_MySQL同步(二) 设置同步
File 字段顯示了二進(jìn)制日志文件名,Position 字段顯示了日志偏移位置。在這個(gè)例子中,日志文件是 mysql-bin.003,偏移位置是 73。記下這些值,在后面設(shè)置slave的時(shí)候就需要用到它們了。它們表示了slave要從master的哪個(gè)偏移位置開(kāi)始處理更新操作。取得快照和記錄下日志名及偏移位置后,就可以讓master釋放讀鎖了:
mysql> UNLOCK TABLES;
如果用到 InnoDB 表,那么最好使用 InnoDB Hot Backup 工具。它無(wú)需在master上請(qǐng)求任何鎖就能做到快照的一致性,并且在后面中在slave上要用到的快照中已經(jīng)記錄了日志文件名以及偏移位置。InnoDB Hot Backup 是費(fèi)免費(fèi)(商業(yè)的)的附加工具,它沒(méi)有包含在MySQL發(fā)布包中。訪問(wèn) InnoDB Hot Backup 的主頁(yè) http://www.innodb.com/manual.php 查看更多詳細(xì)信息。除去 InnoDB Hot Backup 的另一個(gè)最快的辦法就是關(guān)閉master服務(wù)器,拷貝 InnoDB 數(shù)據(jù)文件,日志文件,以及表結(jié)構(gòu)定義文件(`.frm` 文件)。想要記錄當(dāng)前日志文件及偏移位置,需要在master關(guān)閉前執(zhí)行如下可語(yǔ)句:
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
盡快記下 SHOW MASTER STATUS 顯示結(jié)果中的日志文件及偏移位置。然后,在不解鎖的情況下關(guān)閉master,確保master上的快照和記錄的結(jié)果一致:
shell> mysqladmin -u root shutdown
還有一個(gè)方法可以同時(shí)用于 MyISAM 和 InnoDB 表,這就是在master上作SQL轉(zhuǎn)儲(chǔ)而無(wú)需如上所述備份二進(jìn)制日志。在master上運(yùn)行 mysqldump --master-data 命令,然后把結(jié)果文件轉(zhuǎn)儲(chǔ)到slave上。不過(guò),這比拷貝二進(jìn)制日志慢點(diǎn)。如果master在以前沒(méi)有啟用 --log-bin 選項(xiàng),那么執(zhí)行 SHOW MASTER STATUS 語(yǔ)句的結(jié)果中的文件名及偏移位置值為空了,那么后面在slave上指定的參數(shù)值就是空字符串('') 和 4了。
確認(rèn)master上的 `my.cnf` 文件 [mysqld] 區(qū)間有 log-bin 選項(xiàng)。這個(gè)區(qū)間還必須有 server-id=master_id 選項(xiàng),的值必須是 1 到 2^32-1 之間的正整數(shù)。例如:
[mysqld]
log-bin
server-id=1
如果這些配置選項(xiàng)不存在,那么就加上并且重啟master。
關(guān)閉要做slave的服務(wù)器,在 `my.cnf` 文件中增加如下選項(xiàng):
[mysqld]
server-id=slave_id
slave_id 的值和 master_id 類似,是 1 到 2^32-1 之間的正整數(shù)。另外,這個(gè)ID必須不能和master的ID一樣。例如:
[mysqld]
server-id=2
如果有多個(gè)slave,那么每個(gè)slave都必須要有一個(gè)唯一的 server-id,它的值不能和master以及其其他slave的值一樣。可以把 server-id 想象成為IP地址:這些ID標(biāo)識(shí)了整個(gè)同步組合中的每個(gè)服務(wù)器。如果沒(méi)有指定 server-id 的值,如果也沒(méi)定義 master-host,那么它的值就為1,否則為2。注意,如果沒(méi)有設(shè)定 server-id,那么master就會(huì)拒絕所有的slave連接,同時(shí)slave也會(huì)拒絕連接到master上。因此,省略配置 server-id 只對(duì)備份二進(jìn)制日志有利。
如果已經(jīng)備份了master上的數(shù)據(jù)(直接打包壓縮的方式),那么在slave啟動(dòng)之前把它們拷貝過(guò)去。要確保文件的權(quán)限屬主等設(shè)置沒(méi)問(wèn)題。MySQL運(yùn)行的用戶必須對(duì)這些文件有讀寫(xiě)權(quán)限,就跟在master上一樣。如果是用 mysqldump 備份的,那么可以直接啟動(dòng)salve(直接跳到下一步)。
啟動(dòng)slave,如果它之前已經(jīng)運(yùn)行同步了,那么在啟動(dòng)slave的時(shí)候使用 --skip-slave-start 選項(xiàng)使之不會(huì)立刻去連接master。最好也使用 --log-warnings 選項(xiàng)(從 MySQL 4.0.19 和 4.1.2 開(kāi)始就是默認(rèn)啟用了)來(lái)啟動(dòng)slave,以知道發(fā)生問(wèn)題時(shí)的更詳細(xì)的信息(例如,網(wǎng)絡(luò)或者連接問(wèn)題)。從開(kāi)始MySQL 4.0.21 和 4.1.3,異常中止的連接不再記錄到錯(cuò)誤日志中,除非 --log-warnings 選項(xiàng)的值大于1。
如果在master上用 mysqldump 備份數(shù)據(jù)的話,把文件導(dǎo)入slave中:
shell> mysql -u root -p < dump_file.sql
在slave上執(zhí)行如下語(yǔ)句,把各個(gè)選項(xiàng)的值替換成真實(shí)值:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
下表列出了各個(gè)選項(xiàng)字符串的最大長(zhǎng)度:
MASTER_HOST
60
MASTER_USER
16
MASTER_PASSWORD
32
MASTER_LOG_FILE
255
啟動(dòng)slave線程:
mysql> START SLAVE;
做完上述過(guò)程后,slave應(yīng)該會(huì)連接到master上并且捕獲所有從取得快照后的更新操作。
如果忘了設(shè)置master的 server-id 值,那么slave就不能連接到master上。
如果忘了設(shè)置master的 server-id 值,那么在錯(cuò)誤日志中就會(huì)記錄如下內(nèi)容:
Warning: You should set server-id to a non-0 value if master_host is set;
we force server id to 2, but this MySQL server will not act as a slave.
如果因?yàn)槠渌虿荒芡降脑?#xff0c;錯(cuò)誤信息也會(huì)記錄在slave的日志上。
一旦slave開(kāi)始同步了,就能在數(shù)據(jù)文件目錄下找到2個(gè)文件 `master.info` 和`relay-log.info`。slave利用這2個(gè)文件來(lái)跟蹤處理了多少master的二進(jìn)制日志。
不要?jiǎng)h除或者修改這2個(gè)文件,除非知道怎么改。盡管如此,我們更推薦用 CHANGE MASTER TO 語(yǔ)句來(lái)做。
注意:`master.info` 中的內(nèi)容覆蓋了部分命令行中指定的或 `my.cnf` 的選項(xiàng)。詳情請(qǐng)看"6.8 Replication Startup Options"。
只要有了master的數(shù)據(jù)快照,就可以按照上述幾個(gè)步驟配置其它slave了。無(wú)需再次取得master的數(shù)據(jù)快照,每個(gè)slave都可以用這一份快照來(lái)做。
引用:
http://database.ccidnet.com/art/1105/20060811/792867_1.html
http://database.ccidnet.com/art/1105/20060811/792867_2.html
總結(jié)
以上是生活随笔為你收集整理的mysql 命令行 设置同步_MySQL同步(二) 设置同步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux用date指令,Linux中d
- 下一篇: python获取shell输出及返回码_