高效能mysql主存架構

來源:互聯網
上載者:User

標籤:

MySQL Replication(Master與Slave基本原理及配置)

主從mysql工作原理:1:過程:(1)Mysql的複製(replication)是一個非同步複製,從一個Mysql節點複製到另一個Mysql節點。實現整個複製操作主要由三個進程完成的,其中兩個進程在Slave(Sql進程和IO進程)另外一個進程在 Master(IO進程)上。(2)要實施複製,首先必須開啟Master端的binary log功能,否則無法實現。因為整個複製過程實際上就是Slave從Master端擷取該日誌然後再在自己身上完全順序的執行日誌中所記錄的各種操作。2:複製的基本過程如下:(1)Slave上面的IO進程串連上Master,並請求從指定記錄檔的指定位置(或者從最開始的日誌)之後的日誌內容;(2)Master接收到來自Slave的IO進程的請求後,通過負責複製的IO進程根據請求資訊讀取制定日誌指定位置之後的日誌資訊,返回給Slave 的IO進程。返回資訊中除了日誌所包含的資訊之外,還包括本次返回的資訊已經到Master端的bin-log檔案的名稱以及bin-log的位置;(3)Slave的IO進程接收到資訊後,將接收到的日誌內容依次添加到Slave端的relay-log檔案的最末端,並將讀取到的Master端的 bin-log的檔案名稱和位置記錄到master-info檔案中,以便在下一次讀取的時候能夠清楚的高速Master“我需要從某個bin-log的哪個位置開始往後的日誌內容,請發給我”;(4)Slave的Sql進程檢測到relay-log中新增加了內容後,會馬上解析relay-log的內容成為在Master端真實執行時候的那些可執行檔內容,並在自身執行。3:主從結論(1)主從間的資料庫不是即時同步,就算網路連接正常,也存在瞬間,主從資料不一致。 
(2)如果主從的網路斷開,從會在網路正常後,批量同步。 
(3)如果對從進行修改資料,那麼很可能從在執行主的bin-log時出現錯誤而停止同步,這個是很危險的操作。所以一般情況下,非常小心的修改從上的資料。 
(4)還有一個mysql配置是雙主,互為主從配置,只要雙方的修改不衝突,可以工作良好。 
(5)如果需要多主的話,可以用環形配置,這樣任意一個節點的修改都可以同步到所有節點。
4:搭建mysql主從伺服器(1)實驗環境作業系統:Red Hat Enterprise Linux Server release 6.4資料庫版本: 5.6.21(2)主機地址:master:192.168.10.130slave:192.168.10.120(3)安裝資料mysql資料庫略(4)配置master的my.cnf檔案[mysqld] log_bin = mysql-bin                #開啟binlog日誌basedir = /usr/local/mysql         #指定mysql的安裝目錄datadir = /data/mysql              #指定mysql資料庫的資料存放位置port = 3306                        #指定連接埠,預設是3306,如果一個主機有兩個資料庫需指定不同連接埠server_id = 1                      #指定server-id,必須與slave端的server-id不同bind-address = 0.0.0.0             #預設是127.0.0.1,更改為0.0.0.0,否則Slave將無法連結到 Masterexpire_logs_days = 10              #終止日誌的時間,以天為單位,預設是30天max_binlog_size = 100M             #存放日誌最大容量sync-binlog=1                      #允許日誌同步(5)重啟mysql服務[[email protected] ~]# service mysqld restart(6)本地登入mysql資料庫,向slave授權並查看當前使用的binlog日誌與位移量mysql> grant replication client,replication slave on *.* to ‘repluser‘@‘192.168.10.120‘ identified by ‘123456‘;語意:允許使用者repluser以密碼123456在192.168.10.120主機,登陸本機資料庫同步資料;(7)查看master狀態mysql> show master status \G;*************************** 1. row ***************************File: mysql-bin.000015             #binlog日誌Position: 211                      #位移量Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set:1 row in set (0.00 sec)ERROR:  No query specified錯誤顯示:mysql>show master status;Empty set (0.02 sec)查詢如果出現以上提示表示配置有問題;(8)配置slave伺服器my.cnf檔案[mysqld]basedir = /usr/local/mysqldatadir = /data/mysqlport = 3306server_id = 2                      #指定server-id,必須與master端的server-id不同sync-binlog=1                      #允許日誌同步read-only=1                        #設定唯讀(9)重啟mysql服務[[email protected] ~]# service mysqld restart(10)本地登入mysql資料庫,指定從伺服器的主伺服器並開啟slave功能執行以下操作必須關閉slave功能mysql> stop slave;Query OK, 0 rows affected (0.00 sec)mysql> change master to -> master_host=‘192.168.10.130‘,        #指定主伺服器地址 -> master_port=3306,                    #指定連接埠,預設是3306,不需要指定 -> master_user=‘repluser‘,              #指定同步時使用的使用者名稱 -> master_password=‘123456‘,            #指定同步處理的使用者的密碼 -> master_log_file=‘mysql-bin.000015‘,  #指定當前的主伺服器使用的binlog日誌 -> master_log_pos=120;                   #指定當前主伺服器上的位位移量Query OK, 0 rows affected (0.00 sec)mysql> start slave;Query OK, 0 rows affected (0.00 sec)(11)查看slave是否正常工作mysql> show slave status \G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.10.130                  Master_User: repluser                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000015          Read_Master_Log_Pos: 120               Relay_Log_File: localhost-relay-bin.000002                Relay_Log_Pos: 283        Relay_Master_Log_File: mysql-bin.000015             Slave_IO_Running: Yes            Slave_SQL_Running: Yes(12)測試在master建立wql資料mysql> create database wql;Query OK, 1 row affected (0.00 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || test               || wordpress          || wql                |+--------------------+6 rows in set (0.00 sec)在slave資料查看是否有該資料庫mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || test               || wql                |+--------------------+5 rows in set (0.00 sec)

 Mysql主從同步搭建完成且可以正常工作,但其中有幾點需要注意:

(1)設定slave伺服器時在指定其主伺服器時要在每個項目後面加逗號分隔
(2)如需更改slave伺服器的主伺服器的設定需要先停止slave服務,然後再更改,使用命令stop slave可以停止slave服務
(3)只有Slave_IO_Running與Slave_SQL_Running兩個進程的狀態全為Yse時才表明slave服務正常工作,否則都表示其工作異常。
Slave_IO_Running進程狀態為NO的原因:
(1)串連不上主要資料庫伺服器(物理線路,安全設定問題,授權問題)
(2)當前binlog日誌名和pos點和主伺服器的不一致
Slave_SQL_Running進程狀態為NO的原因:從伺服器本機沒有主要資料庫上的庫和表或者表結構不一致。
13:主從複製如何提高可靠性

(1)主從單向複製,從伺服器只是即時的儲存了主伺服器的一個副本。當主伺服器發生故障時,可以切換到從伺服器繼續做查詢,但不能更新。

(2)如果採用雙向複製,即兩台mysql伺服器即作為主伺服器,又作為從伺服器。那麼兩者都可以執行更新操作並能實現負載平衡,當一方出現故障時,另一方不受影響。但是,除非能保證任何更新操作順序都是安全的,否則雙向複製會導致失敗。

註:如有操作及編寫問題及時聯絡;QQ:1078956079 /1648111701

高效能mysql主存架構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.