Ubuntu 20.04 上的 MySQL 8 主/從復制


您可能需要將數據從一台 MySQL 數據庫服務器自動複製到一台或多台 MySQL 數據庫服務器。本質上,數據庫管理員執行與數據庫相關的任務,例如復制、集群和自動故障轉移。 管理 MySQL 數據庫服務器和執行複制任務是數據庫專家的職責。在本文中,您將學習如何在 Ubuntu 20.04 上設置主/從 MySQL 數據庫複製。本文使用 MySQL 8 進行複制。

先決條件

  • 2個ubuntu服務器
  • root 特權用戶帳戶
  • Internet 連接以下載軟件包

此示例中使用了以下服務器:

  • 大師 – 192.168.178.135
  • 奴隸 – 192.168.178.137

在兩個節點上安裝 MySQL 8 服務器。

安裝 MySQL 是一個簡單的過程。 在 Ubuntu 系統上,可以使用 APT 包存儲庫安裝 MySQL。在安裝之前,使用以下命令更新 Ubuntu 軟件包索引:

$apt update

使用以下命令安裝 MySQL 服務器包:

$apt install mysql-server -y

全新安裝 MySQL 服務器並不安全。運行腳本“mysql_secure_installation”來更改不太安全的默認選項,例如遠程root登錄、測試數據庫、示例用戶等。

$ mysql_secure_installation

啟動並啟用 MySQL 服務

$ systemctl start mysql
$ systemctl enable mysql

配置主數據庫服務器

現在我們需要對複制主節點進行一些更改。編輯 配置文件 目錄中的文件 /etc/mysql/mysql.conf.d 添加以下行:不要忘記添加以下配置變量 [mysqld] 部門。

$ vi /etc/mysql/mysql.conf.d/mysqld.conf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
tmpdir = /tmp
binlog_format = ROW
max_binlog_size = 800M
sync_binlog = 1
expire-logs-days = 5
slow_query_log=1
slow_query_log_file=/var/lib/mysql/mysqld-slow.log

在哪裡:

  • server-id – MySQL 服務器的唯一 ID。此 ID 不能在集群中的任何節點上重複使用。
  • log-bin – 存儲所有復制信息的文件。
  • max_binlog_size – 二進制日誌文件的大小。

另外,將綁定地址註釋如下:

#bind-address =127.0.0.1

MySQL 配置文件

重啟mysql服務

$systemctl restart mysql

在主站點上為複制服務創建新用戶

現在您需要在主節點上創建一個數據庫用戶,供從節點在連接時使用。 以root用戶登錄數據庫並創建用戶。

$ mysql -u root -p
$ mysql> CREATE USER [email protected] IDENTIFIED BY '[email protected]';

注意:如果您在創建用戶時指定了 IP 地址,它將只接受來自指定主機的 MySQL 連接。來自其他主機的連接被拒絕。在這個例子中,我們使用了 MySQL 從服務器的 IP 地址。根據您的環境,您可能需要更改此 IP 地址。

複製 MySQL 數據需要 REPLICATION SLAVE 權限。使用以下查詢授予權限:

mysql> GRANT REPLICATION SLAVE on *.* to [email protected] ;

使用以下查詢檢查授予的權限:

mysql> SHOW GRANTS FOR [email protected];

創建複製用戶

配置從數據庫節點

您在上一步中安裝了 MySQL 服務器。接下來,修改一些配置文件以啟用複製過程。編輯 配置文件 檔案下 /etc/mysql/mysql.conf.d 打開目錄並添加:

$vi /etc/mysql/mysql.conf.d/mysqld.conf

配置文件內容:

[mysqld]
log_bin = /var/log/mysql/mysql-bin.log
server-id = 2
read_only = 1
tmpdir = /tmp
binlog_format = ROW
max_binlog_size = 800M
sync_binlog = 1
expire-logs-days = 5
slow_query_log = 2

在哪裡,

  • 服務器編號 – 唯一的 MySQL 服務器 ID。
  • 只讀 – 從節點設置為只讀模式
  • log_bin – 在從節點上啟用二進制日誌記錄
  • 慢查詢日誌 – 啟用慢查詢日誌記錄

還要註釋掉綁定地址行。

# bind-address = 127.0.0.1

從數據庫服務器配置

重啟 MySQL 服務

$ systemctl restart mysql

連接從服務器到主服務器

在設置從服務器之前,請到主服務器並檢查狀態。

$ mysql -u root -p
mysql> SHOW MASTER STATUSG

連接到數據庫服務器

請注意以下從屬使用的標誌:

  • 文件:mysql-bin.000002
  • 職位:156

現在配置將用於連接到主站的從站的參數。請按照以下步驟操作。

  • 使用 root 憑據登錄到 MySQL 服務器。
$ mysql -u root -p
  • 停止從線程
mysql> STOP SLAVE;
  • 設置一個從站來複製主站
mysql> CHANGE MASTER TO MASTER_HOST='192.168.178.137', MASTER_USER='replication_user', MASTER_PASSWORD='[email protected]', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1050;

主/從 MySQL 複製配置

在哪裡,

  • 192.168.178.137 – 主服務器的 IP 地址
  • 複製用戶 – 主服務器上的 MySQL 用戶
  • 密碼 – 複製用戶密碼
  • mysql-bin.000002 – 主服務器日誌文件
  • 156- 主服務器日誌位置

然後激活從服務器。

mysql> START SLAVE;

使用以下查詢檢查從站的狀態

mysql> SHOW SLAVE STATUSG

請注意以下標誌的狀態。

  • Slave_IO_Running:連接
  • Slave_IO_Running:連接

複製處於活動狀態且正在工作

檢查主/從復制

主從配置是複制。您可以看到主/從復制工作正常。在主服務器上,登錄 MySQL shell 並創建一個測試數據庫。

$ mysql -u root -p
mysql> CREATE DATABASE example_db;

檢查創建的數據庫。

mysql> SHOW DATABASES;

檢查復制是否有效

立即從服務器登錄

$ mysql -u root -p

運行以下查詢以列出數據庫。

mysql> SHOW DATABASES;

從節點上自動創建數據庫

可以看到在master上創建的數據庫複製到了slave上。

結論是

在本文中,您學習瞭如何在 Ubuntu 20.04 上設置 MySQL 主節點和從節點。您也可以按照本文在 Ubuntu 18.04 上設置主/從 MySQL 複製。