1. 程式人生 > 其它 >以docker的方式部署mysql資料庫的方法

以docker的方式部署mysql資料庫的方法

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中很多的配置引數都已經發生了變化,配置的時候,根據提示動態的進行調整。