mysql主從複製-重做從庫

mysql主從複製-重做從庫

  • 在主服務器執行 查看從節點的數量
SHOW SLAVE HOSTS;

+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID                           |
+-----------+------+------+-----------+--------------------------------------+
|    127397 |      | 3306 |    117398 | 8b429839-13bd-11ed-bd2d-6c442a117e6d |
|    127392 |      | 3306 |    117398 | 0913d4b2-bd4c-11ec-97dc-6c442a117e02 |
+-----------+------+------+-----------+--------------------------------------+

語句返回的 Server_id 在配置文件指定
$ cat /etc/my.cnf|grep server_id

server_id=127397
  • 在主服務器執行 查看主服務器的bin log狀態,在下面會用到
SHOW MASTER STATUS;
+------------------+-----------+--------------+------------------+-------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+-----------+--------------+------------------+-------------------+
| mysql_bin.000218 | 327290956 |              |                  |                   |
+------------------+-----------+--------------+------------------+-------------------+
  • 主庫執行,查看已經存在的複製賬戶 在下面會用到
SHOW GRANTS FOR 'repl'@'10.24.211.5';

root@(none) 10:53:45>SHOW GRANTS FOR 'repl'@'10.24.211.5';
+------------------------------------------------------+
| Grants for [email protected]                            |
+------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.24.211.5' |
+------------------------------------------------------+

這是一個MySQL授權語句,用於授予一個名爲 "repl" 的用戶在所有數據庫 (`*.*`) 上執行復制的權限。該用戶將能夠作爲複製從庫連接到主庫進行數據同步。

解釋授權語句的不同部分:

- `GRANT`: 表示授權。
- `REPLICATION SLAVE`: 是授予的權限類型,允許用戶充當從庫並執行復制操作。
- `ON *.*`: 表示授予權限的範圍,其中 `*.*` 表示所有數據庫的所有表。
- `TO 'repl'@'10.24.211.5'`: 指定了要授予權限的用戶,這是用戶名爲 "repl" 的用戶,並且只能從IP地址爲 "10.24.211.5" 的主機連接。這是限制用戶的主機的一種方法,以增強安全性。

這個語句的效果是,用戶 "repl" 在主機 "10.24.211.5" 上被授予充當從庫的權限,並能夠連接到MySQL主服務器以執行復制操作。
  • 通過在從服務器上運行以下命令來查看主從複製的延遲:
SHOW SLAVE STATUS\G;

Slave_IO_State: 正在讀取二進制日誌
Master_Host: 主服務器的主機名或IP地址
Master_User: 用於複製的用戶
Master_Port: 主服務器的端口
Connect_Retry: 嘗試重新連接的次數
Master_Log_File: 主服務器當前正在寫入的二進制日誌文件名
Read_Master_Log_Pos: 從節點正在讀取的主服務器的二進制日誌位置
Relay_Log_File: 從節點正在寫入的中繼日誌文件名
Relay_Log_Pos: 從節點正在寫入的中繼日誌位置
Relay_Master_Log_File: 從節點正在讀取的主服務器的二進制日誌文件名
Slave_IO_Running: 從節點的I/O線程是否正在運行(Yes或No)
Slave_SQL_Running: 從節點的SQL線程是否正在運行(Yes或No)
Replicate_Do_DB: 複製中被指定的數據庫
Replicate_Ignore_DB: 複製中被忽略的數據庫
Replicate_Do_Table: 複製中被指定的表
Replicate_Ignore_Table: 複製中被忽略的表
Replicate_Wild_Do_Table: 複製中被指定的表(使用通配符)
Replicate_Wild_Ignore_Table: 複製中被忽略的表(使用通配符)
Last_Errno: 上一個錯誤的錯誤碼(如果有錯誤)
Last_Error: 上一個錯誤的錯誤信息
Skip_Counter: 跳過SQL語句的計數(用於跳過錯誤)
Exec_Master_Log_Pos: 正在執行的主服務器的二進制日誌位置
Relay_Log_Space: 中繼日誌文件的大小(字節)
Until_Condition: 複製停止條件(NONE,ERROR,SQL_AFTER_MTS_GAPS,或MASTER_POS_WAIT)
Until_Log_File: 複製停止條件中指定的主服務器日誌文件名
Until_Log_Pos: 複製停止條件中指定的主服務器日誌位置
Master_SSL_Allowed: 是否允許主服務器使用SSL
Master_SSL_CA_File: SSL CA證書文件
Master_SSL_CA_Path: SSL CA證書路徑
Master_SSL_Cert: SSL證書文件
Master_SSL_Cipher: SSL密碼套件
Master_SSL_Key: SSL密鑰文件
Seconds_Behind_Master: 從節點滯後主服務器的秒數
Master_SSL_Verify_Server_Cert: 是否驗證主服務器SSL證書
Last_IO_Errno: 上一個I/O線程錯誤的錯誤碼(如果有錯誤)
Last_IO_Error: 上一個I/O線程錯誤的錯誤信息
Last_SQL_Errno: 上一個SQL線程錯誤的錯誤碼(如果有錯誤)
Last_SQL_Error: 上一個SQL線程錯誤的錯誤信息
  • 如果錯誤很少,可以直接跳過一次
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;  -- 這裏的1代表要跳過的錯誤次數,可以根據實際情況調整
START SLAVE;

