当前位置: 首页 > news >正文

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

⑧启动Mysql容器

⑨测试连接-------可连接成功~

相关文章:

  • Vue2函数式组件实战:手写可调用的动态组件,适用于toast轻提示、tip提示、dialog弹窗等
  • 掌握AI营销:移动营销的新动力
  • c++:哈希表
  • GPT-4o推出的原生图像生成功能升级后有点东西!
  • 世界通信大会、嵌入式展及慕尼黑上海光博会亮点回顾
  • 手绘风格流程图工具:简单高效的在线流程图绘制工具
  • C语言复习笔记--指针(1)
  • echarts+HTML 绘制3d地图,加载散点+散点点击事件
  • 2025年SCI1区(TAC) ——语义和情感双重通道用于文本对话情感识别
  • 基于vue框架的智能服务旅游管理系统54kd3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Python学习第二十八天
  • 游戏引擎学习第195天
  • 8.集成模板引擎
  • 【1-1】ICT=IT+CT
  • MySQL GROUP BY分组获取非聚合列值方法
  • [Android汉化] DuckStation of Android:安卓端 Playstation 模拟器(PSX / PSOne)汉化版
  • Open GL ES ->纹理贴图,顶点坐标和纹理坐标组合到同一个顶点缓冲对象中进行解析
  • 视频推拉流EasyDSS互联网直播点播平台技术特点及应用场景剖析
  • C+++题
  • 解锁全方位健康生活,构筑身心防护网
  • 上海浪琴环球马术冠军赛明日启幕!五一假期在这里感受精彩
  • 看纪录片抵学分,贺桂梅:纪录片是对抗低质碎片信息的好媒介
  • 五大光伏龙头一季度亏损超80亿元,行业冬天难言结束
  • 国务院安委办、应急管理部进一步调度部署“五一”假期安全防范工作
  • 全国人民代表大会常务委员会公告〔十四届〕第十号
  • 欢迎回家!神十九返回舱成功着陆