docker安裝mysql掛載外部配置和數據目錄


從docker hub上可以找到mysql外掛配置和數據目錄的一些文檔說明

https://hub.docker.com/_/mysql

從該文檔中可以了解到,mysql的默認配置為/etc/mysql/my.cnf,該文件中包含了一個額外的數據目錄/etc/mysql/conf.d 或者/etc/mysql/mysql.conf.d

先啟動一個不帶任何掛載的mysql容器

docker run -d -p 3307:3307 -e MYSQL_ROOT_PASSWORD=12345 --name mysql_test2 mysql:5.7.23

進入容器

docker exec -it mysql_test2 bash

根據上述docker hub上描述,可以發現/etc/mysql/conf.d/中存在三個文件,分別為docker.cnf,mysql.cnf和mysqldump.cnf,/etc/mysql/mysql.conf.d/下只存在一個文件mysqld.cnf

第一種啟動方式

docker run -d -p 3306:3306 -v /etc/mysql/my.cnf:/etc/mysql/conf.d/mysql.cnf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_test mysql:5.7.23

這樣啟動的容器中,/etc/mysql/conf.d/mysql.cnf中的內容將被/etc/mysql.my.cnf中文件內容覆蓋

第二種啟動方式

docker run -d -p 3306:3306 -v /etc/mysql/:/etc/mysql/conf.d/ -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_test mysql:5.7.23

這種方式將會把/etc/mysql/conf.d/下面的三個文件替換為外部掛載的my.cnf文件,也就是說,這種方式掛載了目錄,容器中的目錄與外部文件目錄內容一致

第三種啟動方式

docker run -d -p 3306:3306 -v /etc/mysql/my.cnf:/etc/mysql/conf.d/mysqld.cnf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345 --name mysql_test mysql:5.7.23

登錄都容器中,可以發現/etc/mysql/conf.d/中的文件多了一個mysqld.cnf,且該文件即是我們外掛的my.cnf,而/etc/mysql/mysql.conf.d/mysqld.cnf中的內容依然是之前的

以上三種方式都可以實現外掛配置和數據目錄,但首先配置中的文件路徑在容器中需要存在,否則mysql容器將無法正常啟動。個人覺得第二種看着順眼點。:)

MYSQL8

mysql8中,/etc/mysql/my.cnf只依賴了/etc/mysql/conf.d/目錄,所以上述的第三種方式就行不通了,另外如果配置文件中設置有socket,則client和mysqld設置的socket應該一致,如果去掉,就全部去掉,其他再有錯誤,根據mysql中錯誤日志查找下原因,一般都是因為配置

docker run -d -p 3306:3306 -v /etc/mysql/my.cnf:/etc/mysql/conf.d/mysqld.cnf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345 --name mysql_test mysql

 

如果使用虛擬機,內存比較小時,注意max_connections和innodb_buffer_pool_size不要設置太大,否則啟動會非常慢,本例中分別配置了2000和1200M,但當前虛擬機才給分配了1G內存,故啟動的時候非常慢,一般前者調整為512 ~1000,后者為物理內存的60%~70%,但本虛擬機不止mysql,還有其他程序,故將兩個參數分別改為200和100M,啟動速度比之前快了好多倍


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM