MySQL 8.0 單節點部署與一主兩從架構搭建實戰

前言:在數據驅動的時代,數據庫作為數據存儲與管理的核心組件,其架構的選擇與配置對系統的性能、可用性和擴展性至關重要。MySQL 作為一款廣泛應用的開源關系型數據庫,憑借其穩定的性能和豐富的功能,深受開發者和企業的青睞。?
MySQL 8.0 版本帶來了許多新特性和改進,無論是單節點部署還是主從架構搭建,都有其獨特的優勢和適用場景。單節點部署簡單便捷,適用于小型應用或開發測試環境,能快速滿足基本的數據存儲需求;而一主兩從架構則在高可用性、讀寫分離、數據備份等方面表現出色,適用于中大型系統,可有效提升系統的性能和可靠性。?
本文將詳細介紹 MySQL 8.0 單節點的部署流程,包括環境準備、安裝配置等關鍵步驟。同時,針對手動配置一主兩從架構,從主服務器的配置、從服務器的設置到主從復制的啟動與驗證,進行全面且深入的講解。通過實際操作示例和注意事項的說明,幫助讀者掌握相關技術要點,以便根據實際需求選擇合適的數據庫架構,為系統的數據管理奠定堅實基礎。

一、單節點 MySQL 8.0 安裝與基礎配置

第一步:卸載系統自帶mariadb

查看系統自帶的Mariadb:rpm -qa|grep mariadb
卸載系統自帶的Mariadb:rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64
刪除etc目錄下的my.cnf:rm -rf /etc/my.cnf
檢查mysql是否存在:rpm -qa | grep mysql

第二步:將下載的mysql安裝包mysql-8.0.35-1.el7.x86_64.rpm-bundle上傳到指定路徑/usr/local

第三步:在當前目錄下創建一個 mysql-8.0.35 文件夾,解壓安裝包到該目錄下

命令:tar -xvf mysql-8.0.35-1.el7.x86_64.rpm-bundle

第四步:下載并安裝mysql依賴的插件

命令:yum -y install openssl-devel;yum -y install libaio;yum -y remove mysql-libs

第五步:裝完該插件之后,依次按順序執行以下命令安裝這些 rpm 包

rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-client-plugins-8.0.35-1.el7.x86_64.rpm
rpm -ivh mysql-community-common-8.0.35-1.el7.x86_64.rpm
......
報錯處理:
yum install perl-JSON
yum install -y perl-Module-Install.noarch

第六步:修改配置文件

命令:vim /etc/my.cnf
加入以下內容:

[mysqld]
##設置端口
port=3306
##設置字符集
character-set-server=utf8mb4
##不區分大小寫
lower_case_table_names=1
##group_concat()函數默認長度1024,需要調整200000
group_concat_max_len=200000
##數據庫最大連接數100,改為10000
max_connections=10000
##鎖等待的時間是默認為50s,修改為500
innodb_lock_wait_timeout=500

第七步:MySQL 安裝好了之后系統會自動的注冊一個服務,服務名稱叫做 mysqld,所以可以通過以下命令操作 MySQL:

啟動 MySQL 服務:systemctl start mysqld
重啟 MySQL 服務:systemctl restart mysqld
關閉 MySQL 服務:systemctl stop mysqld
先啟動mysql服務

第八步:rpm 安裝 MySQL 會自動生成一個隨機密碼,可在 /var/log/mysqld.log 這個文件中查找該密碼

第九步:連接 MySQL

命令:mysql -u root –p或mysql -uroot –p
這里如果報錯:2800.且根本就沒用登錄密碼的界面,無法登錄數據庫

做以下操作處理:

第十步:在修改配置之前,先把 mysql 服務停止

命令:systemctl stop mysqld.service

第十一步:刪除錯誤日志

命令:rm -rf /var/log/mysqld.log

第十二步:遞歸刪除 /var/lib/mysql 目錄下面的內容

命令:cd /var/lib/mysql
rm -rf * #遞歸刪除

第十三步:刪除原目錄,創建數據庫目錄并授權

命令:rm -rf /var/lib/mysql
進入/var/lib 目錄,創建目錄:cd /var/lib && mkdir mysql
賦權:chown -R mysql:mysql mysql

第十四步:初始化 MySql

命令:mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql
啟動服務:systemctl start mysqld.service
查看服務:systemctl status mysqld.service

第十五步:連接數據庫,修改root用戶密碼

命令:mysql -uroot –p并輸入密碼

第十六步:1.8修改root用戶密碼

