Docker中安装MySQL--------【详细图解】
1.根据所需拉取镜像---------不指定版本会下载最新版
docker pull mysql:8.0.27
2.查看所拉取的镜像
docker images
3.在/usr/local下创建docker、mysql目录
cd /usr/local
mkdir docker
mkdir mysql
4.进入mysql文件夹
cd mysql
5.创建config文件夹
mkdir config
6.编写配置文件
vim my.cnf
[client]
# 端口号
port=3306
[mysql]
no-beep
default-character-set=utf8mb4
[mysqld]
# 端口号
port=3306
# 数据目录
datadir=/var/lib/mysql
# 新模式或表时将使用的默认字符集
character-set-server=utf8mb4
# 默认存储引擎
default-storage-engine=INNODB
# 将 SQL 模式设置为严格
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# 最大连接数
max_connections=1024
# 表缓存
table_open_cache=2000
# 表内存
tmp_table_size=16M
# 线程缓存
thread_cache_size=10
# 设置大小写不敏感
lower_case_table_names=1
# myisam设置
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=8M
key_buffer_size=8M
read_buffer_size=0
read_rnd_buffer_size=0
# innodb设置
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=8M
innodb_log_file_size=48M
innodb_thread_concurrency=33
innodb_autoextend_increment=64
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
# 其他设置
back_log=80
flush_time=0
join_buffer_size=256K
max_allowed_packet=4M
max_connect_errors=100
open_files_limit=4161
sort_buffer_size=256K
table_definition_cache=1400
binlog_row_event_max_size=8K
sync_master_info=10000
sync_relay_log=10000
sync_relay_log_info=10000
7.编写脚本
cd /usr/local/docker/mysql/
vim startMysql.sh
docker run \
--name mysql \
-d \
-p 3306:3306 \
--restart unless-stopped \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0.27
注意版本号和密码的修改
8.赋予权限
chmod -R 777 startMysql.sh
9.启动脚本
./startMysql.sh
10.我的MySQL 容器 (mysql:8.0.27
) 处于 不断重启 (Restarting) 状态,这表明 MySQL 容器启动失败,通常是由于配置错误、权限问题或数据冲突导致的。
接下来开始问题排查!!!!!
11.查看日志
docker logs mysql
问题原因
MySQL 8.0+ 容器默认需要访问 /var/lib/mysql-files
目录(用于 secure-file-priv
功能),但该目录在容器内不存在或权限不足。
解决方案
挂载 mysql-files
目录
# 1. 在宿主机创建目录并设置权限
mkdir -p /usr/local/docker/mysql/mysql-files
chown -R 999:999 /usr/local/docker/mysql/mysql-files # MySQL容器用户UID=999# 2. 重新运行容器时挂载该目录
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \ # 新增挂载
mysql:8.0.27
①清理旧容器
docker rm -f mysql
②创建必要的目录
mkdir -p /usr/local/docker/mysql/{data,mysql-files}
chown -R 999:999 /usr/local/docker/mysql/*
③修改脚本
vim startMysql.sh
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \ # 替换为你的密码
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
mysql:8.0.27
④重新启动脚本
./startMysql.sh
⑤再次查看日志-------不报错了
⑥再次查看容器------启动成功
⑦确认Mysql容器的启动密码
# 查看容器启动时使用的环境变量
docker inspect mysql | grep MYSQL_ROOT_PASSWORD