基於二進制文件的主從複製

1.設置主服務器配置
        必須在主服務器上啓用二進制日誌,由於二進制日誌是將更改從主服務器複製到從服務器的基礎,若是未啓用log-bin,則沒法進行復制
        複製組內的每一個服務器必須配置有惟一的id,此id用於標識組中的各個服務器,1到2³²-1之間的正整數。
        配置:
   [mysqld] 
   log-bin=mysql-bin 
   server-id=1

   注意:在mysql8.0以上版本中,若是沒有設置server-id,或server-id爲0,則主服務器將拒絕任何從屬服務器的連接mysql

 
2.建立用於複製的帳戶
        每一個從服務器都使用MySQL的用戶名和密碼連接主服務器,所以在主服務器上必須有一個用戶帳戶,已供從服務器連接。
        須要爲該帳戶指定 REPLICATION SLAVE 權限
        SQL:
    CREATE USER 'repl'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
        注意:mysql8.0以上不支持直接在授予權限的時候指定用戶密碼
 
3.獲取主服務器的二進制日誌位置
        要配置從屬服務器在正確的位置開始複製過程,您須要在其二進制日誌中記下主服務器的當前座標。此過程須要使用 FLUSH TABLES WITH READ LOCK ,它會阻止innodb表的commit操做,若是計劃關閉主數據庫以建立數據快照,則能夠跳過此過程,而是將二進制日誌索引文件的副本與數據快照一塊兒存儲。
        步驟:
    • 1.在客戶端命令行輸入 FLUSH TABLES WITH READ LOCK 若是客戶端退出了,則鎖將被釋放   
    • 2.在主服務器的另外一個客戶端鏈接中,使用show master status 肯定當前二進制日誌文件的名稱和位置,file顯示日誌文件的名稱,position列顯示日誌文件的座標,記錄這些值,稍候在從站的配置中須要用到
                        
 
 
4.建立數據庫快照
           若是主數據庫包含現有數據,則必須先將數據複製到每一個從數據庫。
    • 使用mysqldump工具建立要複製的全部數據庫的轉儲 ,可使用--database table代替--all-database 指定想要導出的數據庫  
      mysqldump -uroot -p  --all-databases --master-data > dbdump.db
    • 使用原始數據文件建立數據快照
        mysqladmin shutdown    //關閉主服務器
        tar cf /tmp/db.tar ./data 
        zip -r /tmp/db.zip ./data //使用zip或tar打包源數據文件,從服務器要用
        unlock tables //在執行FLUSH TABLES WITH READ LOCK的客戶端中執行該命令
 
5.從站設置
       每一個從站都必須具備惟一的服務器id——server_id。若是沒設置或與主服務器的server_id相同,須要在mysql.ini 或mysql.cnf中設置並指定惟一的server_id,而後重啓服務器
    server_id=2 
  若是主服務器已有數據,須要先將數據導入到從服務器
 
  注意:若是沒有設置server-id,或server-id爲0,則從服務器將拒絕連接到主服務器
       要設置從服務器與主服務器進行通訊以完成複製,須要爲從服務器配置必要的連接信息。
  CHANGE MASTER TO  
        MASTER_HOST='master_host_name', /**主服務器地址*/
        MASTER_USER='repl',  
        MASTER_PASSWORD='123456',  
        MASTER_LOG_FILE='mybinlog.000021', 
        MASTER_LOG_POS=155;

  不知道怎麼的就搞成雙向同步了。。。。sql

相關文章
相關標籤/搜索