Mysql集群技術

實驗在RHEL7中做,因為9中缺少了一個關鍵的高可用組件

環境:兩臺數據庫,內存和CPU要多一點

主流是MYSQL(開源),Oracle收費較貴

RHEL7中直接用make編譯是有問題的,所以需要要gcc工具

做好前置準備:重新整理軟件倉庫,加入aliyun的地址源

?用原來的數據源,可能倉庫不夠,下載不了

開始安裝gcc

解壓gcc.zip

進入目錄并檢查內容是否齊全

安裝

檢查版本?

安裝cmake3

解壓縮安裝包

進入目錄并查看

安裝mysql

檢查安裝包是否完整

解壓并查看

直接編譯可能會污染當前目錄,所以新建一個目錄來存放編譯后

開始編譯

#源碼編譯參數詳解
[root@mysql_node1 mysql-8.3.0]# mkdir  build			#建立編譯目錄
[root@mysql_node1 mysql-8.3.0]# cmake3 .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \				#指定安裝路徑
-DMYSQL_DATADIR=/data/mysql \							#指定數據目錄
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \				#指定套接字文件
-DWITH_INNOBASE_STORAGE_ENGINE=1 \						#指定啟用INNODB存儲引擎,默認用myisam
-DWITH_EXTRA_CHARSETS=all \								#擴展字符集
-DDEFAULT_CHARSET=utf8mb4 \								#指定默認字符集
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \				#指定默認校驗字符集
-DWITH_SSL=system \										#指定MySQL 使用系統已安裝的 SSL 庫
-DWITH_BOOST=bundled \									#指定使用 MySQL 源碼包中內置的Boost庫
-DWITH_DEBUG=OFF
#源碼編譯命令


[root@mysql_node1 build]# make -j2?? ??? ??? ??? ??? ??? ??? ?#-j2 表示有幾個核心就跑幾個進程

之前為什么給比較大的運行內存和多核,就是在這里

如果運行內存小了,在編譯過程中就會造成內存溢出,會導致失敗

make -j4

運行之后等待完成就行

編譯好了之后就別動了


重新下載,Mysql8.3并不能支持實驗

前面都是一樣的,下載需要的編譯軟件

gcc和cmake3

把mysql3.0的包移入,解壓并make安裝

mysql 3.0編譯內容
cmake3  .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_SSL=system -DWITH_BOOST=/root/mysql-8.0.40/boost/boost_1_77_0/  -DWITH_DEBUG=OFF

新的主機雙核cpu,4G內存就夠用

后面的步驟都一樣,等待安裝完畢就行

網頁下載mysql3.0的安裝包的方法


編譯過程決定安裝路徑

make && make install

編譯之后會自動生成目錄的

?

歲讓此時有了bin目錄,但是啟動時還是不生效的,因為沒有加入環境變量?

?

編譯時要求了存放數據的目錄和用戶,但是實際上是沒有創建的

并且此時MySQL目錄是由讀和看的權限,沒有執行權限

?并且要使用,還要有初始化數據

?復制啟動腳本,但是無法啟動,因為還沒有初始化數據

[mysqld]
server-id=10
datadir=/data/mysql
socket=/data/mysql/mysql.sock
default_authentication_plugin=mysql_native_password

修改數據目錄

做初始化

初始化完成后會有一個初始密碼,千萬別忘記了

列出系統中那些系統是啟動的

做數據庫的開啟啟動

直接登錄什么也做不了,要先做安全初始化

重新輸入密碼?

一路回車

現在就可以正常使用了

?要重新刪除下載的話,要先停止服務,再次刪除


(第一臺從數據庫)mysqlb上的操作

?關閉rhel7的圖形

重啟之后就關閉圖形,直接用終端了

可以直接從mysqla中直接復制到mysqlb上

拷貝完整目錄

復制啟動文件?

初始化,默認認證

?啟動mysql

修改數據庫初始密碼?


MYSQL主從復制

數據很重要,有備份才無患

查看官方文檔來學習主從復制

默認二進制日志是沒有打開的,要在配置文件里修改,現在打開后會修改前綴

在主數據庫上

在從數據庫上

記得重啟服務

此時查看日志前綴,改完之后就會從默認前綴變成mysql-bin

先做主數據庫

在數據庫中查看用戶

用root來做并不好

我們需要新增一個用戶

新增用戶后一定要授權,剛剛新增的用戶是誰就給誰授權

查看授權信息

