1. 程式人生 > >MySQL集群主從復制搭建

MySQL集群主從復制搭建

targe ini文件 https 從庫 記錄 3.3 fat 服務器 tps

準備知識:

MySQL主從復制(Master-Slave) 原理

技術分享圖片

即是通俗的講,主從服務器通過I/O線程通訊。二進制日誌記錄了數據的變動情況,從節點 就是通過讀取 主節點二進制日誌 來進行數據復制的,如果沒有啟動 二進制日誌 ,復制將無法進行。

在主節點中,必須開啟二進制日誌 (binlog) 並設定一個唯一的 Server ID。如果沒有這樣,需要配置好了後重啟MySQL服務。

註意:

Replication方案只能在Master數據庫進行寫操作,在Slave數據庫進行讀操作。如果在Slave數據庫中寫入數據,Master數據庫是不能知道的(單向同步的)。

允許將來自一個MySQL數據庫服務器(主服務器)的數據復制到一個或多個

MySQL數據庫服務器(從服務器)。

復制組中的每個服務器必須配置一個唯一的服務器ID,用於標識組中的不同服務器。

MySQL的復制有如下優點:

  • 擴展解決方案 - 在多個Slaves(從節點)中傳播負載以提高性能。在此環境中,所有的寫和更新在主服務器中進行。然後,讀操作可以在一個或多個Slave節點中進行。此模型可以提高寫的性能(因為主節點專用於更新),同時,在越來越多的從節點上提高讀取速度。
  • 數據安全 - 因為數據復制到了從節點,從節點可以暫停復制進程,才有可能在不影響主節點數據的情況下啟動數據備份服務。
  • 分析 - 在主節點上創建實時數據,從而在不影響主節點性能的情況下進行信息分析。
  • 遠程數據分布 - 如果分支機構希望使用主數據副本,則可以使用復制功能創建數據的本地副本以供其使用,而無需永久訪問主數據。

主-從搭建的步驟:

一、準備的環境:(自行選擇)

1. OS: Master:使用centos6.5. slave:使用windows server 2012 (64位).

2. 軟件: MySQL。(此處使用的版本為5.1.7.3)。

二、軟件的安裝。(自行安裝),安裝都不會那就算了。

(Linux自己使用yum 源或者下源碼編譯安裝,Windows執行可執行文件。這裏安裝不是重點)

三、節點的配置

3.1 主節點先配置

  在my.cnf 中新增如下配置:

[mysqld]
log-bin = mysql-bin
server-id = 1

  註意:主節點是Linux配置文件是my.cnf,通常在/etc/my.cnf。主節點是Windows在my.ini中新增配置。

3.2 從節點的配置

  在從節點上,必須指定唯一 Server ID。可以不為從節點開啟二進制日誌,如果開啟了,也可以用於數據備份和恢復。

  在my.ini文件中配置如下:

[mysqld]
server-id = 2

  註意:主節點是Linux配置文件是my.cnf,通常在/etc/my.cnf。主節點是Windows在my.ini中新增配置。

3.3 創建復制用戶

  從節點需要有一個主節點上的用戶來連接主節點,任何一個有 REPLICATION SLAVE 權限的用戶都可以用戶復制操作。登錄到主節點,執行如下命令:

mysql> CREATE USER ‘test’@’%’ IDENTIFIED BY ‘test’;
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘test’@’%’;

3.4 備份主節點已經有的數據

  登錄在主節點:

mysql> mysqldump -p –all-databases > /tmp/dbdump.db

3.5 在從節點同步已經有的數據

  登錄在從節點。提前把主節點的備份文件復制過來。如使用 scp遠程登錄復制。

mysql> source /tmp/dbdump.db

3.6 查詢主節點的BinLog坐標

mysql> SHOW MASTER STATUS\G; (註意是大寫)

  技術分享圖片

  記錄下File,Position冒號後的值。留待下一步使用。

3.7 為從節點指定復制主節點

change master to master_host=‘X.X.X.X‘,master_user=‘test‘,master_password=‘test‘,master_log_file=‘mysql-bin.000004‘,master_log_pos=1827695;

  註意:X.X.X.X為你的主節點的IP。後面的是之前配置的復制用戶和密碼,以及取得的主節點的文件名和BinLog坐標

3.8 啟動以及驗證。

  登錄到從節點的MySQL:

mysql> START SLAVE;

mysql> show slave status\G;

  技術分享圖片

  沒有報錯則說明成功。

  

我遇到的錯誤:

【MySQL】Got fatal error 1236,仔細看了一下。是提示max_allowed_packet 大小。

原因:

首先max_allowed_packet控制著主從復制過程中,一個語句產生的二進制binlog event大小,它的值必須是1024的倍數 。出現此類錯誤的常見原因是
1 該參數在主備庫的配置大小不一樣,主庫的配置值大於從庫的配置值。 從主庫傳遞到備庫的binlog event大小超過了主庫或者備庫的max_allowed_packet大小。
2 主庫有大量數據寫入時,比如在主庫上執行 laod data,insert into .... select 語句,產生大事務。
當主庫向從庫傳遞一個比從庫的max_allowed_packet 大的packet ,從庫接收該packet失敗,並報 “log event entry exceeded max_allowed_packet“。

解決方法1:

  1. set global max_allowed_packet =1*1024*1024*1024;
  2. stop slave;
  3. start slave

解決方法2:

重新執行3.6,3.7,3.8。

如:

登錄mysql>

stop slave;(必須先停止才能執行下個命令)。

change master to master_log_file=‘mysql-bin.000004‘, master_log_pos=215987;

start slave;

完。

MySQL集群主從復制搭建