今天我寫一點在 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...