Linux Ubuntu24.04配置安裝MySQL8.4.5高可用集群主從復制!

MySQL 主從復制(Replication)是實現數據高可用、讀寫分離及異地容災的核心機制之一。主庫寫、從庫讀,提升并發能力;讀寫分離,減輕主庫壓力。

本地 windows 系統有一個Linux Ubuntu子系統,版本為Ubuntu 24.04.2 LTS。

圖片

想在這個子系統上安裝Mysql主從配置,打開官網:https://dev.mysql.com/downloads/mysql/ 進行下載操作。

圖片

下載鏈接有那么多,下載哪個呢?有幾個概念也不太理解。

一、什么是DEB

DEB Bundle (捆綁包) 是一組 .deb 文件的壓縮包(通常是 .tar.gz),里面包含多個 .deb 安裝包。

比如 mysql-8.4.5-debian11-x86_64.deb-bundle.tar 包含了 mysql-common_8.4.5.deb、mysql-community-client_8.4.5.deb、mysql-community-server_8.4.5.deb、mysql-community-libs_8.4.5.deb等等。可以用 tar -xvf 解開看。

.deb 文件里包含了某個軟件的二進制可執行文件、配置文件、依賴說明等等。

DEB Package 通常指的是 單個的 .deb 軟件包文件。mysql-community-server.deb 是 MySQL 服務端(數據庫引擎),mysql-community-client.deb 是 MySQL 客戶端程序(mysql命令行工具等),mysql-common.deb 是 共享配置,基礎內容。“DEB Package”是最泛指的概念 —— 單個包。

也就是說,一個DEB Bundle 包含了多個deb,不需要那么多可以單獨下載某個deb。

二、安裝 MySQL8.4.5

MySQL已經升級到9了,選擇MySQL8.4.5是因為這是一個長期支持的版本。

DEB 的安裝方式:sudo dpkg -i xxx.deb 或 sudo apt install ./xxx.deb。下載單個 Deb包,可能會導致依賴不完整,僅適合臨時測試環境,官網建議 apt 方式,那我就試試apt方式。

1、添加 MySQL 官方 APT 倉庫

MySQL 的 APT 配置工具包下載地址:https://repo.mysql.com/

# 下載倉庫配置包
wget https://repo.mysql.com/mysql-apt-config_0.8.34-1_all.deb

圖片

頭幾次安裝都失敗了,原因是沒找到合適的配置工具包,這次使用0.8.34版本。

# 安裝并選擇版本
sudodpkg-imysql-apt-config_0.8.34-1_all.deb

圖片

圖片

少截了一個圖片,在第三個對話框中選擇OK,否則就進入死循環了。

圖片

2、更新軟件源并安裝

# 更新 APT 軟件包列表
sudo apt update

圖片

# 安裝 MySQL Server 指定版本(注意包名格式)
# sudo apt install mysql-server=8.4.5-1ubuntu24.04sudo apt install mysql-server

圖片

在安裝的過程中會跳出來密碼確認頁面:

圖片

圖片

安裝完成后,會在提示信息中看到配置文件的路徑:

圖片

3、驗證安裝

# 登錄測試
mysql -u root -p

圖片

確保 MySQL 服務正常啟動并設置開機自啟:

#啟動 MySQL 服務
sudo systemctl start mysql
#停止 MySQL 服務
sudo systemctl stop mysql
#開機自啟
sudo systemctl?enable?mysql
#禁止開機自啟
sudo systemctl?disable?mysql
#檢查服務狀態
systemctl status mysql

在安裝的時候踩了個大坑,剛開始怎么安裝都安裝失敗,主要原因是配置工具包不是最新的,不是 Ubuntu24.04 支持的版本,但是想想都有Ubuntu對應的bed,怎么會不支持呢?最后找到了配置包的下載地址,換了個配置包就好了。

4、說說配置文件

查看mysql的配置文件,發現這個配置文件很繞、層層嵌套,這無疑加大了主從庫配置的難度。

理想狀態下的配置文件目錄:

/etc/mysql/my.cnf

ubuntu的配置文件:

圖片

查看我安裝的目錄結構:

圖片

果真,my.cnf 導入了 /etc/mysql/conf.d/ 和 /etc/mysql/mysql.conf.d/ 這兩個文件:

圖片

為什么配置文件也要層層嵌套呢?

圖片

好像有道理。

為了方便,我決定還是使用 /etc/mysql/my.cnf 這一個配置文件吧。

三、主從復制配置

1、停止現有服務

sudo systemctl stop mysql

圖片

2、為mysql創建專屬用戶和用戶組

#創建mysql用戶組
groupadd -g?27?mysql#創建該組下的用戶
sudo useradd -u?1027?-g mysql mysql-admin#查看用戶的id信息
id?mysql-admin

圖片

3、?創建多實例環境

# 主庫目錄
sudo mkdir -p /var/lib/mysql-master
# 更改目錄權限
sudo chown mysql-admin:mysql /var/lib/mysql-master# 從庫目錄
sudo mkdir -p /var/lib/mysql-slave
# 更改目錄權限
sudo chown mysql-admin:mysql /var/lib/mysql-slave# 更改啟動目錄下內容的權限
sudo chown mysql-admin:mysql /var/run/mysqld/

圖片

4、配置文件統一配置

編輯 /etc/mysql/my.cnf

sudo nano /etc/mysql/my.cnf

/etc/mysql/my.cnf 內容設置如下:

[mysqld_multi]
mysqld=/usr/bin/mysqld_safe ?# 使用守護進程啟動
mysqladmin=/usr/bin/mysqladmin
log=/var/lib/mysqld_multi.log[mysqld1]
# 源服務器(原主服務器)配置
server-id=1
port=3306
# 啟用二進制日志
log_bin=/var/lib/mysql-master/mysql-bindatadir=/var/lib/mysql-master
# 主庫socket
socket=/var/run/mysqld/mysqld-master.sock
pid-file=/var/run/mysqld/mysqld-master.pid# 需要復制的數據庫(可選)
binlog-do-db=rsdun
binlog-do-db=rsdun-circle# 不需要復制的數據庫(可選)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys# 設置日志保留時間(天),7天 = 7×24×60×60 = 604800秒
binlog_expire_logs_seconds=604800# 主服務器默認字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ciuser=mysql-admin[mysqld2]
# 副本服務器(原從服務器)配置
server-id=2
port=3307datadir=/var/lib/mysql-slave
# 從庫socket
socket=/var/run/mysqld/mysqld-slave.sock
pid-file=/var/run/mysqld/mysqld-slave.pid# 啟用中繼日志
relay_log = /var/lib/mysql-slave/relay-log
relay_log_index = /var/lib/mysql-slave/relay-log.index# 從服務器默認字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci# 副本服務器專用設置
read_only=1user=mysql-admin
4.?初始化并啟動實例
# 初始化源服務器
sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql-admin --datadir=/var/lib/mysql-master

圖片

# 初始化副本服務器
sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql-admin --datadir=/var/lib/mysql-slave

圖片

# 啟動實例
sudo mysqld_multi start# 查看啟動情況
sudo mysqld_multi report

根據上面的密碼使用客戶端修改主從庫的密碼:

圖片

5、主服務器配置

連接主服務器:

mysql -S /var/run/mysqld/mysqld-master.sock -u root
# 或
mysql -u root -p --protocol=TCP -P?3306

創建復制用戶

-- 主庫創建復制用戶
CREATE USER 'repl'@'localhost' IDENTIFIED BY '123456';# 分配復制權限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost';#授權后需要刷新后,才能生效;
flush privileges;?# 查看主服務器狀態
SHOW BINARY LOG STATUS;?

圖片

6、從服務器配置

連接從服務器:

mysql -S /var/run/mysqld/mysqld-slave.sock -u root
# 或
mysql -u root -p --protocol=TCP -P?3307-- 從庫配置主庫信息
CHANGE REPLICATION SOURCE TO SOURCE_HOST='127.0.0.1', SOURCE_PORT=3306,SOURCE_LOG_FILE='mysql-bin.000002',SOURCE_LOG_POS=1207,SOURCE_CONNECT_RETRY=10;# 授權復制用戶名密碼
START REPLICA USER='repl'?PASSWORD='repl_password';# 啟動從服務器復制進程
START REPLICA;
# 停止從服務器的復制過程
STOP REPLICA;
# 檢查從服務器狀態,替代原來的 SHOW SLAVE STATUS
SHOW REPLICA STATUS;?

圖片

執行這一系列步驟后,同步狀態出錯了。

出錯原因:

圖片

大概意思是,mysql8.4.5默認采用的是 caching_sha2_password 插件,要求安全連接(SSL/TLS),而我目前并沒有配置SSL。因此呢還需要把同步用戶的插件調整為mysql_native_password 插件。

7、開啟 mysql_native_password 插件

先停止主從庫的服務,在my.cnf增加 mysql_native_password 配置:

mysql_native_password=on

在windows server2008上通過設置mysql_native_password=on就生效了,在這個系統上應該也可以。

圖片

主從庫都要加這個配置項目,設置后進行重啟。

# 重啟主從庫
sudo mysqld_multi reload 1,2

圖片

發現上面這個命令沒有用,只能使用最簡單粗暴的殺死命令,然后在啟動服務器。

# 查找端口號所在pid
sudo lsof -i :3306
# 殺死pid
sudo?kill?-9 3670

圖片

如果還不行,那就重啟電腦吧,重啟電腦能解決百分之九十的問題。

重啟后再次登錄主庫:

mysql -u root -p --protocol=TCP -P 3306
# 查詢同步用戶的插件
select host,user,plugin from mysql.user?where?user='repl';# 修改主庫同步用戶的插件:
ALTER USER?'repl'@'%'?IDENTIFIED WITH mysql_native_password BY?'repl_password'?REQUIRE NONE;# 刷新生效
FLUSH PRIVILEGES;

圖片

REQUIRE NONE 表示 MySQL 用戶賬戶可以在不加密的連接上進行身份驗證和操作。這是 MySQL 用戶賬戶的默認安全要求級別。

四個相關的參數:
REQUIRE NONE:不強制要求加密連接(默認)。
REQUIRE SSL:要求使用 SSL 加密連接。
REQUIRE X509:要求使用有效的 X509 證書。
REQUIRE CIPHER:要求使用特定加密算法 。

從到從庫,再把從庫的復制操作走一遍:

mysql -u root -p --protocol=TCP -P 3307-- 從庫配置主庫信息
CHANGE REPLICATION SOURCE TO SOURCE_HOST='127.0.0.1', SOURCE_PORT=3306,SOURCE_LOG_FILE='mysql-bin.000002',SOURCE_LOG_POS=1207,SOURCE_CONNECT_RETRY=10;# 授權復制用戶名密碼
START REPLICA USER='repl'?PASSWORD='repl_password';# 啟動從服務器復制進程
START REPLICA;
# 停止從服務器的復制過程
STOP REPLICA;
# 檢查從服務器狀態,替代原來的 SHOW SLAVE STATUS
SHOW REPLICA STATUS;?

圖片

最后查看主從配置的狀態:

圖片

終于配置成功了。

8、在從庫上創建后只讀用戶

CREATE USER?'root_readonly'@'%'?IDENTIFIED BY?'123456';
# 只讀授權
GRANT SELECT ON *.* TO?'root_readonly'@'%';
#執行刷新,刷新后;
flush privileges;

四、最后總結

這次安裝一點也不順利,重裝過好多次,有時候是在mysql8.4.5初始化那一步就錯了,有時候是在啟動的時候報錯,反倒是配置主從庫的順利一點。

一方面,對Linux ubuntu系統不熟悉。另一方面,Linux系統對文件的權限管理比較嚴格。還有一點,最近做事有點不用心

回顧這些次的安裝,每次都是文件權限的問題,但是當時沒有意識到是文件權限的問題,還以為配置錯了,走了很多彎路。

使用Linux系統,一定要特別留意文件夾權限!不要設置錯了!

比如說這兩個設置目錄權限:

# 更改目錄權限
sudo chown mysql-admin:mysql /var/run/mysqld
# 更改目錄下所有內容的權限
sudo chown mysql-admin:mysql /var/run/mysqld/

這兩個命令是不一樣的。

第一個命令,最后不帶斜杠的,作用于 /var/run/mysqld 這個目錄本身(作為一個文件對象),只改變目錄本身的 ownership,不影響目錄內的內容 。

第二個命令帶斜杠的,末尾的斜杠表示這是一個目錄路徑,在大多數情況下,行為與第一個命令相同(改變目錄本身的 ownership),在某些特殊情況下(如當 `/var/ /var/run/mysqld 是符號鏈接時),行為可能會有不同。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81522.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

R基于邏輯回歸模型實現心臟病檢測及SHAP值解釋項目實戰

說明:這是一個機器學習實戰項目(附帶數據代碼文檔視頻講解),如需數據代碼文檔視頻講解可以直接到文章最后關注獲取。 1.項目背景 心血管疾病是全球范圍內導致死亡的主要原因之一,每年有數百萬人因此失去生命。在眾多的…

嵌入式學習筆記 -函數嵌套時以及異常響應時,LR使用的具體過程

函數嵌套時以及異常響應時,寄存器LR的作用存在顯著區別,理解這個問題對于理解freeRTOS底層代碼的實現大有幫助,具體使用過程如下: 一 函數嵌套時的LR使用的具體過程 在ARM架構(特別是M0處理器)中,函數嵌套調用時LR(L…

Java String函數的使用

文章目錄 String字符串比較字符串查找轉化字符串替換字符串拆分字符串截取(常用)字符串的不可變性 String str本來是字符串常量的引用,應該打印地址,但是編譯器重寫了toString方法,所以打印hello String 的構造方法 …

Oracle 11G RAC重啟系統異常

vmware安裝centos7環境部署Oracle RAC (11.2.0.4) 部署時所有資源情況都是正常的,關機重啟虛擬機后集群資源狀態異常,請教CSDN大佬 – 部署規劃 域名地址備注rac16192.168.31.16rac17192.168.31.17rac16vip192.168.31.26viprac17vip192.168.31.27vip…

吉林省CCPC與全國邀請賽(東北地區賽)游記

總述: 本次賽段共獲得一銀(吉林省賽)、一銅(東北地區賽)、一鐵(全國邀請賽的成績)。總體成績跟校內賽的情況相比隊伍狀態與發揮水準都有提升),但也體現出很多不足&#x…

「Python教案」循環語句的使用

課程目標 1.知識目標 能使用for循環和while循環設計程序。能使用循環控制語句,break、continue、else設計程序。能使用循環實際問題。 2.能力目標 能根據需求合適的選擇循環結構。能對嵌套循環代碼進行調試和優化。能利用循環語句設計&am…

OpenCV---findCountours

一、基本概念與用途 findContours是OpenCV中用于在二值圖像中查找輪廓的核心函數。輪廓作為連續的點集,能夠精確勾勒出物體的邊界,廣泛應用于目標檢測、形狀分析、圖像分割等領域。 函數核心價值 目標檢測:通過輪廓定位圖像中的物體&#…

20250523-BUG:無法加載“GameLib/Framework.h“頭文件(已解決)

BUG:無法加載"GameLib/Framework.h"頭文件(已解決) 最近在打開新的C項目時報了這個錯,我是按照以下步驟來排除的BUG,希望對您有所幫助~ 檢查【C/C】-【附加包含目錄】中的路徑有無問題,一般需要加…

商品條形碼查詢接口如何用C#進行調用?

一、什么是商品條碼查詢接口? 1974年6月26日,美國俄亥俄州的一家超市首次使用商品條碼完成結算,標志著商品條碼正式進入商業應用領域。這項技術通過自動識別和數據采集,極大提升了零售行業的作業效率,減少了人工錄入錯…

SD07_NVM的安裝及相關操作

以下是在 Windows 系統 上使用 NVM(Node Version Manager) 管理多個 Node.js 版本的詳細步驟,從零開始操作: 一、準備工作 卸載舊版 Node.js 打開 控制面板 → 程序和功能,找到已安裝的 Node.js 和 npm,徹底…

OSI 深度安全防御體系架構深度剖析

文章目錄 前言什么是 OSI 深度安全防御體系架構各層的安全防御措施物理層數據鏈路層網絡層傳輸層會話層表示層應用層 OSI 深度安全防御體系架構的優勢全方位防護深度防御靈活性和可擴展性 總結 前言 大家好,我是沛哥兒。今天咱們來深入探討一下 OSI 深度安全防御體…

大模型應用:開發移動端頁面個人中心頁面提示詞

角色 你是一個移動端web頁面開發專家,擅長開發移動端頁面,使用原生web技術(html,css,js),開發的頁面針對手機移動端友好 技術棧 使用基礎的Html,CSS,JavaScript方案實現&#xff…

從零到一:影刀RPA學習者的破局之路

1. 學習目標與預期差距分析 1.1 官方課程學習目標梳理 影刀RPA的官方課程旨在幫助學習者掌握RPA(機器人流程自動化)的基本概念、操作技能和常見應用場景。課程內容通常包括: RPA基礎理論:介紹RPA的定義、優勢、發展歷程以及與其…

計算機組成與體系結構:硬盤驅動器(Hard Disk Drives)

目錄 💽 硬盤驅動器(HDD):傳統的固定輔助存儲設備 什么是硬盤驅動器? 硬盤的工作原理 HDD 的物理結構 Disk Pack(盤組) Tracks(磁道) Cylinders(柱面&…

GitCode鏡像倉庫批量下載開發實錄

GitCode作為國內領先的開源代碼托管平臺,其鏡像倉庫批量下載功能對開發者生態建設與開源協作效率提升具有關鍵價值。本文基于企業級代碼資產管理需求,系統記錄從需求分析到生產部署的全周期開發實踐。內容覆蓋鏡像倉庫同步機制設計、分布式任務調度優化、…

基線配置管理:為什么它對網絡穩定性至關重要

什么是基線配置(Baseline Configuration) 基線配置(Baseline Configuration)是經過批準的標準化主設置,代表所有設備應遵循的安全、合規且運行穩定的配置基準,可作為評估變更、偏差或未授權修改的參考基準…

AJAX get請求如何提交數據呢?

在 AJAX 中使用 GET 請求提交數據,主要通過 在 URL 后拼接查詢參數 的方式實現,具體步驟如下: 1.構造帶參數的 URL 將數據以 鍵值 的形式拼接在 URL 后,多個參數間用 & 連接。例如: var url "https://exa…

基于FashionMnist數據集的自監督學習(對比式自監督學習SimCLR算法)

目錄 一,對比式自監督學習 1.1 簡介 1.2 常見算法 1.2.1 SimCLR (2020) 1.2.2 MoCo (2020) 1.2.3 BYOL (2021) 1.2.4 SimSiam (2021) 1.2.5 CLIP (2021) 1.2.6 DINO (2021) 1.2.7 SwAV (2020) 二,代碼邏輯分析 2.1 整體目標與流程 2.2 數據…

Linux:基礎指令與內涵理解(下)與權限

1.mv 作用:將文件移動、文件重命名 語法: mv (選項) 源文件/目錄 目標文件/目錄 (1)將文件/目錄移動到當前目錄的新文件/目錄(也就是重命名操作) 這里我們mv了test.txt文件到當前目錄下當前并不存在的ln.tx…

卷積神經網絡(CNN)入門學習筆記

什么是 CNN? CNN,全稱 卷積神經網絡(Convolutional Neural Network),是一種專門用來處理圖片、語音、文本等結構化數據的神經網絡。 它模仿人眼識別圖像的方式: 從局部到整體,一步步提取特征&a…