📖 實驗環境
主機名 | 系統版本 | 網路地址 |
---|---|---|
Master | Ubuntu20.04 | 192.168.100.20 |
Slave | Ubuntu20.04 | 192.168.100.21 |
🔨 下載安裝包及初始化資料庫
# 主從節點都需執行
## 下載並安裝資料庫
cd /opt
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
mv /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local
cd /usr/local
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20
mkdir /usr/local/mysql-8.0.20/data
## 建立使用者及使用者組
groupadd mysql
useradd -g mysql mysql
chown -R mysql.mysql /usr/local/mysql-8.0.20
## 初始化資料庫(記錄臨時密碼)
cd /usr/local/mysql-8.0.20/
./bin/mysqld --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql-8.0.20/ --datadir=/usr/local/mysql-8.0.20/data/ --initialize
🔨 修改配置檔案
# Master節點(直接複製下面內容)
cat > /etc/my.cnf << EOF
[mysqld]
basedir=/usr/local/mysql-8.0.20
datadir=/usr/local/mysql-8.0.20/data
character-set-server=utf8
lower-case-table-names=1
default_authentication_plugin=mysql_native_password
# 主從複製-主機配置
# 主伺服器唯一ID
server-id=1
# 啟用二進位制日誌
log-bin=mysql-bin
# 設定不要複製的資料庫(可設定多個)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 如需要指定複製的資料庫使用下方行(可設定多個)
# binlog-do-db=xxl_job
# 設定logbin格式
binlog_format=STATEMENT
EOF
# Slave節點(直接複製下面內容)
cat > /etc/my.cnf << EOF
[mysqld]
basedir=/usr/local/mysql-8.0.20
datadir=/usr/local/mysql-8.0.20/data
character-set-server=utf8
lower-case-table-names=1
default_authentication_plugin=mysql_native_password
# 主從複製-從機配置
# 從伺服器唯一ID
server-id=2
# 啟用中繼日誌
relay-log=mysql-relay
EOF
🔨 建立並啟動Mysql服務
# 主從節點都需執行
## 建立Mysql服務
cp -a ./support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
## 啟動、停止、重啟
systemctl start mysql.service
systemctl restart mysql.service
systemctl stop mysql.service
## 建立軟連線
ln -s /usr/local/mysql-8.0.20/bin/mysql /usr/bin
🔨 設定本地及遠端登入密碼
# 登入(使用臨時密碼)
mysql -uroot -p
# 修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
# 退出,使用新密碼登入
quit
mysql -uroot -p
# 修改root許可權,增加遠端連線(從伺服器為了安全可以不必執行)
use mysql
update user set host ='%' where user='root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
# 退出
quit
🔨 配置節點主從複製
-
檢查防火牆
# 關閉主從資料庫伺服器防火牆或開放3306埠 # 這裡以firewall為例 # 檢視防火牆狀態 systemctl status firewalld # 關閉防火牆 systemctl stop firewalld #往防火牆新增3306埠 firewall-cmd --add-port=3306/tcp --permanent #重新載入防火牆配置 firewall-cmd --reload
-
資料庫測試是否可以訪問
# 從資料庫伺服器測試主資料庫 mysql -uroot -p -h<主伺服器IP> -P3306
-
主資料庫建立使用者slave並授權
# 登入 mysql -uroot -p # 建立使用者 create user 'slave'@'%' IDENTIFIED WITH mysql_native_password by 'password'; grant replication slave on *.* to 'slave'@'%'; # 重新整理許可權 flush privileges;
-
從資料庫驗證slave使用者是否可用
# slave節點執行 mysql -uslave -p -h<主伺服器IP> -P3306
-
開始配置主從
# master節點 # 主資料庫查詢服務ID及Master狀態 # 登入 mysql -uroot -p # 查詢server_id是否可配置檔案中一致 show variables like 'server_id'; # 若不一致,可設定臨時ID(重啟失效) set global server_id = 1; # 查詢Master狀態,並記錄 File 和 Position 的值 show master status; # 注意:執行完此步驟後退出主資料庫,防止再次操作導致 File 和 Position 的值發生變化 ------------------ # slave節點 # 登入 mysql -uroot -p # 查詢server_id是否可配置檔案中一致 show variables like 'server_id'; # 若不一致,可設定臨時ID(重啟失效) set global server_id = 2; # 設定主資料庫引數 change master to master_host='主資料庫IP',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156; # 開始同步 start slave; # 若出現錯誤,則停止同步,重置後再次啟動 stop slave; reset slave; start slave; # 查詢Slave狀態 show slave status\G # 檢視是否配置成功 # 檢視引數 Slave_IO_Running 和 Slave_SQL_Running 是否都為yes,則證明配置成功。若為no,則需要檢視對應的 Last_IO_Error 或 Last_SQL_Error 的異常值。
-
測試
# 透過工具連線主從資料庫或者在伺服器連線。 # 注意:主資料庫的配置檔案中配置了需要同步的資料庫,因此只會同步配置的資料庫,不配置則同步全部。 # 在主資料庫建立資料庫test create database test; # 從資料庫檢視 show databases; # 在主資料庫建立表 use test; create table t_user(id int, name varchar(20)); # 插入資料 insert into t_user values(1, 'C3Stones'); # 在從資料庫檢視 use test; select * from t_user;
原文連結:https://www.cnblogs.com/blogof-fusu/p/17711895.html