<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

               當前位置:首頁>軟件介紹>MySQL主從復制原理 查詢:
               
          MySQL主從復制原理

                  主從復制的原理: 

                  分為同步復制和異步復制,實際復制架構中大部分為異步復制。 

                  復制的基本過程如下: 

                  1)、Slave上面的IO進程連接上Master,并請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內(nèi)容; 

                  2)、Master接收到來自Slave的IO進程的請求后,通過負責復制的IO進程根據(jù)請求信息讀取制定日志指定位置之后的日志信息,返回給Slave 的IO進程。返回信息中除了日志所包含的信息之外,還包括本次返回的信息已經(jīng)到Master端的bin-log文件的名稱以及bin-log的位置; 

                  3)、Slave的IO進程接收到信息后,將接收到的日志內(nèi)容依次添加到Slave端的relay-log文件的最末端,并將讀取到的Master端的 bin-log的文件名和位置記錄到master-info文件中,以便在下一次讀取的時候能夠清楚的告訴Master“我需要從某個bin-log的哪個位置開始往后的日志內(nèi)容,請發(fā)給我”; 

                  4)、Slave的Sql進程檢測到relay-log中新增加了內(nèi)容后,會馬上解析relay-log的內(nèi)容成為在Master端真實執(zhí)行時候的那些可執(zhí)行的內(nèi)容,并在自身執(zhí)行。 

                  Mysql為了解決這個風險并提高復制的性能,將Slave端的復制改為兩個進程來完成。提出這個改進方案的人是Yahoo!的一位工程師“Jeremy Zawodny”。這樣既解決了性能問題,又縮短了異步的延時時間,同時也減少了可能存在的數(shù)據(jù)丟失量。當然,即使是換成了現(xiàn)在這樣兩個線程處理以后,同樣也還是存在slave數(shù)據(jù)延時以及數(shù)據(jù)丟失的可能性的,畢竟這個復制是異步的。只要數(shù)據(jù)的更改不是在一個事物中,這些問題都是會存在的。如果要完全避免這些問題,就只能用mysql的cluster來解決了。不過mysql的cluster是內(nèi)存數(shù)據(jù)庫的解決方案,需要將所有數(shù)據(jù)都load到內(nèi)存中,這樣就對內(nèi)存的要求就非常大了,對于一般的應用來說可實施性不是太大。 

                  復制常用架構 

                  Mysql復制環(huán)境90%以上都是一個Master帶一個或者多個Slave的架構模式,主要用于讀壓力比較大的應用的數(shù)據(jù)庫端廉價擴展解決方案。因為只要master和slave的壓力不是太大(尤其是slave端壓力)的話,異步復制的延時一般都很少很少。尤其是自slave端的復制方式改成兩個進程處理之后,更是減小了slave端的延時。而帶來的效益是,對于數(shù)據(jù)實時性要求不是特別的敏感度的應用,只需要通過廉價的pc server來擴展slave的數(shù)量,將讀壓力分散到多臺slave的機器上面,即可解決數(shù)據(jù)庫端的讀壓力瓶頸。這在很大程度上解決了目前很多中小型網(wǎng)站的數(shù)據(jù)庫壓力瓶頸問題,甚至有些大型網(wǎng)站也在使用類似方案解決數(shù)據(jù)庫瓶頸。 

                  Mysql主從復制配置過程: 

                  環(huán)境:master: 192.168.0.3 

                  Slave: 192.168.0.4 

                  Mysql版本為5.0.67(編譯安裝) 

                  database: eric 

                  1. Master服務器啟動mysql, 

                  a) #mysql –uroot –proot 

                  b) 創(chuàng)建一個有復制權限的用戶,只限slave遠程連接訪問. 

                  i. mysql>grant replication slave on *.* to [email protected] 

                  identified by ‘password’; 

                  ii. mysql>flush privileges; 

                  c) mysql>flush tables with read lock; #鎖定master服務器所有表的寫入。 

                  d) 重新打開一終端,備份要復制的數(shù)據(jù)庫。 

                  i. Var]#tar zcvf eric.tar.gz eric/ //eric所在路徑/opt/mysql/var/eric/即一個庫。 

                  ii. ]#scp eric.tar.gz 192.168.0.4:/opt/mysql/var/ //將主服務器的庫傳到slave相應路徑下。 

                  e) 返回上一終端。 

                  i. Mysql>show master status; 

                  +------------------+----------+--------------+------------------+ 

                  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 

                  +------------------+----------+--------------+------------------+ 

                  | mysql-bin.000014 | 98 | eric | | 

                  +------------------+----------+--------------+------------------+ 

                  1 row in set (0.01 sec) 

                  其中mysql-bin.000014和98二個值將是slave與master的同步點。 

                  f) 給數(shù)據(jù)庫解鎖(當備份完成后) mysql>unlock tables; 

                  g) 編輯mysql的配置文件。Vim /etc/my.cnf 設置這三個參數(shù),沒有的添加,有的直接更改即可。 

                  log-bin=mysql-bin 

                  server-id = 1 

                  binlog-do-db=eric 

                  保存退出。 

                  2. Slave服務器配置 

                  a) 將從master中備份的庫解壓到相應路徑下(退庫的導入) 

                  i. Var]#tar zxvf eric.tar.gz ./ 

                  b) 修改my.cnf 

                  server-id=2 

                  master-host=192.168.0.3 

                  master-user= replication 

                  master-password= password 

                  log-bin= 

                  3. 重啟master, slave的mysql服務 

                  a) 注意順序,先重啟master-à 然后是slave. 

                  b) Slave服務器重啟后,登錄mysql 

                  mysql> stop slave; 

                  Query OK, 0 rows affected (0.00 sec) 

                  mysql> change master to 

                  -> master_host='192.168.0.3', 

                  -> master_user='replication', 

                  -> master_password='password', 

                  -> master_log_file='mysql-bin.000014', 

                  -> master_log_pos=98; 

                  Query OK, 0 rows affected (0.02 sec) 

                  mysql> start slave; 

                  Query OK, 0 rows affected (0.00 sec) 

                  mysql> show slave statusG; 

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

                  Slave_IO_State: Waiting for master to send event 

                  Master_Host: 192.168.0.3 

                  Master_User: replication 

                  Master_Port: 3306 

                  Connect_Retry: 60 

                  Master_Log_File: mysql-bin.000014 

                  Read_Master_Log_Pos: 98 

                  Relay_Log_File: alan-relay-bin.000002 

                  Relay_Log_Pos: 235 

                  Relay_Master_Log_File: mysql-bin.000014 

                  Slave_IO_Running: Yes 

                  Slave_SQL_Running: Yes 

                  Replicate_Do_DB: 

                  Replicate_Ignore_DB: 

                  Replicate_Do_Table: 

                  Replicate_Ignore_Table: 

                  Replicate_Wild_Do_Table: 

                  Replicate_Wild_Ignore_Table: 

                  Last_Errno: 0 

                  Last_Error: 

                  Skip_Counter: 0 

                  Exec_Master_Log_Pos: 98 

                  Relay_Log_Space: 235 

                  Until_Condition: None 

                  Until_Log_File: 

                  Until_Log_Pos: 0 

                  Master_SSL_Allowed: No 

                  Master_SSL_CA_File: 

                  Master_SSL_CA_Path: 

                  Master_SSL_Cert: 

                  Master_SSL_Cipher: 

                  Master_SSL_Key: 

                  Seconds_Behind_Master: 0 

                  1 row in set (0.01 sec) 

                  ERROR: No query specified 

                  當這個參數(shù)都為yes時,證明主從復制成功 

                  Slave_IO_Running: Yes Slave_SQL_Running: Yes 

                  


          MySQL常用語句常用基本MySQL語句
          MySQL創(chuàng)建用戶MySQL學習分享
          MySQL常用命令用法MySQL的部分用法
          MySQL讀寫分離Amoeba的實現(xiàn) MySQL的分頁的優(yōu)化
          MySQL正則表達式的描述MySQL的命名規(guī)則
          MySQL的information_schema數(shù)據(jù)庫介紹 MySQL數(shù)據(jù)庫知識詳解
          MySQL LAST_INSERT_ID詳解MySQL安裝與常用命令
          MySQL配置文件詳細MySQL之存儲引擎
          信息發(fā)布:廣州名易軟件有限公司 http://m.jetlc.com
          • 勁爆價:
            不限功能
            不限用戶
            1998元/年

          • 微信客服

            <output id="r87xx"></output>
          1. 
            
            <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
              • 欧美性爱日逼 | 天天操夜夜操综合视频 | 日日干日日爽日日舔日日草 | 欧美三级黄| 骚逼等操| 大香蕉人人 | 伊人婷婷大香蕉 | 亚洲AV无码国产精品综合 | 国产精品国产成人国产三级 | 一本色道久久综合无码人妻88 |