mysql5.6作單向主從複製Replication

原理場景:MySQL從3.23版本開始提供複製功能。指的是將主數據庫的DDL和DML操做經過二進制日誌傳到從服務器(也叫從庫),而後在從庫上對這些日誌從新執行,html

     從而使得從庫和主庫的數據保持同步。mysql

     優勢:若是主庫出現問題,能夠快速切換到從庫提供服務;sql

        能夠在從庫上執行查詢操做,下降主庫的訪問壓力;數據庫

        能夠在從庫上執行備份,以避免備份期間影響主庫的服務;centos

 

測試環境 2臺最小化安裝的centos7.2緩存

      

 

 

具體操做服務器

  1. 安裝相同版本的mysqlsession

    可參考以前的文章:http://www.cnblogs.com/ding2016/p/6756941.htmlide

  2. 主(master)服務器配置函數

    ① 在my.cnf中的[mysqld]下新增以下項目:

      
      server_id=200                # 設置server_id,通常設置爲IP;

      
      binlog-do-db=cnblogs              # 複製過濾:須要備份的數據庫,輸出binlog(這裏我假設值備份cnblogs這個數據庫);

      #binlog-do-db=db2           #若是要同步多個,另起一行,再加一條

      #binlog-do-db=db3           #同上

      
      binlog-ignore-db=mysql         # 複製過濾:不須要備份的數據庫,不輸出(mysql庫通常不一樣步);
    

      log-bin=master-bin            # 開啓二進制日誌功能,能夠隨便取,最好有含義;

 

      binlog_cache_size=1M          # 爲每一個session 分配的內存,在事務過程當中用來存儲二進制日誌的緩存;


      binlog_format=mixed           # 主從複製的格式(mixed,statement,row,默認格式是statement);

      expire_logs_days=7            # 二進制日誌自動刪除/過時的天數。默認值爲0,表示不自動刪除;

      slave_skip_errors=1062           # 跳過主從複製中遇到的全部錯誤或指定類型的錯誤,避免slave端複製中斷。
                            如:1062錯誤是指一些主鍵重複,1032錯誤是由於主從數據庫數據不一致; 

      log_bin_trust_function_creators=true    # 若是須要同步函數或者存儲過程;  

     

     保存,退出;

    

     補充說明:主從複製格式

        (1) 基於語句的複製:在Master上執行的SQL語句,在Slave上執行一樣的語句,MySQL默認採用基於語句的複製,效率比較高,

                  一旦發現無法精確複製時,會自動選着基於行的複製;           

        (2) 基於行的複製:把改變的內容複製到Slave,而不是把命令在Slave上執行一遍。從MySQL5.0開始支持;

        (3) 混合類型的複製:默認採用基於語句的複製,一旦發現基於語句的沒法精確的複製時,就會採用基於行的複製;  

     ② 重啓數據庫

      ~]#systemctl restart mysql

     ③ 從新登入mysql並作相關受權

      ~]#mysql -uroot -p

      mysql>create user mysql@'%' identified by 'mysql';  

      mysql>grant all  on *.* to mysql@'%';      這裏可根據本身的數據庫和權限進行設置;   

      mysql>grant replication slave, replication client on *.* to 'mysql'@'158.158.41.201' identified by 'mysql';

      mysql>flush privileges;

      mysql>show master status;

        

        注意記住上圖藍框標出的兩個數值,由於在配置slave時會用到,每次從新配置都會改變。  

 

  3. 從(slave)服務器配置

    ① 在my.cnf中的[mysqld]下新增以下項目:

      server_id=201          slave的ip作id;

      binlog-do-db=cnblogs      與master相對應(換成本身的需求定義);

      binlog-ignore-db=mysql     與master相對應;

      #log-bin=slave1-bin       先註釋掉,能夠先不加;

      binlog_cache_size=1M      

       binlog_format=mixed       
 
       expire_logs_days=7       
      
       slave_skip_errors=1062     

      relay_log=mysql-relay-bin    配置中繼日誌;

      log_slave_updates=1

      read_only=1 

    

    保存,退出;

 

    補充說明:

        (1)若是Slave爲其它Slave的Master時,必須設置bin_log;

        (2)log_slave_updates表示slave將複製事件寫進本身的二進制日誌;

        (3)當設置log_slave_updates時,你可讓slave扮演其它slave的master;

           此時,slave把SQL線程執行的事件寫進行本身的二進制日誌(binary log),而後,它的slave能夠獲取這些事件並執行它;

    ② 重啓從服務器mysql

      ~]#systemctl restart mysql

    ③ 從新登陸mysql

      ~]#mysql -uroot -p

      mysql> change master to master_host='158.158.41.200',master_user='mysql',master_password='mysql',

          master_port=3306,master_log_file='master-bin.000001',master_log_pos=708,master_connect_retry=30;

      

      上圖藍色標誌處就是以前再主上「show master status;」後獲得的重要數據,寫進去便可。

    ④ 開啓主從同步

      mysql>start slave; 

    ⑤ 重看主從狀態

      mysql>show slave status \G

      

      一切正常,一切就緒。

 

  4測試主從同步

    在master上新增cnblogs,查看slave上是否同步新增:

      

 

  結束.

相關文章
相關標籤/搜索