一、前置条件
确保 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
- 启动 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