A. docker中MySQL的時區修改
docker中的mysql時區是使用了世界標准時間(UTC),把時區改成東八區方法:
1、啟動容器時設置: 添加如下配置:
2、進入docker配置:(重啟才能生效--永久生效)
3、臨時修改(從mysql上修改,重啟失效)
B. 解決docker 中mysql佔用內存過大問題
docker stats
首先安裝vim : yum install vim -y
修改mysql配置 : vim /etc/my.cnf
[mysqld]
performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256
docker restart db-manage
C. docker 怎麼配置mysql
首先創建一個Dockerfile:
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
然後使用docker build -t name .命令來構建一個image,在這里,FROM是源鏡像,如構建mysql可以使用FROM ubuntu:14.04來指定操作系統,RUN是跑的一些shell命令,我們能通過這些命令來在image持久化一些操作。CMD則是docker run時執行的命令。
D. docker mysql 配置文件在哪兒
首先要看你是自己裝的還是docker pull的成品,不過不管怎麼樣,mysql的配置文件名稱是不變的,最簡單的方法是使用在容器里使用find / -name +文件名稱 查找。
E. Docker MySQL修改配置文件不生效
官方文檔說只要volume映射就可以 https://hub.docker.com/_/mysql?tab=description
但本地配置文件雖然映射過去了,MySQL對於配置文件的許可權會檢查,導致不生效。錯誤信息為
具體方法見StackOverflow: https://stackoverflow.com/questions/37001272/fixing-world-writable-mysql-error-in-docker
解決思路是映射配置文件的source,並在啟動MySQL前將配置文件source復制到conf.d,這樣配置文件的許可權是滿足要求的。
我使用的容器版本內vim裝不上,無法容器內編輯配置文件。root也進不去,無法修改文件許可權。
F. Docker 安裝Mysql 配置 lower_case_table_names 不生效問題
重啟mysql
show global variables like '%lower_case%'
沒有生效! 且查了很多文章都是來回拷貝,無有用信息
將參數配置在docker run 中有效
注意/說明
1.對於已經在運行的mysql docker,沒有辦法, 備份資料庫 再docker run 一個
2.lower_case_table_names 在 docker run 參數中變成了:lower-case-table-names
3.可能類似的參數都需要這種方式才能成功
4.本次問題主要是為了運行開源代碼,並不是推薦使用mysql 的"忽略大小寫"
G. Docker映射配置文件到宿主機
最近在做mysql中間件的docker,搞了mycat、mysql route都拉不起來容器,最後試試proxysql可以,proxysql官方發布了鏡像,感覺比較可靠。但是遇到一個小問題,筆者以前寫過一篇文章-Docker MySQL數據持久化,用數據卷掛載的方式將mysql的數據(映射數據目錄)持久化到宿主機。那麼配置文件也是有必要來映射的,注意就可以避免在容器內安裝編輯器。
容器內有apt 和ap-get工具,安裝前要apt update(或者apt-get update,較慢)更新軟體列表,然後apt install(或者apt-get install),這樣會增大容器空間,是沒有必要的。筆者以前就是這樣操作的,但是比較麻煩,而且容器如果是內部網路的話來安裝的話就更加不方便了。筆者在映射數據目錄時使用-v /home/mysql/data:/var/lib/mysql 。但是使用同樣的分發,今天在映射proxysql的配置文件proxysql.cnf時遇到一個麻煩。
先看看筆者掛載時遇到的問題: Are you trying to mount a directory onto a file。
都是文件,那裡來的目錄呢。映射的意思是將可以將宿主機目錄掛載到容器中,那麼可能就是將/home/mycentos/proxysql.cnf設別為一個目錄了,因為容器內/etc/proxysql.cnf的是真實存在的文件。在/home/mycentos/目錄下ls -l查看一下。
果然是目錄!輾轉反側找到原因是 docker啟動容器進行掛載的時候,如果路徑不存在,那麼docker會自動創建一個目錄。
筆者的home/mycentos/目錄下沒有proxysql.cnf文件,掛載時docker就新建了一個proxysql.cnf的目錄,但是這個對於掛載數據目錄時是十分有用的,對於配置文件來說是不行的。於是筆者在目錄home/mycentos/下新建了一個proxysql.cnf文件,再次運行docker run成功(前面運行失敗的容器需要刪除,不然名稱沖突)。
docker run -itd --name proxysql -p 16032:6032 -p 16033:6033 -p 16070:6070 -v /home/mycentos/proxysql.cnf:/etc/proxysql.cnf proxysql/proxysql
掛載後,容器內的/etc/proxysql.cnf配置文件是空的,不掛載的情況下是保持默認配置文件內容的,使用徐需要在編輯/home/mycentos/proxysql.cnf文件,然後進入容器後/etc/proxysql.cnf配置文件會跟隨改變的。但是配置文件為空,那麼就要從頭開始配置,這對於配置文件很多的話是不方便的,保留原來的配置配置文件,再在裡面修改會更加方便。這里筆者只能想到先運行一個容器,然後docker cp拷貝容器內的文件或者文件夾,在刪除這個容器,另外開一個配置文件映射的容器。
映射配置文件避免在容器內進行apt操作,使得容器膨脹過大。比如你要安裝編輯器vi,首先要apt update更新,然後apt install ,相比於在容器外對其進行操作來說,更加麻煩沒必要。
H. 在Docker中安裝MySQL5.7
docker pull mysql:5.7
將全部的配置文件和關聯的文件夾統一放到 /opt/docker/mysql 中
創建 MySQL 配置文件文件夾
mkdir -p /opt/docker/mysql/conf.d
增加並修改配置文件 config-file.cnf
vim /opt/docker/mysql/conf.d/config-file.cnf
輸入如下內容:
創建 MySQL 數據文件夾
mkdir -p /opt/docker/mysql/var/lib/mysql
啟動,設置默認密碼 root ,TZ 設置容器的默認時區
Windows使用這條:
進入容器
docker exec -it mysql bash
進入 MySQL
mysql -uroot -p
輸入剛才我們設置的密碼 root
授權
mysql> GRANT ALL ON *.* TO 'root'@'%';
刷新許可權
mysql> flush privileges;
更新加密規則
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root' PASSword EXPIRE NEVER;
更新 root 密碼
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密碼';
刷新許可權
mysql> flush privileges;
退出容器
exit
啟動容器
docker start mysql
停止容器
docker stop mysql
重啟容器
docker restart mysql
進入容器
docker exec -it mysql bash
刪除容器
docker rm mysql
查看日誌
docker logs -f mysql
備份數據
docker exec mysql sh -c 'exec mysqlmp --all-databases -uroot -p 密碼' > /usr/local/all-databases.sql
恢復數據
docker exec -i mysql sh -c 'exec mysql -uroot -p 密碼' < /usr/local/all-databases.sql
I. Docker搭建與使用
docker 命令與 Docker 引擎通訊之間通過 UnixSocket ,但是能夠有許可權訪問 UnixSocket 的用戶只有 root 和 docker 用戶組的用戶才能夠進行訪問,所以我們需要建立一個 docker 用戶組,並且將需要訪問 docker 的用戶添加到這一個用戶組當中來。
這里使用的是 阿里雲提供的鏡像加速 ,登錄並且設置密碼之後在左側的 Docker Hub 鏡像站點 可以找到專屬加速器地址,復制下來。
然後分開執行以下命令:
之後重新載入配置,並且重啟 Docker 服務
這里推薦使用 Portainer 作為容器的 GUI 管理方案。官方地址: https://portainer.io/install.html
安裝命令:
訪問你的 IP:9000 即可進入容器管理頁面。
名字為鏡像庫中的鏡像名,若出現許可權問題報錯,前面加上sudo即可。
參數說明:
-p 3306:3306 :將容器的3306埠映射到主機的3306埠
-v /mydata/mysql/log:/var/log/mysql :將配置文件夾掛載到主機
-v /mydata/mysql/data:/var/lib/mysql :將日誌文件夾掛載到主機
-v /mydata/mysql/conf:/etc/mysql :將配置文件夾掛載到主機
-e MYSQL_ROOT_PASSWORD=root :初始化root用戶的密碼
驗證,查看docker下的所有進程:docker ps
docker安裝的mysql,相當於linux系統中單開了一個linux專門用來安裝mysql。
-p 3306:3306 :將容器的3306埠映射到主機(vagrant開啟的虛擬機)的3306埠。
日誌也是將經常變動數據掛載到外部linux文件夾下。
上面已經說到,將mysql容器中的配置文件掛載到本機中,所以直接修改本機目錄下的配置文件即可。
防止掛載時 redis.conf找不到而在conf文件夾下再次創建名為redis.conf的文件夾,所以預先創建。
mysql之前是進入容器,現在我們直接進入客戶端進行操作redis
賊好用啊,還有提示。
docker restart redis 重啟redis容器後,發現之前的數據都丟失了,因為保存在內存中。所以我們需要配置持久化。
因為之前已經將容器配置文件掛載到本機目錄下,所以直接修改本機redis.conf即可。
重啟驗證,OK。
J. 解決Docker Mysql無法正確載入配置文件
使用-v映射宿主機下的文件作為mysql的配置文件時,可能出現mysql無法正確讀取文件中配置項的問題
該問題的主要原因為宿主機的文件許可權不對,由於docker的mysql鏡像啟動使用的是mysql這個用戶,而非root用戶,mysql用戶的id和gid都為999
通過修改宿主機文件的許可權可以解決該問題