查看日志情況(后面從數據庫認證要用到)

在生產環境中,要做主從復制,先要把數據從主中拉取出來給從,讓他們現在數據相同

但是現在是實驗,沒有數據在其中

從數據庫

要把mastaer制定到哪里,用戶ip,用戶名,用戶密碼,日志文件名,日志id(這些都要和主數據庫一樣)

如果寫錯了,可以刷掉之前寫的

打開服務的命令

查看是否開啟的命令

Slave_IO_Running用來傳輸日志信息

Slave_SQL_Running用來回放日志信息

測試主從同步:

在從數據庫上監控:watch -n 1 'mysql -uroot -plee -e "select * from lee.userlist;" 2>/dev/null'

要是想刪掉這個error

在主數據庫上中

此時從數據庫上error就沒了

在主數據庫上

主從生效了的話,在主數據庫上輸入這個數據的時候,從數據庫中立刻也要有接受反饋

在從數據庫上


一主雙從模式

再新加一臺主機,這臺主機要追平之前的主從,該怎么做?

先安裝一臺主機,步驟和之前一樣

安裝好之后

此時之前的實驗中,主從里已經有數據了

先導出之前的數據

在主數據庫上:mysqldump -uroot -plee lee > lee.sql

在導入到新主機里

在實際環境中在備份導出前要先鎖庫和鎖表

要在lee庫里恢復,沒有庫要新建

然后導入數據

查看是否導入成功

當數據拉平了,再做主從

確認清楚認證,確認是否有變化

在MySQLC中做認證,連上主數據庫

開啟服務并查看?

一主兩從的情況,在實際生產環境中,最好從數據庫都只能讀,只有主數據庫來寫數據

?

寫入的數據大于讀時主數據庫多

讀的數據大于寫的時候從數據庫多


gtid模式

用二進制日志,有一些缺點

如果是做了高可用,有一臺主機掛了,需要選擇一個新的master,要選一個與之前的主機數據差距最小的主機,現在的二進制日志是無法找到的

用gtid模式來做,唯一標識,每個主機都有一個固定的id,要選舉時,直接比較就行

在master端的寫入時多用戶讀寫,在slave端的復制時單線程日志回放,所以slave端一定會延遲與master端

這種延遲在slave端的延遲可能會不一致,當master掛掉后slave接管,一般會挑選一個和master延遲日志最接近的充當新的master

那么為接管master的主機繼續充當slave角色并會指向到新的master上,作為其slave

這時候按照之前的配置我們需要知道新的master上的pos的id,但是我們無法確定新的master和slave之間差多少

當激活GITD之后

當master出現問題后,slave2和master的數據最接近,會被作為新的master

slave1指向新的master,但是他不會去檢測新的master的pos id,只需要繼續讀取自己gtid_next即可

實驗:

停止從數據庫(兩個從都要做)

啟動gtid模式(主從都做)

啟動gtid模式? ? ? ? gtid——mode=on

必須保持強一致性? ? ? ? enforce-gtid-consistency=on

重啟所有mysql服務

在主數據庫上查看是否開啟

在從數據庫上,做gtid認證

?


慢查詢日志

此時慢日志還未打開,查看log的狀態是OFF

那此時在數據庫中查找這個log,是不會被查找到

打開慢查詢模式

此時再查看

?

測試:

此時查看日志就可以看到信息了


mysql的并行復制

誰要做日志傳輸和日志回放

默認情況下slave中使用的是sql單線程回放

在master中時多用戶讀寫,如果使用sql單線程回放那么會造成組從延遲嚴重

開啟MySQL的多線程回放可以解決上述問題

查看slave中的線程信息

在從數據庫中

編寫多線程

?

重新查看后,此時sql線程轉化為協調線程,16個worker負責處理sql協調線程發送過來的處理請求


半同步模式

1.半同步模式原理
mysql的主備庫通過binlog日志保持一致,主庫本地執行完事務,binlog日志落盤后即返回給用戶;備庫通過拉取主庫binlog日志來同步主庫的操作。默認情況下,主庫與備庫并沒有嚴格的同步,因此存在一定的概率備庫與主庫的數據是不對等的。半同步特性的出現,就是為了保證在任何時刻主備數據一致的問題。相對于異步復制,半同步復制要求執行的每一個事務,都要求至少有一個備庫成功接收后,才返回給用戶。實現原理也很簡單,主庫本地執行完畢后,等待備庫的響應消息(包含最新備庫接收到的binlog(file,pos)),接收到備庫響應消息后,再返回給用戶,這樣一個事務才算真正完成。在主庫實例上,有一個專門的線程(ack_receiver)接收備庫的響應消息,并以通知機制告知主庫備庫已經接收的日志,可以繼續執行。

只在gtid模式下可用

核心是slave的通知機制,數據發送過來,slave會發ack來確認

在從中

在配置文件中寫

?但是沒有插件,開不了

在主中

不要重啟,沒有插件,開不了

安裝模塊

查看是否安裝好

加載完成之后,才可以啟動

啟動

產看模式是否開啟

查看同步的信息,暫時還沒有

在從中

和主中配置不一樣

不要重啟,沒有加載插件

安裝

查看是否安裝

啟動

產看是否開啟

測試:

在從中,關閉線程在打開,刷新

兩邊都要查看

在主中

測試:

在200從中關閉接受日志的線程

在主中

關閉一臺,半同步還在繼續

此時關閉兩個了

其實還是會傳輸,但是會在10秒后轉變成異步

此時你再查看會發現,有兩筆是半同步傳輸的,一筆是異步傳輸的

?半同步自動關閉,轉成異步

恢復一臺就可以使ack恢復了?


檢查是否開啟

主掛了,要怎么知道

主掛了,從要怎么轉變成主

mysql高可用之MHA

工作原理:

會定期檢測

master出現故障時,可以自動切換最新數據的slave為master


前提:一主兩從的模式

環境:四臺虛擬機

新增一臺MHA的虛擬機

安裝所有rpm

并且所有數據庫都要安裝node檢測的軟件,所以直接復制過去?

三臺數據庫都要做

這里面是模版

將模版移動到新目錄中

復制到是主體和對于主機控制的內容

ping_interval=3:做3次都失敗了,就宣告這臺master已經失效了

在編輯文件中寫,master的設定用戶是root

要查看是否能遠程登錄root

三臺數據庫都要做

建立能夠遠程登錄的用戶?

這里設立的超級用戶

對新增用戶做授權

我們這里設定是超級管理員,所有的功能都要能做

?

在原先的master中有一個用于數據同步的用戶lee

但是在第一臺有可能變為主的從數據庫中,是沒有這個用戶的,但是這個數據庫是有變為主的可能性的

第一臺從數據庫還缺少一個變為主的條件,

這四臺主機之間要實現免密,因為在切換時,要能直接切換,不受阻礙

檢測當前架構免密是否成功

檢測主從同步情況


master未出現故障手動切換

這個實驗先把半同步關閉,試驗完成后再打開

問要不要做切換要

master要不要從100切換到200

保持功能 要

同步中斷了

排錯過程

還不行

重做

刪除之前所有的認證

日志還原

所有都:


組復制MGR

前面開啟一個協議層,寫東西時會先進入協議層,協議層會去詢問數據庫能不能做,如果超過兩個以上回復不能做,就不能做(少數服從多數)

單主

多主

任何一個主機寫入時,所有的數據庫都會同步

所有的數據庫服務都關閉

????????

在配置文件中

禁止這些模式的存儲機制

禁止二進制日志的校驗

使用行日志格式

????????

把mysql的文件都刪掉

域名解析:

做初始化

完成后不要啟動數據庫

繼續編輯編輯文件

對于插件來說是不能做初始化的,所以不能啟動

plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="172.25.254.30:33061"
group_replication_group_seeds="172.25.254.100:33061,172.25.254.200:33061,172.25.254.30:33061"
group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_single_primary_mode=OFF

?

最后再啟動

不要安全初始化,直接進入

修改超級用戶密碼,不然無法操作了

關閉日志,后面的操作不需要記錄到日志中

創建用戶

授權

????????

把自己加入組中

手動打開組復制模式

打開服務,再關閉模式

查看組情況

加入后兩臺數據庫到組中

第一臺從

數據之間有差異

開之前,把這臺主機里面之前所有的日志文件都刷新

再次查看組

?recoe沒好

測試呢能不能連

?ping不同

要做域名解析

等待一段時間

此時再查看

第二臺

繼續上一步

再去查看,此時有三個

測試:

在主上建立數據庫

在從上查看

?在從上建表

在第二臺從上看

在主上看

現在關閉一臺數據庫

還是能正常輸入數據

此時兩臺都掛了

?

此時寫了也不能進入磁盤

重新登錄

不能自動上線,要手動開啟

???????


MHA