命令:ALTER USER 'root'@'localhost' IDENTIFIED BY 'fjdkjkfhkfjlgk';

第十七步:創建用戶與權限分配

命令:create user 'mysqladmin'@'%' IDENTIFIED WITH mysql_native_password BY 'Dfdghjgkjdl';
命令:grant all on *.* to 'mysqladmin'@'%';
命令:flush privileges;

Myaql開機自啟動:

命令:systemctl enable mysqld
驗證:返回結果為 enabled,則表示開機自啟已成功設置

二、手動搭建一主兩從架構


這里就先不展示ansible自動化腳本了,執行后雖然是一步安裝好,但是無法展示部署細節,下面我寫下手動搭建mysql主從的具體步驟,便于理解些

環境規劃

角色IP地址server_id數據目錄密碼統一
主庫(Master)192.168.1.100101/var/lib/mysqlRoot@2023#
從庫1(Slave)192.168.1.101102/var/lib/mysqlRoot@2023#
從庫2(Slave)192.168.1.102103/var/lib/mysqlRoot@2023#

1. 初始化從庫密碼

從庫都執行 :grep 'temporary password' /db/mysql/3306/log/errorlog/error.log|awk -F ' ' '{print $NF}'
生成密碼:

從庫1:MlMQppp1Si.h							
從庫2:M9xiHdG7E+u

mysql -uroot -p輸入上述密碼登錄:
這個只是初始密碼,要改掉成為跟主庫一樣的,ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Root@2023#';兩個從庫都執行這個命令,然后退出

2.從庫創建用戶并分配相應的權限

在從庫上創建必要的用戶和權限:

-- 創建管理用戶
CREATE USER 'mysqladmin'@'%' IDENTIFIED WITH mysql_native_password BY 'Ma8gTsn19ln#';
GRANT ALL PRIVILEGES ON *.* TO 'mysqladmin'@'%' WITH GRANT OPTION;-- 創建應用程序用戶,允許進行常見的 DML 操作
CREATE USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'Ma8gTsn19ln!';
GRANT SELECT, UPDATE, DELETE, INSERT ON *.* TO 'appuser'@'%';-- 創建報表用戶,僅允許進行查詢操作
CREATE USER 'report'@'%' IDENTIFIED WITH mysql_native_password BY 'Ma8gTsn19ln!';
GRANT SELECT ON *.* TO 'report'@'%';-- 創建備份用戶,用于本地備份操作
CREATE USER 'bakuser'@'localhost' IDENTIFIED BY '57xUJQObLvM3KPux!';
GRANT ALL ON *.* TO 'bakuser'@'localhost';-- 創建監控用戶,賦予監控相關權限
CREATE USER 'orch_monitor'@'%' IDENTIFIED WITH mysql_native_password BY 'Monitor123456##915';
GRANT RELOAD, PROCESS, SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'orch_monitor'@'%';-- 創建 proxysql 用戶,允許進行常見的 DML 操作
CREATE USER 'proxysql'@'%' IDENTIFIED WITH mysql_native_password BY 'Wbymc521!@#';
GRANT SELECT, UPDATE, DELETE, INSERT ON *.* TO 'proxysql'@'%';-- 創建 exporter 用戶,賦予監控工具所需的權限
CREATE USER 'exporter'@'%' IDENTIFIED WITH mysql_native_password BY 'Exq#Py29!';
GRANT SELECT, PROCESS, REPLICATION CLIENT, RELOAD ON *.* TO 'exporter'@'%';-- 創建復制用戶,用于主從復制
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Aepl@897';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

命令:select user,host from mysql.user;
檢查下3臺機的select user,host from mysql.user; 是不是一樣的

3. 配置主從復制

在兩個從庫執行以下語句,切記不要在主庫上執行:

reset master;
change master to master_host='主庫ip',master_port=3306,master_user='repl',master_password='Repl@123',master_auto_position=1;
start slave;

4.兩個從庫執行下 以下命令,查看結果

命令:show slave status\G
從庫判斷依據:
Slave_IO_Running:如果這個參數的值為Yes,則表示從服務器的IO線程正在運行,該服務器是作為從庫的。
Slave_SQL_Running:如果這個參數的值也是Yes,則表示從服務器的SQL線程也在運行,該服務器同樣是作為從庫的。
如果一個MySQL服務器是主庫,那么它不會有這些復制相關的參數,或者這些參數的值會是空的或者顯示為No。

