MySQL 主從複製

1. 主庫建立容許遠程鏈接 + 至少具有 replication、slave 權限的 MySQL 用戶

用戶名解釋

這邊的用戶 'slave_mysql'@'192.168.%' 指的是隻容許 ip192.168. 開頭的遠程主機進行鏈接(本地測試用的),新手建議是設置爲 'slave_mysql'@'%'。注意數據庫通配符的使用。mysql

mysql -u root -p

mysql> grant replication slave on *.* to 'slave_mysql'@'192.168%' identified by '123456';

2. 主庫配置文件設置

區分

[mysql] 是針對數據庫客戶端的配置sql

[mysqld] 是針對數據庫服務器的配置數據庫

這邊設置的是針對數據庫服務器的配置:

[mysqld]
# 設置服務器ID,從服務器ID必須大於主服務器ID
server_id=1

# 啓動 mysql 的二進制日誌系統
log_bin=bin

# 須要同步的數據庫名,若是有多個,則重複此參數,每一個數據庫一行
binlog_do_db=Test

# 不一樣步的 mysql 數據庫,同上
binlog_ignore_db=mysql
binlog_ignore_db=performance_schema
binlog_ignore_db=information_schema
binlog_ignore_db=sys

; 從 mysql 8.0.x 引進的,單位:秒
binlog_expire_logs_seconds=2592000
; 舊版本能夠使用以下命令,單位:天
expire_logs_days=30

3. 從庫配置文件

[mysqld]
server_id=2
log_bin=mysql-bin

# 要複製的數據庫
replicate_do_db=Test

# 不要複製的數據庫
replicate_ignore_db=mysql
replicate_ignore_db=performance_schema
replicate_ignore_db=information_schema
replicate_ignore_db=sys

4. 查看主庫 master 信息

show master status;

結果:

+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000006 |     2216 | Test         | mysql,performance_schema,information_schema,sys |                   |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)

這邊特別注意的是 filepositionbinlog_do_db 三個字段,分別是二進制日誌文件(實現主從複製的文件),從庫開始複製的位置,須要進行同步的數據庫。

5. 從庫,開啓同步

// 注意 後面是有逗號 在的!!
mysql> change master to 
mysql> master_host='192.168.1.1' ,             # 遠程主機的IP地址
mysql> master_user='slave_mysql' ,             # 主庫容許遠程鏈接的用戶(注意不要攜帶 @'%' 這些東西)
mysql> master_password='123456' ,              # 密碼
mysql> master_log_file='mysql-bin.000006' ,    # 同步的日誌文件
mysql> master_log_pos=2216;                    # 開始同步的位置

6. 從庫檢查是否成功開啓

show slave status \G

結果

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.150.128
                  Master_User: slave_mysql
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 2216
               Relay_Log_File: grayVTouch-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes // 必須爲 yes
            Slave_SQL_Running: Yes // 必須爲 yes
              Replicate_Do_DB: Test
          Replicate_Ignore_DB:
          ......
1 row in set (0.00 sec)

Slave_IO_RunningSlave_SQL_Runniing 必須爲 yes ,表示開啓成功。

7. 查看效果

主庫中針對同步的數據庫新增(或修改)數據,而後查看從庫對應的數據庫。

主庫

use Test;

create table if not exists test_master_slave (
    id int primary key auto_increment not null , 
    action char(255) , 
    c_time timestamp default current_timestamp
);

從庫

查看 Test 數據庫有沒有出現 test_master_slave 表。服務器

8. 相關問題

1. Slave_IO_Running:connecting 問題

從庫沒有訪問主庫的權限,實際就是主庫沒有開啓遠程訪問的帳號。解決方法,主庫新建具備遠程鏈接的帳號,從庫關閉現有的主從複製進程,從新設置 master,而後在開啓主從複製。app

  1. 執行 步驟1
  2. mysql> stop slave;
  3. 重複 步驟5(包含步驟5)如下步驟

2. Slave_IO_Running:no 問題

SQL 語句出現錯誤,致使同步進程終止。具體能夠查看從庫錯誤日誌,路徑:/path/to/mysql/data/userAccount.err 文件。userAccount 指的是主庫所在遠程主機的用戶名(猜的)。iphone

9. 更多資料(主從複製原理)

主從複製原理ide

相關文章
相關標籤/搜索