MySQL 5.5主從複製(Replication)

簡介

MySQL的主從複製(Replication),能夠保持兩臺MySQL數據庫的內容一致。由於其同步過程是異步的,因此備份數據庫上作任何操做,都不會影響主數據庫的性能。對遊戲後臺數據庫而言,這是一個重大的優點:對備份數據庫的查詢、備份等操做都不會影響遊戲的線上運行。配置主從複製有許多教程,但都很繁瑣。我根據官方文檔,總結出一個簡單的配置流程。mysql

配置

  • 線上運行的數據庫,稱之爲Master服務器;備份的數據庫,稱之爲Slave服務器
  • 分別修改兩臺服務器上的MySQL配置文件/etc/mysql/my.cnf:
    • Master服務器上加入這兩行(直接去掉註釋便可):正則表達式

      server-id = 1
        log_bin = /var/log/mysql/mysql-bin.log
    • 而後重啓MySQL:sql

      service mysql restart
    • Slave服務器加入這一行:數據庫

      server-id = 2
    • 而後重啓MySQL:服務器

      service mysql restart
  • 把Master數據庫備份傳給Slave數據庫:
    • 方法一:MyISAM格式能夠直接拷貝,速度快:
      • 在Master服務器上備份數據庫,能夠只有指定的數據庫,不一樣步mysql庫:app

        mkdir /masterdb
          mysqlhotcopy --resetmaster --flushlog --addtodest --regexp=<數據庫匹配正則表達式> /masterdb
      • 若是原來已經設置過slave,如今要恢復數據,那麼
        • 先在Slave服務器上mysql中中止slave模式並重置:異步

          stop slave;
            reset slave;
        • 而後關閉mysql:性能

          stop mysql
        • 刪除原有同名的數據庫。
      • 中止mysql後,把備份的Master數據庫目錄傳到Slave服務器上的mysql目錄中,能夠用scp命令拷貝:線程

        scp -r -P <端口> /masterdb/* root@<IP地址>:/Jpcq/MySQL/
      • 拷貝到Slave的文件須要修改owner:rest

        chown -R mysql:mysql *
      • 修改Slave的my.cnf文件,禁止同步mysql庫:

        replicate-ignore-db=mysql
      • 啓動mysql:

        start mysql
      • 從新開啓slave模式,在mysql中執行:

        change master to master_host='<Master IP地址>', master_user='<用戶名>', master_password='<密碼>';
          start slave;
    • 方法二:使用mysqldump,通用,可是慢:

      • 在Master服務器上備份數據庫:

        mysqldump --all-databases --master-data >apply_slave.sql
      • 把備份文件dbdump.db傳到Slave服務器上,恢復數據庫:

        mysql <apply_slave.sql
      • 在Slave服務器上開啓slave模式,在mysql中執行:

        change master to master_host='<Master IP地址>', master_user='<用戶名>', master_password='<密碼>';
          start slave;

維護

  • Slave顯示同步狀態:

    show slave status\G;
  • 顯示進程列表:

    show processlist\G;
  • Master顯示正在同步的Slaves:

    show slave hosts;
  • Master顯示最新binlog位置:

    show master status;

MySQL 5.5 - 5.7的改進

  • MySQL 5.5的主從複製是單線程的,性能受限。
  • MySQL 5.6的不一樣數據庫能夠並行,單個數據庫仍是順序執行的。
  • MySQL 5.7再也不受限制,全部Master數據庫並行執行的事務,Slave也能夠並行執行。
  • MySQL 5.7的Slave還支持從多個Master同步數據庫。
相關文章
相關標籤/搜索