主庫判斷依據:
Master_UUID:在主庫上,這個參數會顯示一個唯一的標識符,而在從庫上,這個參數通常不會顯示。
Read_Master_Log_Pos:在主庫上,這個參數通常為0,因為它不讀取任何主日志位置。

5.所有節點查看是否只讀

命令:SELECT @@read_only;
這里查詢的結果,從庫只能為1;主庫要為0,如果主庫不為0,用下面的命令修改:

set global read_only=0;
grant all privileges on *.* to appuser@'%';

6.quit退出mysql命令行,執行以下命令,查看server_id

mysql -u appuser -h 主庫 -p'密碼' -e "select @@server_id;"
mysql -u appuser -h 從庫1 -p'密碼' -e "select @@server_id;"
mysql -u appuser -h 倉庫2 -p'密碼' -e "select @@server_id;"

這里的輸出結果,主庫不能和從庫一樣,然后兩個從庫的輸出值也不能一樣,如果一樣需要按下面的方法修正

7.三個節點查看相關數值,查看各自是否能對上

cat /etc/my.cnf|grep server_id
cat /etc/my.cnf|grep innodb_buffer_pool_size
cat /etc/my.cnf|grep report_host

8. 修改從庫核心配置

編輯 vim /etc/my.cnf 文件,添加以下內容:

server_id=102                   # 從庫 1 設為 102,從庫 2 設為 103
relay_log=relay-bin             # 中繼日志文件,建議根據實際情況合理配置具體參數
read_only=1                     # 開啟只讀模式
super_read_only=1               # 增強只讀保護
innodb_buffer_pool_size=30G     # 以當前服務器實際內存為準

重啟服務:

systemctl restart mysqld

Mysql各節點全部都重啟下,然后各節點使用 步驟6.的命令查看是否生效
在主庫執行:set global read_only=0;

9.兩個從庫都執行以下命令,查看Slave_IO_Running和Slave_SQL_Running是否為Yes

命令:show slave status\G

10.查看從庫的innodb_buffer_pool_size當前值是否一致

命令:show global variables like 'innodb_buffer_pool_size';

11.主庫執行命令查看是否將從庫的ip加進來

命令:show slave hosts;

12.開啟兩個從庫所有用戶的只讀(步驟可選)

set global read_only=1;set global super_read_only=1;

13.三個節點配置開機自啟

參考MYSQL單節點部署的

三、以上步驟如果還是未能生效,可參考以下可選步驟:

1. 連接主庫并啟動復制(可選)

在從庫上執行以下命令:

mysql -u root -p'Root@2023#'STOP SLAVE;  # 停止可能存在的舊復制線程CHANGE MASTER TO MASTER_HOST='192.168.1.100',    # 主庫 IP 地址MASTER_PORT=3306,MASTER_USER='repl',             # 復制用戶MASTER_PASSWORD='Repl@123',     # 復制用戶密碼MASTER_AUTO_POSITION=1;         # 使用 GTID 自動定位START SLAVE;  # 啟動復制線程

2. 主從狀態驗證(可選)

① 從庫復制狀態檢查

檢查從庫的復制狀態:

SHOW SLAVE STATUS\G# 檢查以下關鍵參數:
# Slave_IO_Running: Yes       (IO 線程正常)
# Slave_SQL_Running: Yes       (SQL 線程正常)
# Seconds_Behind_Master: 0     (無延遲)
② 主庫查看從庫連接

在主庫上查看從庫連接情況:

SHOW SLAVE HOSTS;
③ 數據一致性驗證

在主庫上創建測試數據庫和表:

CREATE DATABASE test;
USE test;
CREATE TABLE t1(id INT PRIMARY KEY);
INSERT INTO t1 VALUES(1);

在從庫上驗證數據是否同步:

SELECT * FROM test.t1;  # 應返回與主庫一致的數據

四、常見問題與解決方案

1. 初始化失敗:權限不足

# 創建日志文件并設置權限
touch /var/log/mysqld.log
chown mysql:mysql /var/log/mysqld.log
chmod 644 /var/log/mysqld.log# 重新初始化
mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql

2. SELinux 導致初始化失敗

# 臨時關閉 SELinux
setenforce 0# 永久修改(編輯 /etc/selinux/config)
SELINUX=disabled

3. 從庫復制線程中斷

修復步驟:

  1. 在主庫上刷新日志:

    FLUSH LOGS;
    
  2. 在從庫上重置復制狀態:

    RESET SLAVE;
    
  3. 重新配置復制并啟動:

    CHANGE MASTER TO MASTER_HOST='主庫 IP',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='Repl@123',MASTER_AUTO_POSITION=1;
    START SLAVE;
    

