1. 程式人生 > >MySQL主從伺服器的配置與讀寫分離實現

MySQL主從伺服器的配置與讀寫分離實現

1.1.          MySQL的Master和Slave配置

MySQL主從同步是目前使用比較廣泛的資料庫架構,技術比較成熟,配置也不復雜,特別是對於負載比較大的網站,主從同步能夠有效緩解資料庫讀寫的壓力。

1.1.1.   MySQL主從同步的機制

1. Slave 上面的IO執行緒連線上 Master,並請求從指定日誌檔案的指定位置(或者從最開始的日誌)之後的日誌內容;

2. Master 接收到來自 Slave 的 IO 執行緒的請求後,通過負責複製的 IO執行緒根據請求資訊讀取指定日誌指定位置之後的日誌資訊,返回給 Slave 端的 IO執行緒。返回資訊中除了日誌所包含的資訊之外,還包括本次返回的資訊在 Master 端的 Binary Log 檔案的名稱以及在 BinaryLog 中的位置;

3. Slave 的 IO 執行緒接收到資訊後,將接收到的日誌內容依次寫入到 Slave 端的RelayLog檔案(MySQL-relay-bin.xxxxxx)的最末端,並將讀取到的Master端的bin-log的檔名和位置記錄到master-info檔案中,以便在下一次讀取的時候能夠清楚的高速Master“我需要從某個bin-log的哪個位置開始往後的日誌內容,請發給我”

4. Slave 的 SQL 執行緒檢測到 Relay Log 中新增加了內容後,會馬上解析該 Log 檔案中的內容成為在 Master端真實執行時候的那些可執行的 Query 語句,並在自身執行這些 Query。這樣,實際上就是在 Master 端和 Slave端執行了同樣的 Query,所以兩端的資料是完全一樣的。

1.1.2.   MySQL主從同步的作用

Ø  可以作為一種備份機制,相當於熱備份

Ø  可以用來做讀寫分離,均衡資料庫負載

1.1.3.   MySQL主從同步的步驟

1.1.3.1.           準備操作

Ø 主從資料庫版本一致,建議版本5.5以上

Ø 主從資料庫資料一致

Ø 主從資料庫所在的伺服器能夠相互ping通,即能夠互聯互通

Ø 確保從資料庫能夠連線主資料庫,root使用者能夠遠端訪問資料庫

1.1.3.1.           主資料庫master修改

Ø 修改MySQL配置

修改/etc/mysql/my.cnf檔案,找到下面的註釋行,將註釋開啟:

server-id              =1   88

log_bin                 =/var/log/mysql/mysql-bin.log   89

Ø 重啟mysql,建立用於同步的賬戶:

進入MySql的命令列,執行:如下命令

命令解釋:

*.*:所有資料庫的所有許可權,可以根據需要設定

user:用於從資料庫同步資料的賬號

ip:從資料庫的ip地址,可以設定為“%”即允許所有的ip

                                     password:用於從資料庫同步資料賬號的密碼

然後執行mysql>flush privileges;更新資料庫許可權,使上面的命令生效。

Ø 查詢master的狀態

注:記住自己上面紅色圈起來的值,在後面會用到。執行完這個步驟後不要再操作主資料庫了,防止主資料庫狀態值變化。

1.1.3.2.           從資料庫slave修改

Ø 修改MySQL配置:

server-id           = 2

注:server-id的值必須保證沒有被別的MySQL服務所使用。

重啟mysql;

Ø 執行同步命令:

進入MySql的命令列,設定主資料庫ip,同步帳號密碼,同步位置,如下:

注:master_log_file='mysql-bin.000002',master_log_pos=336,這兩個屬性的值,就是上面截圖中,紅色圈起的值。

繼續執行命令:start slave;開啟同步功能。

Ø 檢查從資料庫狀態:

執行命令:show slave status\G;得到以下輸出,輸出的部分截圖:

注:1.   將上面所有命令中的紅色字型修改為自己實際的值。

2.    Slave_IO_RunningSlave_SQL_Running程序必須正常執行,即YES狀態,否則說明同步失敗。

3.    在配置從資料庫是,如果出現了ERROR1201 (HY000): Could not initialize master info structure;這個錯誤,則是之前曾做過主從複製,解決方案是:執行命令 stop slave;成功執行後繼續執行 reset slave;然後繼續執行GRANT命令重新設定主從複製。如果是別的錯誤,請到搜尋引擎搜尋自己的錯誤及解決方案。如果沒有出現錯誤,請忽略此項。

1.1.3.1.           其他可能用到的相關引數

Ø master端:

MySQL的安裝目錄下找到my.ini的配置檔案,在最後加入如下配置:

# 不同步哪些資料庫

binlog-ignore-db = mysql

binlog-ignore-db = test

binlog-ignore-db = information_schema

# 只同步哪些資料庫,除此之外,其他不同步

binlog-do-db = game

# 日誌保留時間

expire_logs_days = 10

# 控制binlog的寫入頻率。每執行多少次事務寫入一次

# 這個引數效能消耗很大,但可減小MySQL崩潰造成的損失

sync_binlog = 5

# 日誌格式,建議mixed

# statement 儲存SQL語句

# row 儲存影響記錄資料

# mixed 前面兩種的結合

binlog_format= mixed

1.2.  讀寫分離

完成MySQL的主從配置,實現資料的實時同步,採用架構的方式實現MySQL的讀寫分離。

統一認證平臺完成資料的增刪改的操作,儲存資料到MySQLMaster的資料庫中,Salve資料庫從Master資料庫中實時同步資料,應用系統從Salve資料庫中讀取書據。