復制
復制是從一個MySQL服務器(master)將數據拷貝到另外一台或多台MySQL服務器(slaves)的過程.復制是異步進行的--slaves服務器不需要持續地保持連接來接收master的數據.依據配置的不同,可以復制所有數據庫,或指定的數據庫,甚至是某一數據庫指定的表.
使用復制功能的目的在於:
MySQL的復制是單向異步的,這與MySQL Cluster的同步復制特性正好相反.MySQL5.5支持半同步(semisynchronous),即在master上的提交之後,並不是立即返回,而是等待至少有一個slave確認說已經收到和記錄了當前事務之後,再返回.
最好的復制方法與數據的展現方式及所選擇的存儲引擎有關,核心的復制格式有兩種:SBR(Statement Based Replication) -- 復制所有的SQL語句,和RBR(Row Based Replication) -- 僅復制被改變的rows. 當然也有最三種方案可供選擇:MBR(Mixed Based Replication),這也是MySQL5.5之後版本的默認模式.
復制配置
MySQL服務器之間的復制使用的是二進制日志機制.對master的更新與變動都會作為事件(event)記錄在日志中,日志中的信息會隨變化的不同被記錄成不同的格式.slaves被配置成從master讀取日志,並且執行二進制日志中的事件到slave本地數據庫.一旦master啟動二進制日志功能,那麼所有語句操作都會被記錄下來,每一個slave會收到一份整個日志內容的拷貝.slave的責任就是決定日志中的哪條語句需要被執行,而我們不能通過配置master來僅僅記錄某些特定的事件.如果您沒有另行指定,在主服務器二進制日志中的所有事件都在slave上執行.如果需要,還可以配置slave僅應用來自於特定數據庫或表的事件.
每個slave都會保持一份二進制日志文件的記錄,且記錄其已經讀取和處理過記錄的位置.這表明,多個slaves可以連接到master,並且執行日志的不同部分,因為slave自己來控制這個過程,單個slave的斷開與連接,不會影響master的操作.同時也正因為每個slave會記錄二進制日志中的位置,所以slaves可以斷開,重連,然後從記錄的位置開始起上.
Master和每一個slave都必須賦予一個唯一的ID(可能使用server_id),另外,還必須告知slave其master的主機,日志文件名和位置(position).可以在會話中通過CHANGE MASTER TO來改變,詳細信息會記錄在master.info文件中.
1. 如何啟動復制
1.1 創建一個用於復制的用戶
每個slave都必須使用標准MySQL用戶名和密碼連接到master,任何帳號都可以,只要被授予了REPLICATION SLAVE權限.雖然創建一個單獨用於復制的用戶並不是必須的,但是你需要清楚的是用於復制的帳號的用戶名與密碼都是用明文的方式存儲在master.info中的,因此出於安全的考慮還是創建一個的好.如:
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.158.1.100' IDENTIFIED BY 'testpass';
即創建了一個用戶名為"repl",密碼為"testpass"的帳號,所有的slaves都可以使用同一個帳號,當然我們也可以為每一個slave都創建一個登錄帳號.
1.2 配置Master
首先,必須得開啟master的二進制日志功能,其次為master設置一個唯一的server-id -- 1~p, li { white-space: pre-wrap; }232-1 之間的正整數.如在my.cnf或my.ini中作如下設置:
[mysqld]
log-bin=master-bin
server-id=1
需要注意的是:為了在使用InnoDB事務時創建復制達到最大可能的穩定及一致,你需要使用:innodb_flush_log_at_trx_commit=1和sync_binlog=1兩個選項.並同時確保:skip-networking=0否則slave與master就無法通信了.
1.3配置Slave
在slave上我們唯一需要配置的就是為slave指定一個唯一的server-id. Slave上的二進制日志功能的開啟不必須的,但開啟可以用來作slave上的數據備份或災難數據恢復,同時也可以使用slave作為更復雜復制拓撲架構的一部分(如:某個slave作為其它slaver的master時).
1.4 獲取Master信息
為了配置slave復制,你需要知道master在其二進制日志中的當前位置,這樣當slave開始復制過程時,就知道從當前這個點開始處理事件了.如果在master上已經存在數據,且這些數據需要在開始復制之前同步到其它slaves上,那麼你就得讓master停止處理語句,獲得當前位置,然後導出數據.為了得到master的狀態信息,需要通過下面的步驟:
p, li { white-space: pr 1.5 在Slave上配置Master信息
mysql> CHANGE MASTER TO -> MASTER_HOST='master_host_name', -> MASTER_USER='replication_user_name', -> MASTER_PASSWORD='replication_password', -> MASTER_LOG_FILE='master_bin_log_file_name', -> MASTER_LOG_POS='recorded_log_position';
2. 復制格式的選擇
每種二進制日志格式都有自己的優缺點,對大多數用戶來說,MBR提供了最好的效果.但當需要為某些特定任務選取SBR或RBR時,可以通過下面的比較來決定哪一個更適合:
SBR的優勢:
SBR的劣勢:
RBR的優勢:
RBR的劣勢:
相關命令
推薦:http://www.cnblogs.com/roucheng/p/mysqljichu.html