五、最佳實踐與注意事項

1. 配置文件模板

[mysqld]
# 基礎配置
port=3306
lower_case_table_names=1        # 表名不區分大小寫# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_bin# 連接與性能
max_connections=10000
innodb_lock_wait_timeout=500# 復制相關(主庫)
log_bin=mysql-bin
server_id=101# 復制相關(從庫)
relay_log=relay-bin
read_only=1
super_read_only=1

2. 生產環境建議

  • 定期備份:使用 mysqldump --master-data 或物理備份工具
  • 監控指標:關注連接數和緩沖池命中率
  • 版本一致性:確保主從節點版本相同
  • 防火墻設置:開放 3306 端口,允許從庫 IP 連接

通過以上步驟,我們完成了 MySQL 8.0 單節點安裝及手動一主兩從架構搭建。手動配置的優勢在于可控性強,適合理解復制原理,后續維護也更便捷。生產環境中建議結合監控工具(如 Prometheus+Grafana)實時跟蹤復制狀態,確保數據高可用性與一致性。

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

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

相關文章

數據庫故障排查全攻略:從實戰案例到體系化解決方案

一、引言:數據庫故障為何是技術人必須攻克的 "心腹大患" 在數字化時代,數據庫作為企業核心數據資產的載體,其穩定性直接決定業務連續性。據 Gartner 統計,企業每小時數據庫 downtime 平均損失高達 56 萬美元&#xff0…

牛客周賽round91

C 若序列為1 4 5 7 9 1 2 3,1 9一定大于1 1或1 4...所以只需要記錄當前數之前數字的最大值,然后遍歷取max即可,所以對于上面的序列有效的比較為1 9,2 9,3 9取max 代碼 //求大于當前數的最大值,然后…

【MCAL】TC397+EB-tresos之I2c配置實戰(同步、異步)

I2C總線是Philips公司在八十年代初推出的一種串行、半雙工的總線,主要用于近距離、低速的芯片之間的通信。本篇文章首先從理論講起,介紹了英飛凌TC3x系列芯片對應MCAL中對I2C驅動的定義與介紹,建議讀者在閱讀本篇文章之前對I2C有個簡單的認識…

深拷貝與淺拷貝:理解 Python 中的對象復制機制

深拷貝與淺拷貝:理解 Python 中的對象復制機制 在 Python 編程中,對象的復制是一個常見的操作。然而,很多初學者在處理對象復制時會遇到困惑,尤其是在涉及到復雜數據結構(如列表、字典、自定義對象等)時。…

BeanPostProcessor和AOP

BeanPostProcessor Spring中有一個接口Oredr的getOrder()方法,這個方法返回值是一個int類型,Spring容器會根據這個方法的返回值 對容器的多個Processor對象從小到大排序,創建Bean時候依次執行他們的方法,也就是說getOrder()方法的…

拒絕服務攻擊(DoS/DDoS/DRDoS)詳解:洪水猛獸的防御之道

在數字時代,服務的可用性是衡量一個在線系統成功與否的關鍵指標之一。然而,存在一類被稱為"拒絕服務攻擊" (Denial of Service, DoS) 的網絡攻擊,其主要目的就是通過各種手段耗盡目標服務器或網絡的資源,使其無法響應正…

小剛說C語言刷題—1078求恰好使s=1+1/2+1/3+…+1/n的值大于X時n的值

