使用docker安装myql 8.0

一、前置条件

确保 Linux 系统已安装 Docker:

bash 复制代码
# 检查Docker是否安装
docker -v

# 若未安装,执行以下命令安装Docker(以CentOS/Ubuntu通用脚本为例)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 启动Docker并设置开机自启
systemctl start docker
systemctl enable docker

二、Docker 安装 MySQL 8 完整步骤

1. 拉取 MySQL 8 镜像(推荐指定具体版本,避免最新版兼容问题)
bash 复制代码
# 拉取MySQL 8.0.36(稳定版),也可直接用mysql:8
docker pull mysql:8.0.36

若拉取速度慢,可使用阿里云镜像加速

2. 创建数据挂载目录(避免容器删除后数据丢失)
bash 复制代码
# 创建目录并设置权限(重要,避免权限不足)
mkdir -p /usr/local/mysql/{data,conf,logs}
chmod -R 777 /usr/local/mysql

在同一个目录下创建多个同级文件夹,可使用花括号将这些同级文件夹括起来。

3. 创建 MySQL 配置文件(自定义配置,可选但推荐)
bash 复制代码
# 编辑配置文件
vim /usr/local/mysql/conf/my.cnf

粘贴以下基础配置(适配 MySQL 8,解决中文乱码、时区等问题):

bash 复制代码
[mysqld]
# 基础配置
default-authentication-plugin=mysql_native_password  # 兼容旧客户端
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time_zone = '+8:00'  # 中国时区
lower_case_table_names=1  # 表名不区分大小写(Windows兼容)

# 性能配置(基础版)
max_connections=1000
innodb_buffer_pool_size=256M
skip-name-resolve  # 跳过域名解析,提升连接速度

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

mysql默认端口号为3306,如果要指定3306以外的端口号,需在[mysqld]里指定端口:

bash 复制代码
port=3309

否则直接在启动命令里指定将不生效,远程连接不上mysql

  1. 启动 MySQL 容器(核心命令)
bash 复制代码
docker run -d \
  --name mysql8 \
  --restart=always \
  -p 3306:3306 \
  -v /usr/local/mysql/data:/var/lib/mysql \
  -v /usr/local/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
  -v /usr/local/mysql/logs:/var/log/mysql \
  -e MYSQL_ROOT_PASSWORD=你的密码 \
  -e MYSQL_ROOT_HOST=% \
  mysql:8.0.36

将上面你的密码替换为要设置的密码。

参数说明

  • -d:后台运行容器;
  • --name mysql8:容器命名为 mysql8,方便管理;
  • --restart=always:开机自启;
  • -p 3306:3306:端口映射(主机 3306→容器 3306);
  • -v:目录挂载(数据 / 配置 / 日志持久化);
  • MYSQL_ROOT_PASSWORD:设置 root 用户密码(必须改!);
  • MYSQL_ROOT_HOST=%:允许 root 从任意主机连接(生产环境建议指定 IP)。
5. 验证安装是否成功
bash 复制代码
# 查看容器状态(运行中则显示Up)
docker ps | grep mysql8

# 进入MySQL容器
docker exec -it mysql8 mysql -uroot -p

# 输入密码后,执行版本查询(验证版本)
SELECT VERSION();
# 输出类似 8.0.36 即为成功

# 验证远程连接权限
use mysql;
select host, user from user where user='root';
# 若host为%,说明允许远程连接

三、常用运维命令

bash 复制代码
# 启动/停止/重启容器
docker start mysql8
docker stop mysql8
docker restart mysql8

# 查看容器日志(排错用)
docker logs -f mysql8

# 导出/导入数据(示例)
# 导出
docker exec mysql8 mysqldump -uroot -p密码 数据库名 > /tmp/备份.sql
# 导入
docker exec -i mysql8 mysql -uroot -p密码 数据库名 < /tmp/备份.sql

# 删除容器(谨慎!数据已挂载到主机,删除容器不丢数据)
docker rm -f mysql8
相关推荐
开开心心就好3 小时前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节
火车叼位4 小时前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
迎仔4 小时前
06-存储设备运维进阶:算力中心的存储管家
运维
?re?ta?rd?ed?4 小时前
linux中的调度策略
linux·运维·服务器
全栈工程师修炼指南4 小时前
Nginx | stream content 阶段:TCP 协议四层反向代理浅析与实践
运维·网络·网络协议·tcp/ip·nginx
hweiyu004 小时前
Linux 命令:tr
linux·运维·服务器
Trouvaille ~4 小时前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议
allway25 小时前
基于华为taishan200服务器、arm架构kunpeng920 cpu的虚拟化实战
linux·运维·服务器
CSCN新手听安5 小时前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll
熊文豪5 小时前
服务器炸了才知道?Ward+cpolar让异常无处藏
运维·服务器·cpolar