在主數據庫上

?先要開啟gtid模式

?

執行它之前,一定要關閉mysql

等從數據庫完成gtid模式后

在master端配置啟用半同步模式

#安裝半同步插件

查看插件情況

打開半同步功能

查看半同步功能狀態

MYSQL開啟時自動安裝模塊

在編輯文檔里寫

建立用于做數據同步的用戶

這里是手動開啟的

在從中

編輯文檔

[mysqld]
server-id=200
datadir=/data/mysql
socket=/data/mysql/mysql.sock
default_authentication_plugin=mysql_native_password
log-bin=binlog
gtid_mode=ON
skip-name-resolve
binlog_format=ROW
enforce-gtid-consistency=ON

?

首先要做gtid模式

開啟slave端的gtid

?

?

在主數據庫完成半同步模式后

mysql> STOP SLAVE IO_THREAD;?? ??? ??? ?#重啟io線程,半同步才能生效
Query OK, 0 rows affected (0.00 sec)

mysql> START SLAVE IO_THREAD;?? ??? ??? ?##重啟io線程,半同步才能生效
Query OK, 0 rows affected (0.00 sec)

安裝

在主服務器上也做:

MHA上

在其他3臺數據庫

設定root遠程登錄功能

檢測配置:

測試:

master未出現故障手動切換

?masterha_master_switch --conf=/etc/mha/mha.cfg --master_state=alive --new_master_host=172.25.254.200 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

在從數據中看

之前:

現在:?

master故障手動切換

?

?

?

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

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

相關文章

自動駕駛嵌入式軟件工程師面試題【持續更新】

文章目錄前言請描述 CAN 幀的基本結構(包括標識符、數據字段、CRC 等)描述 WebSocket 協議的基本工作流程(包括握手、數據幀結構)請說明如何實現 WebSocket 連接的心跳機制以檢測連接狀態,并描述在斷開后如何通過重連策…

vue(5)-組件

一.組件三大組成部分(結構/樣式/邏輯)(1)組件樣式沖突用scoped全局樣式在組件中起全局作用,局部樣式可以加scoped屬性來只作用于當前組件圖中只給baseone加這個樣式,就在baseone中style加scoped&#xff08…

【機器學習】兩大線性分類算法:邏輯回歸與線性判別分析:找到分界線的藝術

文章目錄一、核心概念:數據分類的"切分線"二、工作原理:從"找分界線"理解二、常見算法1、邏輯回歸:二分類2、線性判別分析(LDA):分類與降維3、兩種算法對比分析三、實際應用&#xff1…

靜態分析c/cpp源碼函數調用關系圖生成

calltree calltree 不好使用 Dpxygen https://www.doxygen.nl/download.html Graphviz https://graphviz.org/download/ 靜態代碼調用結構圖分析、構建、生成 doxygen doxygen在win和linux上均可運行,可以自動分析源碼,對c語言項目友好,預處…

使用 MySQL Shell 進行 MySQL 單機到 InnoDB Cluster 的數據遷移實踐

遷移背景與環境原來都是用mysqldump,DTS或者cdc遷移,這次8.0用了下新工具感覺挺好用的,簡單快捷,30G數據不到源環境:單機 MySQL 8.0,地址為 172.23.3.28目標環境:InnoDB Cluster 集群&#xff0…

淘寶商品API可以獲取哪些商品詳情數據?

