拉取對應版本鏡像
docker pull mysql:5.7.29
mysql:5.7.29容器中目錄結構
|-- conf.d
| |-- docker.cnf
| |-- mysql.cnf
| |-- mysqldump.cnf
|-- my.cnf -> /etc/alternatives/my.cnf
|-- my.cnf.fallback
|-- mysql.cnf
|-- mysql.conf.d
|-- mysqld.cnf
注意:不要映射:
/etc/mysql/my.cnf
,該文件是個軟連。即使映射成功配置文件是不會生效的。
編寫腳本
├─mysql5.7
│ ├─conf
│ │ └─mysql.conf.d
│ │ mysqld.cnf
│ └─scripts
│ run.sh
文件:mysqld.cnf
[mysql]
default-character-set=utf8
[mysqld]
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
# 錯誤日志
log-error=/var/log/mysql/error.log
# 默認存儲引擎
default-storage-engine=InnoDB
# 服務器ID
server-id=1
# 開啟BIN LOG日志
log-bin=mysql-bin
# 設置SQL模式
sql_mode="IGNORE_SPACE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# 服務器默認字符集
character_set_server=utf8
# 默認字符集
collation_server = utf8_general_ci
注意:
character_set_database
和collation_database
這兩個參數在MySQL5.7版本中已經棄用不再使用
官網文檔:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
文件:run.sh
#!/usr/bin/env bash
# 設置MySQL端口
mysql_port=$1
if [ ! "$mysql_port" ]; then
mysql_port=3306
fi
# 腳本當前目錄
scrpts_path=$(cd $(dirname "$0") || exit; pwd)
# MySQL根目錄
dirpath=$(dirname "$scrpts_path")
# 創建MySQL數據存儲目錄
mkdir -p "$dirpath"/data
# 啟動MySQL服務
docker rm mysql_"$mysql_port" -f
docker run -d -p "$mysql_port":3306 --name mysql_"$mysql_port" \
-v="$dirpath"/conf/mysql.conf.d/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v="$dirpath"/data:/usr/local/mysql/data/ \
-v="$dirpath"/data:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123 \
mysql:5.7.29
說明
- 修改容器中的配置文件
- 修改mysql數據目錄
- 設置mysql初始密碼
啟動MySQL服務
sh scripts/run.sh
執行:docker ps 查看服務是否啟動成功
注意:data 目錄不要隨便刪除
注意:該鏡像自動創建遠程賬號:root 密碼就是初始密碼
進入MySQL服務容器內
docker exec -it mysql bash
連接MySQL
mysql -uroot -p
# 初始密碼:123
修改密碼
按需操作
# 修改本地連接賬號-置空
alter user 'root'@'localhost' identified by '';
# 修改遠程賬號密碼-置空
alter user 'root'@'%' identified by '';
注意:此時連接mysql服務器root密碼不再是初始密碼,而是剛才設定的密碼
---------------至此部署完畢---------------