以docker的方式部署mysql資料庫的方法
阿新 • • 發佈:2022-04-02
1、概述
本文件介紹如何通過docker的方式來執行mysql資料庫,進而以最簡單的、最快速的方式來部署mysql
2、部署過程
接下來,我們來介紹通過docker部署mysql的過程。
2.1、建立目錄(配置、資料)
在部署之前,通過以下的命令建立配置目錄、資料庫,用於將容器內資料持久化到本地,和增加自定義的配置。
MYSQL_BASEDIR=/data/apps/mysql
mkdir -p ${MYSQL_BASEDIR}/data
mkdir -p ${MYSQL_BASEDIR}/conf
2.2、啟動mysql服務
#宣告mysql相關的環境變數 MYSQL_VERSION="8.0.28" MYSQL_CONTAINER_NAME=mysql-${MYSQL_VERSION} MYSQL_HOST_PORT="3306" MYSQL_BASEDIR=/data/apps/mysql MYSQL_DATADIR=${MYSQL_BASEDIR}/data MYSQL_CONFDIR=${MYSQL_BASEDIR}/conf MYSQL_ROOT_PASSWORD="xxxxxxx" MYSQL_IMAGE_TAG="172.20.58.152/database/mysql:8.0.28" # 執行mysql服務 docker run -d \ --name ${MYSQL_CONTAINER_NAME} \ -p ${MYSQL_HOST_PORT}:3306 \ --restart always \ -v ${MYSQL_DATADIR}:/var/lib/mysql \ -v ${MYSQL_CONFDIR}:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \ ${MYSQL_IMAGE_TAG}
說明:上面使用的映象172.20.58.152/database/mysql:8.0.28已經提前下載到本地的harbor中了,如果是內網可以直接使用,否則,需要先下載同版本的mysql映象才能執行。
2.3、檢視服務的狀態
- 檢視容器狀態
docker ps -l
- 檢視埠啟動情況
[root@nctest-snap-test-02 mysql]# netstat -ntlp | grep 3306 tcp6 0 0 :::3306 :::* LISTEN 12104/docker-proxy [root@nctest-snap-test-02 mysql]#
確保埠已經正常的啟動。
2.4、通過客戶端工具進行連線測試
docker exec -it mysql-8.0.28 bash -c "mysql -u root -p"
輸入環境變數中宣告的root使用者的密碼,來登入到資料庫
已經可以看到其中的具體的庫的資訊。
OK,通過以上的步驟,就完成了資料庫的基本部署,那麼,如果要自定義配置,該怎麼做呢?
繼續往下看··· ···
3、增加自定義的配置
在開始,我們聲明瞭配置檔案目錄conf,我們自定義的配置檔案就要以.cnf 【字尾必須是這個】方式放在這個目錄中。
以下為具體的示例:
- 建立配置檔案
cd ${MYSQL_BASEDIR}/conf cat > mysqld.cnf <<"eof" [mysqld] default-time-zone=+08:00 transaction-isolation=READ-COMMITTED server-id=1 log-bin expire_logs_days=7 log_bin_trust_function_creators=1 max_connect_errors=99999 max_error_count=65535 character-set-server=utf8mb4 lower_case_table_names=1 max_connections=10000 max_user_connections=10000 wait_timeout=31536000 interactive_timeout=31536000 innodb_buffer_pool_size=8192M max_allowed_packet=100M eof
- 重啟mysql容器
docker restart mysql-8.0.28
如果無法重啟,且報錯如下:
2022-04-02T06:10:08.742692Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').
2022-04-02T06:10:08.742971Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2022-04-02T06:10:08.743214Z 0 [ERROR] [MY-010119] [Server] Aborting
由於字典已經初始化過了,不可以修改,建議重新初始化!
也就是說,先將配置檔案配置好,在進行2.2步驟的啟動mysql服務。
如果已經執行,可以通過以下的步驟,關閉、刪除容器、刪除資料庫目錄,重新啟動mysql
- 關閉、刪除資料庫
docker stop mysql-8.0.28
docker rm mysql-8.0.28
MYSQL_BASEDIR=/data/apps/mysql
MYSQL_DATADIR=${MYSQL_BASEDIR}/data
rm -rf ${MYSQL_DATADIR}/*
- 重新初始化資料
#宣告mysql相關的環境變數
MYSQL_VERSION="8.0.28"
MYSQL_CONTAINER_NAME=mysql-${MYSQL_VERSION}
MYSQL_HOST_PORT="3306"
MYSQL_BASEDIR=/data/apps/mysql
MYSQL_DATADIR=${MYSQL_BASEDIR}/data
MYSQL_CONFDIR=${MYSQL_BASEDIR}/conf
MYSQL_ROOT_PASSWORD="xxxxx"
MYSQL_IMAGE_TAG="172.20.58.152/database/mysql:8.0.28"
# 執行mysql服務
docker run -d \
--name ${MYSQL_CONTAINER_NAME} \
-p ${MYSQL_HOST_PORT}:3306 \
--restart always \
-v ${MYSQL_DATADIR}:/var/lib/mysql \
-v ${MYSQL_CONFDIR}:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
${MYSQL_IMAGE_TAG}
注意:在mysql 8中很多的配置引數都已經發生了變化,配置的時候,根據提示動態的進行調整。