MySQL 主從複製搭建【實例精華】

MySQL主從複製

MySQL可以通過兩種方式配置主從複製

  • 通過二進制日誌(binary log)的方式;
  • 通過GTID(全局事務ID)方式,不過GTID方式仍然依賴MySQL的binary log。

ps:在搭建MyCAT讀寫分離,主從切換,必須先搭建好MySQL主從複製

搭建環境說明:

主機信息 ip地址 說明
itcast-01 192.168.79.130 裝載mysql5.7x版本,用於master主服務
itcast-02 192.168.79.131 裝載mysql5.7x版本,用於slave從服務

Linux下MySQL安裝步驟說明

搭建binary log配置主從配置

binary log的核心是事件(event)。基本原理是:主服務器把所有對數據庫的操作(例如update、delete,create等)作爲一個事件,當有事件產生,就把它們寫入到對應的binary log中,每個事件都對應一個位置(可以理解這個位置就是事件的編號)。然後從服務器讀取主服務器中的日誌文件來獲取主服務產生的事件(把這些日誌保存到從服務器本地的relay-log中),從而把主服務的數據庫操作在從服務器中重複執行一次,達到數據複製的目的。
在這裏插入圖片描述
由於一切操作都是基於binary log,因此主服務器必須開啓log-bin選項,另外,主從服務器都必須分配一個唯一的server-id。

master服務配置步驟

第一步:修改my.cnf文件:
在[mysqld]段下添加:

#mysql主從複製配置
#指定需要同步的數據庫,如果需要同步所有庫就註釋
binlog-do-db=kevin
#忽略同步的數據庫
binlog-ignore-db=mysql
#啓用二進制日誌
log-bin=mysql-bin
#服務器唯一ID,一般取IP最後一段
server-id=130

第二步:重啓mysql服務
service mysqld restart
第三步:建立帳戶並授權slave,確保賬戶能在主機登錄
mysql>GRANT FILE ON . TO ‘root’@’%’ IDENTIFIED BY ‘123456’;
第四步: 授予Slave複製權,賬戶信息要在從機配置執行同步操作
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . to ‘root’@’%’ identified by ‘123456’;
刷新權限
mysql> FLUSH PRIVILEGES;
第五步:鎖表,將數據庫鎖住,僅僅允許讀,以保證數據一致性;
mysql> flush tables with read lock;
mysql> FLUSH PRIVILEGES;
#注意,鎖定後,如果自己同步對方數據,同步前一定要記得先解鎖!
解鎖: mysql> unlock tables;
第六步: 查看主節點的master複製信息,獲取日誌的名稱和位置信息

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |     2071 | kevin        | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+

slave服務配置步驟

第一步:修改my.cnf文件
[mysqld]

server-id=166

第二步:配置從服務器,把主服務器的相關信息設置給從服務器
mysql>change master to master_host=‘192.168.79.130’,master_port=3306,master_user=‘root’,master_password=‘123456’,master_log_file=‘mysql-bin.000004’,master_log_pos= 2071

注意語句中間不要斷開,master_port爲mysql服務器端口號(無引號),master_user爲執行同步操作的數據庫賬戶,master-log-pos中配置的主服務器最後一步position的值,master_log_file中配置的就是主服務器最後一步file對應的值。
第三步:啓動從服務器複製功能
Mysql>start slave;
第四步:檢查從服務器複製功能狀態

mysql> show slave status 或 show slave status/G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.79.130
                  Master_User: backup
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 2071
               Relay_Log_File: itcast-02-relay-bin.000005
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              .....
                   Last_Errno: 0
                   Last_Error: 
          .....
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 130
                  Master_UUID: e11b3edf-5547-11ea-bb60-000c29abaa7c
             Master_Info_File: /usr/local/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

通過上面的信息,可知主從複製環境已經OK(Slave_IO_Running和Slave_SQL_Running狀態均爲YES)

同步測試:

注意:
首先要確定master服務配置my.cnf上指定同步數據庫名稱binlog-do-db=kevin;如果創建其它數據庫,則無法進行主從同步;
在master主節點上操作,創建數據庫和表

  • 解鎖數據庫操作,在創建master服務時上鎖,禁止數據庫寫操作
mysql> unlock tables;

  • 創建名稱爲kevin的數據庫
mysql> CREATE DATABASE kevin CHARACTER SET utf8 COLLATE utf8_general_ci;  
  • 切換數據庫
mysql> use kevin;
Database changed
  • 創建表
mysql> create table if not exists haha (id int(10) PRIMARY KEY AUTO_INCREMENT,name varchar(50) NOT NULL);

在slave節點上,查看數據庫信息

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db2                |
| db3                |
| kevin              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

從slave數據庫已經同步master數據庫操作,雙向都有kevin數據庫和表

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章