在 Docker 中使用 mysql 的一些技巧

2021-09-16 23:46:01 字數 1654 閱讀 4490

今天我寫一點在 docker 容器中使用 mysql 的 tips.

要不要在生產環境使用 docker 執行資料庫這麼深奧的問題,等我踩足夠的坑再來寫吧。

但是至少在開發和測試環境你可以用 docker 管理資料庫啊。

先貼乙個我常用的 docker-compose 片段,後邊進行詳細的解釋。這是日常使用的狀態,此處省略了別的服務。

version: '2'

services:

mysql:

image: mysql:5.7.16

ports:

- $:3306

environment:

- tz=asia/shanghai

command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

volumes:

- ./mysql_data:/var/lib/mysql

restart: unless-stopped

一定要鎖定映象到最小的版本,因為mysql映象公升級後需要你手動在容器中執行命令去mysql-upgrade,否則很久之後,你才發現有的資料已經損壞了。

實在想公升級,公升級步驟如下:

如果想在外部通過工具訪問,需要將3306埠對映到host上的乙個埠,不準備外部訪問的環境則不必。

一般來說開發和測試環境還是經常需要登到資料庫上檢視的。

新增環境變數tz讓mysql用你的預設時區啟動。

這是因為 mysql 的基礎映象是 debian, 這個環境變數可以宣告 debian 的時區,然後被 mysql 繼承。

mysql 的映象預設編碼是latin1這可不行,在中國我們一般都用utf8

一般我們要是在主機上配置 mysql 的話,是去修改配置檔案。但使用容器時對映進去乙個配置檔案是很複雜的。

於是我們有個簡單的辦法,mysql 接受很多 flag 通過啟動時傳入。其中就有宣告伺服器預設編碼的。

我們的command命令就是給 mysql 在啟動時加了兩個引數。

容器中有需要持久化儲存的內容時就會有點麻煩。一般有兩種方案,一種是對映主機的乙個目錄,一種是利用資料卷。

在很長時間的使用中,我總結出了這個比較方便的辦法。

mysql 容器在首次啟動的時候,必須指定乙個root密碼才能啟動,指定的方式是宣告環境變數mysql_root_password

一旦在指定的資料資料夾發現已經存在庫的時候,這個引數就會被忽略掉。

所以我們只需要在第一次啟動的時候加上,後面有了資料後都去掉就好了。

在容器中執行的 mysql 該怎麼匯入匯出資料或結構呢?照這麼做吧:

# backup

docker exec container /usr/bin/mysqldump -u root --password=root database > backup.sql

# restore

docker exec -i container /usr/bin/mysql -u root --password=root database < backup.sql

在docker中使用MySQL

docker pull mysql 5.7.32版本查詢 檢視常用docker 命令 建立目錄,用於宿主機與容器的對映,以便將資料儲存在宿主機,而不是容器中。usr local docker mysql conf,配置檔案 usr local docker mysql logs,日誌檔案 usr l...

在 Docker 中使用 MongoDB

如果你是一名 mongodb 的初學者,那麼你入門 mongodb 的第一件事就是安裝,但是安裝 mongodb 還需要自己配置一些服務。這時候,docker 就能幫上大忙,它能夠讓你不需要本地安裝 mongodb 就能使用。首先你的電腦上需要 安裝 docker,然後在 docker 的映象中查詢...

在docker中使用U盤

最初的解決方案是對映host中固定的目錄到container中,但是只能把u盤中的資料拷貝到固定的目錄中,在container中才可以看到。如果在container建立前把u盤mount到固定目錄,這個也沒有問題。如果在container建立以後,再把u盤mount到固定的目錄中,在containe...