如果延遲特別多,從節點無法追上主庫可以 重做從節點

  1. 備份(順序不能亂)
# 重置主庫同步設置 這個命令會刪除主服務器上的二進制日誌文件,並重新開始計數,從一個乾淨的狀態開始。這意味着之前的二進制日誌文件將被刪除,主從複製的同步狀態也將重新初始化。
RESET MASTER;

# 鎖定主庫,只能讀
FLUSH TABLES WITH READ LOCK;

# 得到鎖庫後的binlog 位置 輸出的 File 和 Position 在後面會用到
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000219 | 122 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

# 主庫執行
mysqldump -uroot -p"xxx" --all-databases > ./mysql-master-dump.sql

#解鎖主庫
UNLOCK TABLES;

# 將備份文件傳輸到從節點
scp -P xx /data16/mysql-master-dump.sql [email protected]:/data16/mysql-master-dump.sql
  1. 從庫執行
stop slave;

# 二選一執行
RESET SLAVE;
# 該命令用於重置從服務器的主從複製配置和狀態,但保留主服務器(Master)的連接信息。主要包括以下方面:
# 清除從服務器上的所有主從複製配置信息。
# 清除從服務器上的二進制日誌文件和位置信息。
# 重置從服務器的複製狀態,以便它可以重新連接到主服務器開始同步。

RESET SLAVE all;
# 不僅會清除主從複製配置和狀態,還會刪除從服務器上的所有二進制日誌文件。主要包括以下方面:
# 清除從服務器上的所有主從複製配置信息。
# 清除從服務器上的二進制日誌文件和位置信息。
# 刪除從服務器上的所有已下載的二進制日誌文件。
# 重置從服務器的複製狀態,以便它可以重新連接到主服務器開始同步。

# 比較慢
source /data16/mysql-master-dump.sql;
# 比較快 mysql 命令可以在一次執行中處理整個 SQL 文件,而 source 命令是逐行執行。這使得批處理處理更加高效。
mysql -uroot -pDevM2Jh@M2#Ez200 < ./mysql-master-dump.sql

# 可選執行 語句用到的參數在下面有些語句可以查詢得到
CHANGE MASTER TO
  MASTER_HOST = '10.73.9.8', # 主庫ip
  MASTER_USER = 'repl',   # 主庫上的賬號
  MASTER_PASSWORD = 'xxxx',
  MASTER_LOG_FILE = 'mysql_bin.000218', # 鎖定主庫之後的 File
  MASTER_LOG_POS = 351344081; # 鎖定主庫之後的 Position
START SLAVE;
SHOW SLAVE STATUS\G

STOP SLAVE;
# 可選 解釋如下
set global slave_exec_mode='STRICT';
START SLAVE;

slave_exec_mode 是 MySQL 8.0 版本引入的參數,用於控制從服務器(Slave)執行主從複製事件的模式。這個參數用於增加主從複製的靈活性,允許管理員選擇在從服務器上執行復制事件時的執行模式。這裏是與上面回答相關的詳細解釋:

  1. IDEMPOTENT 模式(默認模式):

    • slave_exec_mode = IDEMPOTENT 是默認模式,它表示從服務器會正常地執行來自主服務器的複製事件,這些事件可能會更改數據庫的狀態。
    • 從服務器將盡力保持與主服務器的數據一致,但不會主動檢查是否存在可能導致數據不一致的事件。
    • 適用於大多數情況,因爲它在性能方面表現良好。
  2. STRICT 模式

    • slave_exec_mode = STRICT 表示從服務器會以更加嚴格的方式執行復制事件,如果發現可能導致數據不一致的事件,將中止複製。
    • 這個模式用於強制從服務器保持與主服務器完全一致的狀態,但也可能導致主從複製的中斷。
    • 適用於對一致性要求極高的環境,但需要注意潛在的中斷。
  3. COST_OP 模式

    • slave_exec_mode = COST_OP 允許從服務器執行復制事件,但在執行過程中會檢查事件的“代價”。
    • 如果事件的執行代價過高,從服務器會中止複製,以避免執行成本過高的事件。
    • 這用於避免在從服務器上執行代價高的事件,可能導致性能問題。
  4. COST_OP_EXCLUDE 模式

    • slave_exec_mode = COST_OP_EXCLUDECOST_OP 模式類似,但在這個模式下,從服務器會跳過代價過高的事件,而不是中止複製。
    • 這允許從服務器繼續複製,但可能會導致主從不一致。
    • 這用於降低執行成本過高事件對主從複製的影響。

通過設置 slave_exec_mode 參數,管理員可以根據具體需求選擇適當的執行模式,以平衡數據一致性和性能。這個參數增加了主從複製的靈活性,允許根據具體環境和要求來配置主從複製行爲。

  • 查詢 slave_exec_mode 的值
SHOW VARIABLES LIKE 'slave_exec_mode';

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