mysql主從配置

主從形式:一主一從,主主複製,聯級複製,一主多從--擴展系統讀取性能,多主一從--5.7開始支持mysql

用途:實時災備的故障切換,讀寫分離,備份sql

主從原理:
主:log dump線程傳binlog;
從:i/o線程接受讀取binlog,並寫入relay log文件,sql線程從relay log 文件中讀取binlog並持久化數據庫

問題及解決:
主庫宕機後,數據丟失---->半同步複製
主庫寫壓力大,因從庫只有一個sql 線程來持久化,複製可能延遲---->並行複製安全

半同步複製原理:
事務在主庫寫完binlog後須要從庫返回一個已接受,才放回給客戶端;
5.5集成到mysql,以插件的形式存在,須要單獨安裝
確保事務提交後binlog至少傳輸到一個從庫
不保證從庫應用完成這個事務的binlog
性能有必定的下降
網絡異常或從庫宕機,卡主庫,直到超時或從庫恢復服務器

並行複製原理:
從庫多線程apply binlog
在社區5.6中新增
庫級別並行應用binlog,同一個庫數據更改仍是串行的
5.7版本並行複製基於事務組網絡

部分數據複製
聯級複製(經常使用)
A->B->C
B中添加參數log_slave_updates
B將把A的binlog記錄到本身的binlog日誌中多線程

複製的監控
show slave statusapp

複製出錯處理
常見:1062(主鍵衝突),1032(記錄不存在),1007(已建立數據庫)
解決:手動處理,跳過複製錯誤:set global sql_slave_skip_counter=1
或者能夠選擇忽略這些錯誤 slave-skip-errors=1062,1032,1007負載均衡

mysql主從複製是mysql高可用性,高性能(負載均衡)的基礎
簡單,靈活,部署方式多樣,能夠根據不一樣業務場景部署不一樣複製結構
複製過程當中應該時刻監控複製狀態,複製出錯或延時可能給系統形成影響
mysql主從複製目前也存在一些問題,能夠根據須要部署複製加強功能ide


主從實踐:
主從複製要求mysql版本一致
一、修改主服務器master

vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[必須]啓用二進制日誌
       server-id=222      //[必須]服務器惟一ID,默認是1,通常取IP最後一段

二、修改從服務器slave

vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[不是必須]啓用二進制日誌
       server-id=226      //[必須]服務器惟一ID,默認是1,通常取IP最後一段

而後重啓兩臺服務器的mysql
三、配置主服務器

mysql>GRANT REPLICATION SLAVE ON *.* to 'fangxslave'@'100.168.50.211' identified by 'fangxslave';  
# 通常不用root賬號,主從用戶用具體IP代替,增強安全。
mysql>show master status;  #查詢日誌節點
   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000004 |      308 |              |                  |
   +------------------+----------+--------------+------------------+
   1 row in set (0.00 sec)
   注:執行完此步驟後不要再操做主服務器MYSQL,防止主服務器狀態值變化

四、配置從服務器

mysql>change master to master_host='100.168.50.203',master_user='fangxslave',master_password='fangxslave',master_log_file=' mysql-bin.000004',master_log_pos=308;   #注意不要斷開,308數字先後無單引號。
Mysql>start slave;    啓動從服務器複製功能

若是有報錯爲ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
使用reset slave可解決

五、檢查複製狀態
從服務器操做show slave status\G

*************************** 1. row ***************************

              Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.2.222  //主服務器地址
              Master_User: fangxslave  //受權賬戶名,儘可能避免使用root
              Master_Port: 3306    //數據庫端口,部分版本沒有此行
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
              Read_Master_Log_Pos: 600     //#同步讀取二進制日誌的位置,大於等於Exec_Master_Log_Pos
              Relay_Log_File: ddte-relay-bin.000003
              Relay_Log_Pos: 251
              Relay_Master_Log_File: mysql-bin.000004
              Slave_IO_Running: Yes    //此狀態必須YES
              Slave_SQL_Running: Yes     //此狀態必須YES
               ......

注:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,不然都是錯誤的狀態(如:其中一個NO均屬錯誤)。以上操做過程,主從服務器配置完成。

相關文章
相關標籤/搜索