8、linux-mysql的mysql主從複製原理和實戰

1.mysql主從複製介紹mysql

    mysql支持單向、雙向、鏈式級聯、實時、異步複製,在複製過程當中,一臺服務器充當主服務器(Master),而一個或多個其它服務器充當從服務器(Slave)。sql

   複製:單向同步複製數據庫

 

 

   複製:單向,一主多從複製服務器

 

   複製:雙向,主主複製架構

 

 複製:環向複製負載均衡

 

此外,還有級聯模式,就是主==>主==>從模式。 異步

2. mysql主從複製應用場景分佈式

    在當前的生產工做中,大多數應用的mysql主從同步都是異步的複製方式,即不是嚴格實時的數據同步。mysql主從複製有利於數據庫架構的健壯性、提高訪問速度和易於維護管理。ide

  2.1  主從互爲備份,主庫有問題,能夠切換到從庫上繼續提供服務網站

   mysql 主從同步作不到一條數據不丟,要作到主從切換一條數據不丟,有多種方案,這裏主要說明4種:

  1)mysql自身有一個插件,講主從同步從異步變成半同步,即實時同步。往主庫寫數據,當從庫也寫完畢,纔是主從同步成功,不然兩個都不成功。

  2)切換到從庫時,講主庫的bin_log日誌在從庫中執行一遍

  3)從程序上下功夫,講主庫實時一分鐘的數據寫到程序上,同步到從庫上

  4)雙寫功能,既寫主庫又寫從庫

 

  2.2 讀寫分離,主寫,讀從

   中小公司:經過程序

   門戶網站:分佈式dbproxy(讀寫分離、hash負載均衡,健康檢查)

 

  2.3 根據服務器拆分業務獨立並分擔壓力

     許多公司都是一主多從,主庫寫,從庫不一樣服務器兼顧不一樣業務,若是主掛了,能夠迅速手工或者自動切換。從庫間能夠實現集羣,能夠不一樣人員訪問不一樣機器等。

 

 3.mysql主從同步的基本結構

   

  能夠看到:

 1 ) 從庫生成兩個線程,一個I/O線程,一個SQL線程;
 2 ) I/O線程去請求主庫 的binlog,並將獲得的binlog日誌寫到relay log(中繼日誌) 文件中;
 3 ) 主庫會生成一個 log dump 線程,用來給從庫 i/o線程傳binlog;
 4 ) SQL 線程,會讀取relay log文件中的日誌,並解析成具體操做,來實現主從的操做一致,而最終數據一致;經過mysqlbinlog 進行查看
 5 ) 在從庫的I/O線程還會生成一個相似記錄文件master.info,用來記錄每次從主I/O獲取的位置和時間還有下次應該從哪一個位置進行取日誌和位置。
 
4.主從複製
4.1.環境準備
     1)具有單機單數據庫多實例的環境
     2)兩臺服務器每一個機器一個數據庫的環境
4.2.數據庫讀法的約定
    主庫:master     從庫:slave
4.3.設置server-id值並開啓binlog參數(log-bin = /data/3306/my.cnf)
            【mysqld】
             server-id=1
             log-bin = /data/3306/mysql-bin
查看是否生效:
  1)  查看/data/3306下是否有日誌
 
 2)   查看參數:mysql -uroot -poldboy124 -S   /data/3306/mysql.sock -e "show variables like 'log_bin';"     

  4.4.創建用於同步的帳戶rep

   登錄主庫創建用於從庫複製的帳號rep:
    grant replication  slave  on *.* to 'rep'@'192.168.0.104' identified  by 'oldboy124'
    flush privileges;
  4.5.主數據庫備份
          1) flush  table  with  read lock  ---添加鎖
          2) show master status;  ---查看master-data的位置,在從庫master.info會記錄當前同步的位置,爲下次同步提供起始位置
          

          3)  show master log; --現有的master-data

            

 

         4)備份:mysqldump -uroot -poldboy124 -S /data/3306/mysql.sock -A -B --events|gzip  /dangjingwei/rep.sql.gz  --壓縮本地磁盤備份
         5)備份: mysqldump -uroot -poldboy124 -S /data/3306/mysql.sock -A -B --events --master-data=2 >/dangjingwei/rep.sq l--master-data 標識添加註釋
         6) unlock tables; --解鎖
         7)能夠直接鎖定進行備份:mysqldump -uroot -poldboy124 -S /data/3306/mysql.sock -A -B -S --events --master-data=2     >/dangjingwei/rep.sql  
         8)將備份文件導入到從庫中: mysql -uroot -poldboy124 -S /data/3307/mysql.sock </dangjingwei/rep.sql 將備份文件添加到從庫中
         9)添加master.info ,使從庫能夠鏈接主庫        
CHANGE MASTER TO
MASTER_HOST='192.168.0.104',---主庫地址
MASTER_PORT=3306,--主庫端口
MASTER_USER='rep',--主庫用戶
MASTER_PASSWORD='oldboy124', --主庫密碼
MASTER_LOG_FILE='mysql-bin.000003', --下次同步的起始頁面 ,若是備份參數是--master-data=1,能夠去掉
MASTER_LOG_POS=343;  --下次同步的起始位置 ,若是備份參數是--master-data=1,能夠去掉
    檢查:從庫的實例數據存放的位置下面能夠看到
  /data/3307/data/master.info--若是主庫不斷更新,則bin_log不斷更新,從庫會不斷更新這個內容的起始位置
   19)打開從庫同步: start  slave
    檢查:查看狀態;
       show slave status\G;
   從庫的sql線程會讀取relay log文件中的日誌,此文件從庫的位置是從庫的實例線程下面
   

 

 至此,當主庫發生增刪改的時候,從庫相應的進行同步!!!

相關文章
相關標籤/搜索