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的命令行,執行:如下命令

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,同步帳號密碼,同步位置,如下:

change master to master_host='192.168.3.135', master_user='repl',master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=336;

注: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數據庫中讀取書據。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章