一、部署規划
服務器IP | 192.168.113.48 |
---|---|
端口 | 3306 |
安裝目錄 | /home/work/docker-mysql-5.7 |
數據映射目錄 | /home/work/docker-mysql-5.7/data |
配置文件 | /home/work/docker-mysql-5.7/config/my.cnf |
使用3306端口,安裝前請確保宿主機3306端口是否已被占用。Mysql的默認字符集為latin1,根據配置文件將字符集集修改為utf8mb4,該字符集支持emoji特殊字符。
二、安裝Mysql5.7
-
在安裝目錄下新建並按照規划編輯docker-compose.yml文件,編輯完后保存退出
vim docker-compose.yml
version: '3' services: mysql: image: mysql:5.7 container_name: mysql-5.7 #使用該參數,container內的root擁有真正的root權限,否則,container內的root只是外部的一個普通用戶權限 #設置為true,不然數據卷可能掛載不了,啟動不起 privileged: true restart: always ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_USER: root MYSQL_PASS: root TZ: Asia/Shanghai command: --wait_timeout=31536000 --interactive_timeout=31536000 --max_connections=1000 --default-authentication-plugin=mysql_native_password volumes: #映射mysql的數據目錄到宿主機,保存數據 - "/home/work/docker-mysql-5.7/data:/var/lib/mysql" #根據宿主機下的配置文件創建容器 - "/home/work/docker-mysql-5.7/config/my.cnf:/etc/mysql/my.cnf"
根據需要root用戶密碼可自行決定;連接時間、最大連接數可根據需要進行修改;
--default-authentication-plugin=mysql_native_password主要解決遠程訪問問題。若MySQL為8.0版本,請修改為--default-authentication-plugin=caching_sha2_password
-
在安裝目錄下創建config目錄,並編寫my.cnf配置文件
[client] # 客戶端來源數據的默認字符集 default-character-set=utf8mb4 [mysqld] # 服務端默認字符集 character-set-server=utf8mb4 # 連接層默認字符集 collation-server=utf8mb4_unicode_ci [mysql] # 數據庫默認字符集 default-character-set=utf8mb4
-
在安裝目錄下執行相關命令,啟動容器
docker-compose up -d
查看並進入容器當中,登錄mysql,查看字符集是否修改:
[root@node03 docker-mysql-5.7]# docker-compose ps Name Command State Ports -------------------------------------------------------------------------------------- mysql-5.7 docker-entrypoint.sh --wai ... Up 0.0.0.0:3306->3306/tcp, 33060/tcp [root@node03 docker-mysql-5.7]# docker-compose exec mysql bash root@72f9ad3a4f36:/# mysql -uroot -proot mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 35 Server version: 5.7.31 MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show variables like '%character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.01 sec) mysql>