MySQL複製介紹及搭建

MySQL複製介紹

MySQL複製就是一臺MySQL服務器(slave)從另外一臺MySQL服務器(master)進行日誌的複製而後再解析日誌並應用到自身,相似Oracle中的Data Guard。node

MySQL複製有那些好處:mysql

  • 第一是解決宕機帶來的數據不一致,由於MySQL複製能夠實時備份數據;sql

  • 第二點是減輕數據庫服務器的壓力,多臺服務器的性能通常比單臺要好。可是MySQL複製不適合大數據量,大數據量推薦使用集羣。數據庫

MySQL複製過程分紅三步:vim

  • master將改變記錄到二進制日誌(binary log)。這些記錄過程叫作二進制日誌事件,binary log events;服務器

  • slave將master的binary log events拷貝到它的中繼日誌(relay log);網絡

  • slave重作中繼日誌中的事件,將改變應用到本身的數據庫中。異步

MySQL複製是異步的且串行化的ide

MySQL複製原理圖

MySQL複製搭建

環境準備

master 192.168.1.5 rac1-node.tp-link.net性能

slave 192.168.1.6 rac2-node.tp-link.net

OS:Oracle Linux 6.1

MySQL:5.5.37

Master配置

分配複製權限

mysql> grant replication client,replication slave on *.* to root@'192.168.1.%' identified by 'root';
    Query OK, 0 rows affected (0.00 sec)

清空日誌文件

mysql> show binary logs;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |     26636 |
    | mysql-bin.000002 |   1069399 |
    | mysql-bin.000003 |     26636 |
    | mysql-bin.000004 |   1069399 |
    | mysql-bin.000005 |       536 |
    +------------------+-----------+
    5 rows in set (0.00 sec)

    mysql> reset master;
    Query OK, 0 rows affected (0.01 sec)
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |       107 |
    +------------------+-----------+
    1 row in set (0.00 sec)

Slave設置

1) 修改從服務器server-id

# vim /etc/my.cnf
    server-id = 2

修改完之後須要重啓數據庫

2)清空日誌文件,同Master

3)讓slave鏈接master並開始重作master二進制日誌中的事件

mysql> change master to

MASTER_LOG_POS的值爲0,由於它是日誌的開始位置

這裏注意:默認狀況下,會同步該用戶下全部的DB,能夠在/etc/my.inf中經過參數binlog-do-db、binlog-ignore-db設置須要同步的數據庫。

4)開啓slave

mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)

5)確認Slave是否和Mater成功通訊。若是 Slave_IO_Running和Slave_SQL_Running都是yes,則證實配置成功

mysql> show slave status\G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.1.5
                      Master_User: root
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 107
                   Relay_Log_File: rac-node2-relay-bin.000002
                    Relay_Log_Pos: 253
            Relay_Master_Log_File: mysql-bin.000001
                **Slave_IO_Running: Yes**
                **Slave_SQL_Running: 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: 413
                  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: 1
    1 row in set (0.00 sec)

測試

Master建立數據庫

mysql> create database d;
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | d                  |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+

Slave查看數據庫已同步

mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | d                  |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    mysql> use d
    mysql> create table t(id int);

Slave查看

mysql> show tables;
    mysql> select * from t;
    +------+
    |    1 |
    +------+

經過以上驗證,能夠看到主服務器上的修改可以正常同步到從服務器。

其餘複製方式

主主複製

master-slave只能進行單向操做,像網絡中的半雙工。master-master能夠實現服務器之間互相同步。主主複製最大的問題就是數據插入或更新衝突。配置方法同主從複製,反過來讓slave同步master。注意master_log_file和master_log_pos參數要與master上對應。具體能夠參考這裏

單一master和多slave

由一個master和多個slave組成的複製系統比較簡單。slave之間並不互相通訊,只能與master通訊。若是寫操做較少,讀操做不少,能夠採用。能夠將讀操做分佈到其餘slave,從而減輕master的壓力。但slave增長到必定數量時,slave對master的負載以及網絡帶寬都會成爲問題。

主從多級複製

讀操做不少能夠採用單一maste和多slave,但增大到必定slave後連到master的slaveIO線程太多會形成master壓力增大,從而形成數據複製延時。
多級複製就是爲了解決這個問題。

mysql多級複製

固然,增長複製的級聯層次,同一個變動傳到最底層的Slave所須要通過的MySQL也會更多,一樣可能形成延時較長的風險。若是條件容許,傾向於經過拆分紅多個Replication集羣來解決

原文地址 http://bestvivi.com

相關文章
相關標籤/搜索