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的命令行,執行:如下命令
grant replication slave on*.* to 'user'@'ip' identified by 'password';
命令解釋:
*.*:所有數據庫的所有權限,可以根據需要設置
user:用於從數據庫同步數據的賬號
ip:從數據庫的ip地址,可以設置爲“%”即允許所有的ip
password:用於從數據庫同步數據賬號的密碼
然後執行mysql>flush privileges;更新數據庫權限,使上面的命令生效。
Ø 查詢master的狀態
執行show master status;語句會輸出:
注:記住自己上面紅色圈起來的值,在後面會用到。執行完這個步驟後不要再操作主數據庫了,防止主數據庫狀態值變化。
1.1.3.2. 從數據庫slave修改
Ø 修改MySQL配置:
修改/etc/mysql/my.cnf文件,找到下面的註釋行,將註釋打開:
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數據庫中讀取書據。