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_Running及Slave_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的讀寫分離。
統一認證平臺完成資料的增刪改的操作,儲存資料到MySQL的Master的資料庫中,Salve資料庫從Master資料庫中實時同步資料,應用系統從Salve資料庫中讀取書據。