mysql5.5.27主從複製,mysql5.5.27主從

來源:互聯網
上載者:User

mysql5.5.27主從複製,mysql5.5.27主從
主從複製原理:

  1 複製架構圖

  


2 初始化圖



3 複製原理

mysql使用3個線程來執行複製功能(其中1個在主伺服器上,另兩個在從伺服器上)。當發出start slave時,從伺服器建立一個I/O線程,以串連主伺服器並讓它發送記錄在其二進位日誌中的語句。主伺服器建立一個線程將二進位日誌中的內容發送到從伺服器。該線程可以即為主伺服器上show processlist輸出中的Binlog Dump線程。從伺服器I/O線程讀取主伺服器Binlog Dump線程發送的內容並將該資料拷貝到從伺服器資料目錄中的本地檔案中,即中繼日誌。第3個線程是sql線程,由從伺服器建立,用於讀取中繼日誌並執行日誌中包含的更新。在從伺服器上,讀取和執行更新語句被分成兩個獨立的任務。當從伺服器啟動時,其I/O線程可以很快地從主伺服器索取所有二進位日誌內容。


1、主從伺服器分別作以下操作:
  1.1、版本一致。(mysql-5.5.27)
  1.2、初始化表,並在後台啟動mysql
  1.3、修改root的密碼
  1.4、主伺服器master:192.168.142.131
  1.4、從伺服器slave:192.168.142.133



2、修改主伺服器master:
   #vi /etc/my.cnf
       [mysqld]
       #
       log-bin=mysql-bin   #[必須]啟用二進位日誌
       server-id=131      #[必須]伺服器唯一ID,預設是1,一般取IP最後一段
       #binlog-do-db         =test   #需要備份資料,多個寫多行
       #binlog-ignore-db    =mysql #不需要備份的資料庫,多個寫多行


3、修改從伺服器slave:
   #vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   #[不是必須]啟用二進位日誌
       server-id=133      #[必須]伺服器唯一ID,預設是1,一般取IP最後一段
       #master-connect-retry=60 #如果從伺服器發現主伺服器斷掉,重新串連的時間差(秒)
       #replicate-do-db =test #只複製某個庫
       #replicate-ignore-db=mysql #不複製某個庫


4、重啟兩台伺服器的mysql
   service mysqld restart


5、在主伺服器上建立帳戶並授權slave:
   # mysql -uroot -p123456   
   mysql>GRANT REPLICATION SLAVE ON *.* to 'clevercode'@'%' identified by 'q123456'; //一般不用root帳號,“%”表示所有用戶端都可能連,只要帳號,密碼正確,此處可用具體用戶端IP代替,如192.168.145.226,加強安全。


6、登入主伺服器的mysql,查詢master的狀態
    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000011 |      248 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
   註:執行完此步驟後不要再操作主伺服器MYSQL,防止主伺服器狀態值變化


7、配置從伺服器Slave:
   mysql>stop slave;
   
   mysql>change master to master_host='192.168.142.131',master_user='clevercode',master_password='q123456',
         master_log_file='mysql-bin.000011',master_log_pos=248;   //注意不要斷開,248數字前後無單引號。


   Mysql>start slave;    //啟動從伺服器複製功能,如果slave是啟動狀態,需要先stop slave;


8、檢查從伺服器複製功能狀態:


mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.142.131 //主伺服器地址
                  Master_User: clevercode //授權帳戶名稱,盡量避免使用root
                  Master_Port: 3306 //資料庫連接埠,部分版本沒有此行
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000012
          Read_Master_Log_Pos: 107 //#同步讀取二進位日誌的位置,大於等於Exec_Master_Log_Pos
               Relay_Log_File: centos64idx4-relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000012
             Slave_IO_Running: Yes  //此狀態必須YES
            Slave_SQL_Running: Yes //此狀態必須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: 107
              Relay_Log_Space: 416
              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 //主從延時。
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 131
1 row in set (0.00 sec)


註:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。


9、主從伺服器測試:


1、主伺服器Mysql,建立資料庫,並在這個庫中建表插入一條資料:
mysql> create database db_clevercode;
Query OK, 1 row affected (1.77 sec)


mysql> use db_clevercode;
Database changed


mysql> create table tb_test(id int(3),name char(10));     
Query OK, 0 rows affected (14.17 sec)


mysql> insert into tb_test values(1,'clevercode');
Query OK, 1 row affected (1.60 sec)


2、從伺服器Mysql查詢:
mysql> show databases;     
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_clevercode      |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)


mysql> use db_clevercode;
Database changed


mysql> select * from tb_test;
+------+------------+
| id   | name       |
+------+------------+
|    1 | clevercode |
+------+------------+
1 row in set (0.01 sec)


10、主從同步延時:
    
    通過監控show slave status\G命令輸出的Seconds_Behind_Master參數的值來判斷,是否有發生主從延時。其值有這麼幾種:


NULL — 表示io_thread或是sql_thread有任何一個發生故障,也就是該線程的Running狀態是No,而非Yes。


0 — 該值為零,是我們極為渴望看到的情況,表示主從複製良好,可以認為lag不存在。


正值 — 表示主從已經出現延時,數字越大表示從庫落後主庫越多。



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

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.