商品詳情頁商品全部sku信息"skus": {"sku": [{"price": 45.6,"total_price": 0,"orginal_price": 45.6,"properties": "1627207:39617249736","properties_name": "1627207:39617249736…

新一代PLC控制軟件平臺EsDA-AWStudio

在工業自動化和智能制造領域,高效的軟件平臺是提升開發效率和系統性能的關鍵。ZLG致遠電子推出的EsDA-AWStudio平臺,憑借其強大的功能和靈活的設計,為工業控制和物聯網應用提供了全新的解決方案。一站式PLC工業控制軟件平臺EsDA-AWStudioZLG致…

基于深度學習的醫學圖像分析:使用MobileNet實現醫學圖像分類

前言 醫學圖像分析是計算機視覺領域中的一個重要應用,特別是在醫學圖像分類任務中,深度學習技術已經取得了顯著的進展。醫學圖像分類是指將醫學圖像分配到預定義的類別中,這對于疾病的早期診斷和治療具有重要意義。近年來,MobileN…

docker 容器常用命令

在平常的開發工作中,我們經常需要使用 docker 容器,那么常用的 docker 容器命令有哪些呢?今天簡單總結下。 一:查看容器查看運行的容器:docker ps查看所有的容器:docker ps a查看容器詳細信息&#…

重型機械作業誤傷預警響應時間縮短80%!陌訊多模態識別算法在工程現場的應用優化

一、行業痛點:機械作業場景的識別困境據《工程機械安全白皮書(2025)》統計,施工現場因機械盲區導致的工傷事故中??78.3%由識別延遲引發??。核心難點包括:??動態遮擋問題??:吊臂擺動導致目標部件部分…

2025年ESWA SCI1區TOP,強化學習多目標灰狼算法MOGWO-RL+分布式混合流水車間調度,深度解析+性能實測

目錄1.摘要2.問題描述和數學建模3.強化學習多目標灰狼算法MOGWO-RL4.結果展示5.參考文獻6.算法輔導應用定制讀者交流1.摘要 本文針對大規模個性化制造(MPM)中的調度問題,提出了一種新的解決方案。MPM能夠在確保大規模生產的前提下&#xff0…

Mac 系統下安裝 nvm

Mac 系統下安裝 nvm nvm 全稱為 node version manger,顧名思義就是管理 node 版本的一個工具,通過這個工具,我們可以在一臺計算機上安裝多個版本的 node,并且隨時進行無縫的切換。 1. 卸載原本的 node.js(重要&#xf…

變量篩選—隨機森林特征重要性

對于接觸算法模型不久的小伙伴來說,建模中海量變量篩選總是讓人頭疼,不知道如何把握。之前已經介紹了一些變量篩選的方法:變量篩選一張圖、【變量篩選】計算類別型變量IV值、KS值、一文囊括風控建模中的變量篩選方法、變量篩選—特征包含信息量。本文詳細介紹通過隨機森林算…

【設計模式】 3.設計模式基本原則

單一職責原則 對于一個類而言,有且僅有一個引起他變化的原因或者說,一個類只負責一個職責 如果一個類承擔的職責過多,那么這些職責放在一起耦合度太高了,一個職責的變化可能會影響這個類其他職責的能力。 所以我們在做軟件設計的時…

ABP VNext + Redis Bloom Filter:大規模緩存穿透防護與請求去重

ABP VNext Redis Bloom Filter:大規模緩存穿透防護與請求去重 🚀 📚 目錄ABP VNext Redis Bloom Filter:大規模緩存穿透防護與請求去重 🚀TL;DR ?1. 引言 🎉2. 環境與依賴 🛠?3. Bloom Filt…

構建工具和腳手架:從源碼到dist

構建工具和腳手架:從源碼到dist**1. 為什么需要工程轉換?****2. 構建工具的核心職責**為什么要求轉換**1)明確三種關鍵問題****(2)Webpack 的打包機制****3. 開發服務器(Webpack Dev Server)***…

數字化生產管理系統設計

下面提供一個基于Python的數字化管理系統框架,使用現代技術棧實現。這個系統將包含設備監控、故障管理、裝配配套表生成、生產計劃管理等功能。系統架構數字化生產管理系統 ├── 設備監控模塊 ├── 故障管理模塊 ├── 產品裝配管理模塊 ├── 生產計劃管理模…

【vue】創建響應式數據ref和reactive的區別

目錄 1、所謂響應式數據 2、ref創建基本類型響應式數據 3、reactive創建對象類型響應式數據 4、ref定義對象類型響應式數據 5、總結:ref和reactive對比 6、補充:toRefs與toRef 1、所謂響應式數據 所謂響應式數據就是,在vue頁面中&#…

YOLO12 改進、魔改|直方圖 Transformerm模塊HTB ,通過動態范圍特征分組、針對性注意力與多尺度融合,提高對遮擋以及多尺度目標的關注能力

在惡劣天氣(如雨、雪、霧)下的圖像恢復任務中,傳統 Transformer 模型為降低計算量,常將自注意力限制在固定空間范圍或僅在通道維度操作,導致難以捕捉長距離空間特征,尤其無法有效處理天氣退化像素&#xff…

涉水救援機器人cad【12張】三維圖+設計書明說

涉水救援機器人設計 摘 要 隨著城市化進度的加快,各種水上游樂設備的增多,水上災害和溺水事件頻繁發生,水上救援任務困難重重,特別是在一些水流湍急的環境下進行救援。傳統的水上救援工作比較緩慢,大多數是通過投射救…