1.題目描述 求恰好使 s11/21/3?1/n 的值大于 X 時 n 的值。( 2≤x≤10 ) 輸入 輸入只有一行,包括 1個整數 X 。 輸出 輸出只有一行(這意味著末尾有一個回車符號),包括 1 個整數。 樣例 輸入 2 輸出 4 2.參考代碼(C語言…

深度學習中的目標檢測:從 PR 曲線到 AP

深度學習中的目標檢測:從 PR 曲線到 AP 在目標檢測任務中,評估模型的性能是非常重要的。通過使用不同的評估指標和標準,我們可以量化模型的準確性與效果。今天我們將重點討論 PR 曲線(Precision-Recall Curve)、平均精…

MySQL 1366 - Incorrect string value:錯誤

MySQL 1366 - Incorrect string value:錯誤 錯誤如何發生發生原因: 解決方法第一種嘗試第二種嘗試 錯誤 如何發生 在給MySQL添加數據的時候發生了下面的錯誤 insert into sys_dept values(100, 0, 0, 若依科技, 0, 若依, 15888888888, ryqq.com, 0,…

[ctfshow web入門] web70

信息收集 使用cinclude("php://filter/convert.base64-encode/resourceindex.php");讀取的index.php error_reporting和ini_set被禁用了,不必管他 error_reporting(0); ini_set(display_errors, 0); // 你們在炫技嗎? if(isset($_POST[c])){…

Linux在web下http加密和配置虛擬主機及動態頁面發布

web服務器的數據加密 1.簡介:由于http協議以明文方式發送,不提供任何方式的數據加密,也不適合傳輸一些重要的信息,如銀行卡號、密碼等,解決該缺陷設計了安全套接字層超文本傳輸協議https; 2.https的握手流…

uni-app,小程序中的addPhoneContact,保存聯系人到手機通訊錄

文章目錄 方法詳解簡介 基本語法參數說明基礎用法使用示例平臺差異說明注意事項最佳實踐 方法詳解 簡介 addPhoneContact是uni-app框架提供的一個實用API,用于向系統通訊錄添加聯系人信息。這個方法在需要將應用內的聯系人信息快速保存到用戶設備通訊錄的場景下非…

NHANES稀有指標推薦:HALP score

文章題目:Associations of HALP score with serum prostate-specific antigen and mortality in middle-aged and elderly individuals without prostate cancer DOI:10.3389/fonc.2024.1419310 中文標題:HALP 評分與無前列腺癌的中老年人血清…

【django.db.utils.OperationalError: unable to open database file】

解決platform.sh 環境下,無法打開數據庫問題 場景 在platform.sh 執行python manage.py createsuperuser是提示 django.db.utils.OperationalError: unable to open database file 錯誤 原因 由于settings.py文件中 本地數據庫配置在線上配置后,導致…

【前端分享】CSS實現3種翻頁效果類型,附源碼!

使用 css 可以實現多種翻頁效果&#xff0c;比如書本翻頁、卡片翻轉等。以下是兩種常見的翻頁效果實現&#xff1a; 效果 1&#xff1a;書本翻頁效果 通過 transform 和 rotateY 實現 3D 翻頁效果。 html 結構 <divclass"book"> <divclass"page pa…

【部署滿血Deepseek-R1/V3】大型語言模型部署實戰:多機多卡DeepSeek-R1配置指南

大家好&#xff01;這里是迪小莫學AI&#xff0c;今天的文章是“”大型語言模型部署實戰&#xff1a;多機多卡DeepSeek-R1配置指南“” 前言 隨著大型語言模型的快速發展&#xff0c;如何高效部署這些模型成為技術團隊面臨的重要挑戰。本文將分享基于DeepSeek-R1模型的多機多…

IPM IMI111T-026H 高效風扇控制板

概述&#xff1a; REF-MHA50WIMI111T 是一款專為風扇驅動設計的參考開發板&#xff0c;搭載了英飛凌的IMI111T-026H iMOTION?智能功率模塊(IPM)。這個模塊集成了運動控制引擎(MCE)、三相柵極驅動器和基于IGBT的功率級&#xff0c;全部封裝在一個緊湊的DSO22封裝中。REF-MHA50…

Linux 阻塞和非阻塞 I/O 簡明指南

目錄 聲明 1. 阻塞和非阻塞簡介 2. 等待隊列 2.1 等待隊列頭 2.2 等待隊列項 2.3 將隊列項添加/移除等待隊列頭 2.4 等待喚醒 2.5 等待事件 3. 輪詢 3.1 select函數 3.2 poll函數 3.3 epoll函數 4. Linux 驅動下的 poll 操作函數 聲明 本博客所記錄的關于正點原子…

互聯網SQL面試題:用戶會話時長分析

這是一個基于用戶點擊信息進行會話時長分析的案例&#xff0c;常見于互聯網 App 使用分析。 問題描述 用戶的訪問記錄存儲在 user_access 表中&#xff0c;包含用戶編號&#xff08;user_id&#xff09;以及訪問時間&#xff08;access_time&#xff09;等信息。以下是一個示…

前端取經路——現代API探索:沙僧的通靈法術

大家好,我是老十三,一名前端開發工程師。在現代Web開發中,各種強大的API就像沙僧的通靈法術,讓我們的應用具備了超乎想象的能力。本文將帶你探索從離線應用到實時通信,從多線程處理到3D渲染的九大現代Web API,讓你的應用獲得"通靈"般的超能力。 在前端取經的第…