MySQL集群主從復制搭建


准備知識:

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;

 完。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM