文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  使用 Docker 部署 MySQL 伺服器的基本步驟

2.5.6.1 使用 Docker 部署 MySQL 伺服器的基本步驟

警告

由 MySQL 團隊維護的 MySQL Docker 映像專為 Linux 平台建置。不支援其他平台,在這些平台上使用這些 MySQL Docker 映像的使用者需自行承擔風險。請參閱此處的討論,瞭解在非 Linux 作業系統上執行這些容器的一些已知限制。

下載 MySQL 伺服器 Docker 映像
重要事項

對於 MySQL 企業版的使用者:使用 MySQL 企業版的 Docker 映像需要訂閱。訂閱是透過「攜帶您自己的授權」模式運作;請參閱如何購買 MySQL 產品和服務以瞭解詳細資訊。

下載伺服器映像於單獨的步驟並非絕對必要;但是,在您建立 Docker 容器之前執行此步驟,可確保您的本機映像為最新狀態。若要從 Oracle 容器登錄 (OCR) 下載 MySQL 社群版映像,請執行此命令

docker pull container-registry.oracle.com/mysql/community-server:tag

tag 是您要提取的映像版本的標籤 (例如,8.49.0latest)。如果省略 :tag,則會使用 latest 標籤,並下載 MySQL 社群伺服器的最新 GA 版本 (即最新的創新版本) 的映像。

若要從 OCR 下載 MySQL 企業版映像,您需要先接受 OCR 上的授權合約,並使用您的 Docker 用戶端登入容器儲存庫。請按照下列步驟操作

  • 前往 OCR:https://container-registry.oracle.com/,然後選擇 MySQL

  • 在 MySQL 儲存庫清單下方,選擇 enterprise-server

  • 如果您尚未登入 OCR,請按一下頁面右側的 登入 按鈕,然後在出現提示時輸入您的 Oracle 帳戶憑證。

  • 按照頁面右側的指示接受授權合約。

  • 使用您的容器用戶端登入 OCR,例如使用 docker login 命令

    # docker login container-registry.oracle.com 
    Username: Oracle-Account-ID
    Password: password
    Login successful.

使用此命令從 OCR 下載 MySQL 企業版的 Docker 映像

docker pull  container-registry.oracle.com/mysql/enterprise-server:tag

若要從 My Oracle Support 網站下載 MySQL 企業版映像,請前往網站,登入您的 Oracle 帳戶,然後在您進入登陸頁面後執行這些步驟

  • 選取 修補程式和更新 標籤。

  • 前往 修補程式搜尋 區域,並在 搜尋 標籤上,切換至 產品或系列 (進階) 子標籤。

  • 產品 欄位中輸入 MySQL 伺服器,並在 版本 欄位中輸入所需的版本號碼。

  • 使用其他篩選器的下拉式選單選取 說明包含,並在文字欄位中輸入 Docker

    下圖顯示 MySQL 伺服器 8.0 的 MySQL 企業版映像的搜尋設定

    Diagram showing search settings for MySQL Enterprise image
  • 按一下 搜尋 按鈕,然後從結果清單中選取您要的版本,並按一下 下載 按鈕。

  • 在出現的 檔案下載 對話方塊中,按一下並下載 Docker 映像的 .zip 檔案。

解壓縮下載的 .zip 封存檔,以取得內部的 tarball (mysql-enterprise-server-version.tar),然後執行此命令來載入映像

docker load -i mysql-enterprise-server-version.tar

您可以使用此命令列出下載的 Docker 映像

$> docker images
REPOSITORY                                             TAG       IMAGE ID       CREATED        SIZE
container-registry.oracle.com/mysql/community-server   latest    1d9c2219ff69   2 months ago   496MB
啟動 MySQL 伺服器執行個體

若要啟動 MySQL 伺服器的新 Docker 容器,請使用下列命令

docker run --name=container_name  --restart on-failure -d image_name:tag

image_name 是用於啟動容器的映像名稱;如需更多資訊,請參閱下載 MySQL 伺服器 Docker 映像

用於為您的伺服器容器提供自訂名稱的 --name 選項是選用的;如果未提供容器名稱,則會產生隨機名稱。

--restart 選項是用於設定您容器的 重新啟動原則;它應設定為值 on-failure,以啟用對用戶端工作階段內伺服器重新啟動的支援 (例如,當用戶端執行 RESTART 陳述式或在組態 InnoDB Cluster 執行個體期間)。在啟用重新啟動支援的情況下,在用戶端工作階段內發出重新啟動會導致伺服器和容器停止然後重新啟動。

例如,要為 MySQL Community Server 啟動新的 Docker 容器,請使用此命令

docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/community-server:latest

要為從 OCR 下載的 Docker 映像檔啟動 MySQL Enterprise Server 的新 Docker 容器,請使用此命令

docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/enterprise-server:latest

要為從 My Oracle Support 下載的 Docker 映像檔啟動 MySQL Enterprise Server 的新 Docker 容器,請使用此命令

docker run --name=mysql1 --restart on-failure -d mysql/enterprise-server:latest

如果指定的名稱和標籤的 Docker 映像檔尚未被先前的 docker pulldocker run 命令下載,則現在將下載該映像檔。容器的初始化開始,當您執行 docker ps 命令時,該容器會出現在正在執行的容器清單中。例如

$> docker ps
CONTAINER ID   IMAGE                                                         COMMAND                  CREATED          STATUS                    PORTS                       NAMES
4cd4129b3211   container-registry.oracle.com/mysql/community-server:latest   "/entrypoint.sh mysq…"   8 seconds ago    Up 7 seconds (health: starting)   3306/tcp, 33060-33061/tcp   mysql1

容器初始化可能需要一些時間。當伺服器準備好使用時,docker ps 命令輸出中容器的 STATUS 會從 (health: starting) 變更為 (healthy)

上述 docker run 命令中使用的 -d 選項會使容器在背景中執行。請使用此命令來監控容器的輸出

docker logs mysql1

一旦初始化完成,命令的輸出將包含為 root 使用者產生的隨機密碼;請使用例如此命令來檢查密碼

$> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs

從容器內部連線至 MySQL 伺服器

伺服器準備就緒後,您可以在剛啟動的 MySQL 伺服器容器內執行 mysql 用戶端,並將其連線至 MySQL 伺服器。使用 docker exec -it 命令在您已啟動的 Docker 容器內啟動 mysql 用戶端,如下所示

docker exec -it mysql1 mysql -uroot -p

出現提示時,輸入產生的 root 密碼(請參閱啟動 MySQL 伺服器執行個體的最後一個步驟,以了解如何尋找密碼)。由於預設情況下 MYSQL_ONETIME_PASSWORD 選項為 true,因此在將 mysql 用戶端連線至伺服器後,您必須發出此陳述式來重設伺服器 root 密碼

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

password 替換為您選擇的密碼。重設密碼後,伺服器即可使用。

容器 Shell 存取

若要擁有對 MySQL 伺服器容器的 shell 存取權限,請使用 docker exec -it 命令在容器內啟動 bash shell

$> docker exec -it mysql1 bash
bash-4.2#

然後,您可以在容器內執行 Linux 命令。例如,若要檢視容器內伺服器資料目錄中的內容,請使用此命令

bash-4.2# ls /var/lib/mysql
auto.cnf    ca.pem	     client-key.pem  ib_logfile0  ibdata1  mysql       mysql.sock.lock	   private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   mysql.sock  performance_schema  public_key.pem   server-key.pem
停止和刪除 MySQL 容器

若要停止我們已建立的 MySQL 伺服器容器,請使用此命令

docker stop mysql1

docker stop 會將 SIGTERM 訊號傳送至 mysqld 程序,以便伺服器正常關機。

另請注意,當容器的主要程序(在 MySQL 伺服器容器的情況下為 mysqld)停止時,Docker 容器也會自動停止。

若要再次啟動 MySQL 伺服器容器

docker start mysql1

若要使用單一命令停止並再次啟動 MySQL 伺服器容器

docker restart mysql1

若要刪除 MySQL 容器,請先停止它,然後使用 docker rm 命令

docker stop mysql1
docker rm mysql1

如果您希望同時刪除伺服器資料目錄的 Docker 磁碟區,請將 -v 選項新增至 docker rm 命令。

升級 MySQL 伺服器容器
重要事項
  • 在對 MySQL 執行任何升級之前,請仔細遵循第 3 章升級 MySQL中的指示。其中討論的其他指示中,在升級之前備份資料庫尤其重要。

  • 本節中的指示要求伺服器的資料和組態已持續保存在主機上。如需詳細資訊,請參閱持續保存資料和組態變更

請按照這些步驟將 MySQL 8.4 的 Docker 安裝升級至 9.0

  • 停止 MySQL 8.4 伺服器(在此範例中,容器名稱為 mysql84

    docker stop mysql84
  • 下載 MySQL 9.0 伺服器 Docker 映像檔。請參閱下載 MySQL 伺服器 Docker 映像檔中的指示。請確定您使用正確的 MySQL 9.0 標籤。

  • 使用已持續保存在主機上的舊伺服器資料和組態(如果需要,請進行適當的修改,請參閱第 3 章升級 MySQL)啟動新的 MySQL 9.0 Docker 容器(在此範例中,名為 mysql90)(在此範例中,透過繫結掛載)。對於 MySQL Community Server,請執行此命令

    docker run --name=mysql84 \
       --mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
       --mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
       -d container-registry.oracle.com/mysql/community-server:9.0

    如果需要,請將 container-registry.oracle.com/mysql/community-server 調整為正確的映像檔名稱,例如,將其替換為 container-registry.oracle.com/mysql/enterprise-server,以取得從 OCR 下載的 MySQL Enterprise Edition 映像檔,或 mysql/enterprise-server,以取得從 My Oracle Support 下載的 MySQL Enterprise Edition 映像檔。

  • 等待伺服器完成啟動。您可以使用 docker ps 命令檢查伺服器的狀態(請參閱啟動 MySQL 伺服器執行個體,以了解如何執行此操作)。

遵循相同的步驟,在 9.0 系列中升級(也就是說,從版本 9.0。x 到 9.0。y):停止原始容器,然後使用較新的映像檔在舊伺服器資料和組態上啟動新的容器。如果您在啟動原始容器時使用 9.0 或 latest 標籤,並且現在有一個您想要升級的新 MySQL 9.0 版本,則必須先使用命令提取新版本的映像檔

docker pull container-registry.oracle.com/mysql/community-server:9.0

然後,您可以透過在舊的資料和組態上使用相同的標籤啟動新的容器來升級(如果您使用的是 MySQL Enterprise Edition,請調整映像檔名稱;請參閱下載 MySQL 伺服器 Docker 映像檔

docker run --name=mysql84new \
   --mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
   --mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
-d container-registry.oracle.com/mysql/community-server:9.0
更多關於使用 Docker 部署 MySQL 伺服器的主題

如需更多關於使用 Docker 部署 MySQL 伺服器的主題,例如伺服器組態、持續保存資料和組態、伺服器錯誤記錄檔和容器環境變數,請參閱第 2.5.6.2 節:「更多關於使用 Docker 部署 MySQL 伺服器的主題」