mysql是否需要容器化深入分析
正文
在容器化的時代,當(dāng)然一切皆可容器化。在docker官網(wǎng)首頁赫然有下面這幾個大字。足以知道docker的優(yōu)勢。那么且問,mysql適合跑在docker中嗎?
當(dāng)然,這個問題有人說可以,也有人說不可以。下面我們就正反都來看下各自的觀點。
1. 不可以容器化
大部分人的理由有兩個:
其一,數(shù)據(jù)安全性不能保障
在容器或者docker出現(xiàn)故障時,不易恢復(fù)。即使使用數(shù)據(jù)卷掛載(volume)也會在容器故障時產(chǎn)生數(shù)據(jù)問題,共享的數(shù)據(jù)卷且對宿主機(jī)也會有損傷。即數(shù)據(jù)的持久化和完整性不能保證。docker適合無狀態(tài)的服務(wù),不適合有數(shù)據(jù)狀態(tài)的mysql。
其二,影響mysql性能
mysql我們常用來讀寫,那么IO性能就會受docker影響,最終瓶頸出現(xiàn)在寫(在做了掛載情況下);且如果物理機(jī)其他應(yīng)用占用過多資源,也會影響到容器。
當(dāng)然,以上的問題,也都有對應(yīng)的解決方案,但時也足夠復(fù)雜;對研發(fā)力量不足的企業(yè)來說,如果盲目容器化的話,可能會撿了芝麻,丟了西瓜?! ?/p>
2. 可以容器化
有的小伙伴就會說了,同樣是服務(wù),業(yè)務(wù)服務(wù)都是跑在docker中的,數(shù)據(jù)庫服務(wù)有何不可?
我只要配置下數(shù)據(jù)卷掛載,解決掉數(shù)據(jù)持久化問題,基本上就問題不大了。
比如:
docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
亦或是docker官方給的mysql容器化的配置sample
services: backend: build: backend ports: - 8080:8080 secrets: - db-password db: # We use a mariadb image which supports both amd64 & arm64 architecture image: mariadb:10.6.4-focal # If you really want to use MySQL, uncomment the following line #image: mysql:8.0.27 restart: always secrets: - db-password volumes: - db-data:/var/lib/mysql environment: - MYSQL_DATABASE=example - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db-password expose: - 3306 - 33060 volumes: db-data: secrets: db-password: file: db/password.txt
兩個例子都是通過-v把mysql相關(guān)目錄數(shù)據(jù)做好掛載,那么在容器出現(xiàn)故障或者被刪除時,能夠保證相關(guān)數(shù)據(jù)在宿主機(jī)中存在。讓數(shù)據(jù)恢復(fù)成為了可能性。注意!是可能性
當(dāng)然還有docker天然的優(yōu)勢:
- 簡化部署,可移植性高
- 保證環(huán)境一致性
- 這兩個優(yōu)勢 就足以促使很多人去做容器化部署。(估計大家都被手動部署,遷移,多環(huán)境問題搞得頭大過)
小結(jié)
兩種觀點或者是叫兩種方案沒有對錯。也不應(yīng)該有爭論。而應(yīng)該實事求是,根據(jù)當(dāng)前的業(yè)務(wù)發(fā)展,研發(fā)力量來決策。如果沒有那個技術(shù)力量,就老老實實部署在物理機(jī)上,成本和風(fēng)險更小。只是“萬事開頭難”而已。如果有實力,有技術(shù),那么需要設(shè)計出一個好的架構(gòu)方案;比如需要考慮鏡像管理,監(jiān)控,容器災(zāi)備,存儲擴(kuò)展,k8s等。技術(shù)的潮流一定是容器化,serverless化。作為技術(shù)人們要擁抱變化,要去踏浪,否則只會被淹沒在歷史的浪潮里。
以上就是mysql是否需要容器化深入解析的詳細(xì)內(nèi)容,更多關(guān)于mysql容器化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
mysql 數(shù)據(jù)類型轉(zhuǎn)換的實現(xiàn)
這篇文章主要介紹了mysql 數(shù)據(jù)類型轉(zhuǎn)換的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02解析SQL Server 視圖、數(shù)據(jù)庫快照
在程序開發(fā)過程中,任何一個項目都離不開數(shù)據(jù)庫,這篇文章給大家詳細(xì)介紹SQL Server 視圖、數(shù)據(jù)庫快照相關(guān)內(nèi)容,需要的朋友可以參考下2015-08-08CentOs7安裝部署Sonar環(huán)境的詳細(xì)過程(JDK1.8+MySql5.7+sonarqube7.8)
這篇文章主要介紹了CentOs7安裝部署Sonar環(huán)境(JDK1.8+MySql5.7+sonarqube7.8),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06Mysql中關(guān)于Incorrect string value的解決方案
在對mysql數(shù)據(jù)庫中插入數(shù)據(jù)的時候,直接插入中文是沒有問題的!但是用預(yù)編譯語句時,用流對數(shù)據(jù)進(jìn)行處理總報incorrect string value這個異常。本篇文章教給你解決方法2021-09-09MySQL高可用解決方案MMM(mysql多主復(fù)制管理器)
MySQL本身沒有提供replication failover的解決方案,通過MMM方案能實現(xiàn)服務(wù)器的故障轉(zhuǎn)移,從而實現(xiàn)mysql的高可用。MMM不僅能提供浮動IP的功能,如果當(dāng)前的主服務(wù)器掛掉后,會將你后端的從服務(wù)器自動轉(zhuǎn)向新的主服務(wù)器進(jìn)行同步復(fù)制,不用手工更改同步配置2017-09-09MySQL命令行導(dǎo)出與導(dǎo)入數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了利用命令行MySQL導(dǎo)出數(shù)據(jù)庫與導(dǎo)入數(shù)據(jù)庫的例子,感興趣的小伙伴們可以參考一下2016-06-06