Ubuntu20.04安裝MySQL8主從

Ronnybox發表於2024-05-15

📖 實驗環境

主機名 系統版本 網路地址
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

img

🔨 修改配置檔案

# 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

🔨 配置節點主從複製

  1. 檢查防火牆

    # 關閉主從資料庫伺服器防火牆或開放3306埠
    # 這裡以firewall為例 
    
    # 檢視防火牆狀態
    systemctl status firewalld
    # 關閉防火牆
    systemctl stop firewalld
    
    #往防火牆新增3306埠
    firewall-cmd --add-port=3306/tcp --permanent
    #重新載入防火牆配置
    firewall-cmd --reload 
    
  2. 資料庫測試是否可以訪問

    # 從資料庫伺服器測試主資料庫
    mysql -uroot -p -h<主伺服器IP> -P3306
    
  3. 主資料庫建立使用者slave並授權

    # 登入
    mysql -uroot -p
    
    # 建立使用者
    create user 'slave'@'%' IDENTIFIED WITH mysql_native_password by 'password';
    grant replication slave on *.* to 'slave'@'%';
    
    # 重新整理許可權
    flush privileges;
    
  4. 從資料庫驗證slave使用者是否可用

    # slave節點執行
    mysql -uslave -p -h<主伺服器IP> -P3306
    
  5. 開始配置主從

    # 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 的異常值。 
    
  6. 測試

    # 透過工具連線主從資料庫或者在伺服器連線。
    # 注意:主資料庫的配置檔案中配置了需要同步的資料庫,因此只會同步配置的資料庫,不配置則同步全部。
    
    # 在主資料庫建立資料庫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

相關文章