從單機到叢集:使用Docker Compose 部署MySQL

從單機到叢集:使用Docker Compose 部署MySQL

引言

在現代應用程式中,資料庫系統扮演著至關重要的角色,尤其是MySQL。 MySQL 是一個廣泛使用的開源關聯式資料庫管理系統,因其高效能、可靠性以及靈活的擴展性而備受青睞。隨著微服務架構的興起,如何有效地部署和管理MySQL 資料庫成為了開發者面臨的一大挑戰。透過Docker 和Docker Compose,我們能夠快速部署MySQL 單機版以及叢集環境,從而滿足不同的應用需求。

Docker 與Docker Compose 概述

Docker 的基本概念

Docker 是一個開放式平台,用於開發、交付和運行應用程式。它透過容器技術將應用程式及其依賴性打包在一起,使得應用程式能夠在任何環境中一致地運作。 Docker 容器輕量、啟動快速,非常適合微服務架構下的應用部署。

Docker Compose 的用途與優勢

Docker Compose 是Docker 提供的工具,用於定義和管理多容器Docker 應用程式。透過使用 docker-compose.yml 文件,開發者可以在一個文件中描述應用的服務、網路和磁碟區,大大簡化了應用程式的配置和部署過程。

MySQL 單機版部署

環境準備

在開始部署MySQL 單機版之前,請確保您已經安裝了Docker 和Docker Compose。如果尚未安裝,可以參考官方文件進行安裝。

Docker Compose 設定檔範例

建立一個名為 docker-compose.yml 的文件,內容如下:

version: '3.8' services: mysql: image: mysql:5.7 restart: always environment: # root管理員密碼MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: testdb # 普通用戶名"3306: 3306" volumes: - mysql-data:/var/lib/mysql volumes: mysql-data:

在這個設定檔中,我們定義了一個名為 mysql 的服務,使用MySQL 5.7 鏡像。透過環境變數設定了根密碼、資料庫名稱和使用者資訊。我們還將MySQL 資料庫的3306 端口映射到宿主機的3306 端口,並定義了一個持久化資料卷 mysql-data

啟動MySQL 單機版

在包含 docker-compose.yml 文件的目錄中,執行以下命令啟動MySQL 單機版:

docker-compose up -d

使用 -d 參數在背景運行服務。啟動後,可以透過以下命令查看運行狀態:

docker-compose ps

這裡會輸出正在運作的mysql容器資訊。

驗證MySQL 單機版運作情況

若要驗證MySQL 是否運作正常,可以使用MySQL 用戶端連線到資料庫:

# mysql_container_id 替換為自己的docker容器實際id docker exec -it mysql -u root -p

輸入根密碼後,您將進入MySQL 命令列介面。可以執行下列SQL 語句來查看已建立的資料庫:

SHOW DATABASES;

MySQL 叢集概述

集群的定義

MySQL 叢集是為了提高資料庫的可用性和可擴充性而設計的架構。透過將多個MySQL 實例組合在一起,使用者可以實現負載平衡、故障轉移等功能。叢集可以透過多種方式實現,主要有多執行個體部署和主從複製。

多實例和主從的區別

  1. 多實例

    • 多實例部署是指在同一台機器上執行多個MySQL 實例。每個實例都有獨立的設定、資料檔案和網路連接埠。這種方式適用於需要在同一台實體伺服器上執行多個資料庫的場景。
    • 優點:資源利用率高、易於管理。
    • 缺點:單點故障,若伺服器故障,所有實例都會受到影響。
  2. 主從複製

    • 主從複製是一種非同步複製機制,通常用於資料的備份和負載平衡。主資料庫負責處理所有寫入請求,而從資料庫則用於讀取請求,主庫的資料會非同步複製到從庫。
    • 優點:提供資料冗餘和負載平衡。
    • 缺點:可能存在資料延遲,尤其在高負載情況下。

MySQL 叢集部署

環境準備

確保Docker 和Docker Compose 已正確安裝。接下來,我們將建立一個包含主從複製的MySQL 叢集配置。

Docker Compose 設定檔範例

建立一個名為 docker-compose-cluster.yml 的文件,內容如下:

version: '3.8' services: # 主msyql mysql-master: image: mysql:5.7 restart: always environment: # root管理員密碼MYSQL_ROOT_PASSWORD: 123456 MYtest_DATABASE: testjact ASSWORD: testPassword MYSQL_REPLICATION_MODE : master MYSQL_REPLICATION_USER: repl_user MYSQL_REPLICATION_PASSWORD: replpassword ports: - "3306:3306" volumes: - master-data:/var/lib/mysql # 從mysql mysql-slave: 5age: 25:5: 555:5% mysql-slave: 5age: 35:5: 55:5 月 35:53:5:55:55:5_L5: 55: 35:55:55: 35:55:55:55:55:55:55:55:5% : f5:55:5% : f5:55:5% 5:5:5 月 3:5:5:5:5% 成本密碼MYSQL_ROOT_PASSWORD: 123456 MYSQL_REPLICATION_MODE: slave MYSQL_REPLICATION_USER: repl_user MYSQL_REPLICATION_PASSWORD: replpassword MYSQL_MASTER_HOST: mysql-master MYSQL_7: replsl -data:/var/lib/mysql volumes: master-data: slave- data:

在該配置中,我們定義了兩個服務:mysql-mastermysql-slave。主伺服器使用了 MYSQL_REPLICATION_MODE: master,而從伺服器則設定為 MYSQL_REPLICATION_MODE: slave,並指定了主伺服器的連接資訊。

啟動MySQL 叢集

在包含 docker-compose-cluster.yml 在檔案的目錄中,執行以下命令啟動MySQL 叢集:

docker-compose -f docker-compose-cluster.yml up -d

驗證MySQL 叢集運行情況

要驗證叢集狀態,可以先連線到主伺服器:

# mysql_container_id 替換為自己的docker容器實際id docker exec -it mysql -u root -p

在MySQL 命令列中,輸入以下命令檢查從伺服器的狀態:

SHOW MASTER STATUS;

接著,連接到從伺服器:

# mysql_container_id 替換為自己的docker容器實際id docker exec -it mysql -u root -p

在從伺服器的MySQL 命令列中,輸入以下命令檢查主伺服器的狀態:

SHOW SLAVE STATUS\G;

確認 Slave_IO_RunningSlave_SQL_Running 都為 Yes,這表示複製工作正常。

總結

本文介紹如何透過Docker Compose 部署MySQL 單機版和叢集環境。我們詳細講解了多實例和主從複製的區別,並提供了相應的配置範例。 MySQL 叢集不僅能提高應用程式的可用性和可擴充性,還能透過負載平衡提升效能。

隨著雲端運算和微服務的不斷發展,資料庫叢集的部署和管理將變得愈加重要。未來,隨著技術的進步,我們可以期待更聰明的資料庫解決方案,為我們的應用提供更高的效能和可靠性。

希望這篇文章能夠為您在使用Docker 部署MySQL 時提供協助。如有疑問或建議,歡迎隨時交流!

當然可以!以下是部落格文章中可以包含的參考連結和來源範例,涵蓋Docker、MySQL 和相關技術的文獻資料。

參考連結

  1. Docker 官方文檔

  2. Docker Compose 官方文檔

  3. MySQL 官方文檔

  4. MySQL 主從複製的官方指南

  5. Docker 和MySQL 結合的教學課程

  6. MySQL 叢集的概念與設計

暫無評論

發送評論 編輯評論

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ°Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
顏文字
Emoji
小恐龍
花!
上一篇
下一篇
Rain ai 招募前蘋果硬體專家 jean didier allegrucci,推動更有效率的ai半導體研發. ??. Docker on debian distro of linux operating system.