MySQL 8 部署总览(小白须知)
两种部署方式说明:
Docker Compose:适合开发、测试、快速起服,数据持久化用 volume。更易移植与回滚。官方镜像
mysql:8.0
。(Docker Hub)宿主机/原生安装:适合生产或不使用容器时。不同 Linux 发行版安装方式略有差异(Ubuntu/Debian 与 RHEL/CentOS/Fedora)。如需最新版或企业特性,建议使用 MySQL 官方仓库(YUM / APT)。(MySQL开发者专区)
事前准备(两种方式共有)
有一台 Linux 主机(或 Windows + WSL);如果要用 Docker 方案,请事先安装 Docker 与 docker-compose(或 Docker Compose V2)。
对基本 shell 命令(
cd
/ls
/sudo
)有一点了解会更顺利。
一、使用 Docker Compose 部署 MySQL 8(推荐快速上手)
适合:想在本地或服务器上快速运行 MySQL,用容器隔离,便于迁移/清理。
1.1 准备(确认 Docker 与 docker-compose)
# 检查 Docker
docker --version
# 检查 docker compose(或 docker-compose)
docker compose version # (或者 docker-compose --version)
如果未安装,请先安装 Docker(官方文档),这里不赘述安装步骤。
1.2 在项目目录创建 docker-compose.yml
在你想放项目的目录(例如 ~/mysql-docker
)下创建 docker-compose.yml
,内容示例(复制粘贴并修改密码):
version: "3.8"
services:
db:
image: mysql:8.0
container_name: mysql8
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ChangeMeRootPwd123! # 必改:root 密码
MYSQL_DATABASE: demo_db # 可选:启动时创建的数据库
MYSQL_USER: demo_user # 可选:创建的普通用户
MYSQL_PASSWORD: DemoUserPwd! # 可选:普通用户密码
volumes:
- mysql8-data:/var/lib/mysql # 数据持久化
- ./initdb:/docker-entrypoint-initdb.d # 可选:初始化脚本(SQL/.sh)
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
interval: 10s
timeout: 5s
retries: 5
volumes:
mysql8-data:
说明:
image: mysql:8.0
:使用官方 MySQL 8 镜像。(Docker Hub)MYSQL_ROOT_PASSWORD
:必须设置(或通过其他方式注入),否则容器不会健康启动。volumes
:把数据库数据放在 Docker volume(mysql8-data
),避免容器删除后数据丢失。若用主机目录挂载(./mysql-data:/var/lib/mysql
),注意权限与 SELinux(后面会提到)。docker-entrypoint-initdb.d
:在首次初始化时,会自动执行该目录下的.sql
/.sh
脚本(用于建库、导入初始数据)。(Docker Hub)
1.3 启动容器
# 在 docker-compose.yml 所在目录
docker compose up -d
# 或老版:
# docker-compose up -d
查看状态:
docker ps
docker compose logs -f db
1.4 进入容器并连接 MySQL
docker exec -it mysql8 bash
# 然后在容器内:
mysql -u root -p
# 或直接从宿主机用 mysql 客户端:
mysql -h 127.0.0.1 -P 3306 -u root -p
1.5 初始安全配置(推荐)
容器中同样可以运行 mysql_secure_installation
:
docker exec -it mysql8 mysql_secure_installation
mysql_secure_installation
会引导你:
设置或修改 root 密码(容器中通常已通过环境变量设好)
移除匿名用户
禁止 root 远程登录(按需)
删除测试数据库并刷新权限表等。(MySQL开发者专区)
注意:若你使用的是 GUI 客户端或老版本驱动连接 MySQL 8 时遇到认证问题,可能是因为 MySQL 8 默认使用
caching_sha2_password
作为认证插件;部分旧客户端不支持,需使用兼容的客户端(MySQL 8 客户端)或在创建用户时指定IDENTIFIED WITH mysql_native_password
。如果不确定,建议先使用 mysql 8 客户端或按需指定认证方式。(MySQL开发者专区)
1.6 数据备份与恢复(常用)
备份(导出):
# 将所有数据库导出到宿主机文件 all.sql
docker exec mysql8 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > all.sql
# 或单库导出
docker exec -i mysql8 mysqldump -uroot -p'你的root密码' your_db > your_db.sql
恢复(导入):
docker exec -i mysql8 mysql -uroot -p'你的root密码' < all.sql
如果你把 /var/lib/mysql
挂到宿主目录,要注意权限(可能需要 chown
)或直接使用 Docker named volume 避免权限问题。
1.7 常见问题与解决
容器启动但无法连接:看
docker compose logs db
,检查是否因权限或数据目录损坏导致初始化失败;尝试删除 volume 重新初始化(注意:会丢数据)。认证插件错误(客户端报 caching_sha2_password 相关):使用 MySQL 8 兼容的客户端,或创建用户时指定
IDENTIFIED WITH mysql_native_password BY 'pwd'
(不推荐长期使用,安全性低)。(MySQL开发者专区)SELinux 报错(在 CentOS/RedHat):挂载主机目录时需要加
:Z
或配置 SELinux 策略,例如- ./mysql-data:/var/lib/mysql:Z
,或使用 Docker volume。
二、宿主机(原生)安装 MySQL 8(适用于想把 MySQL 安装在机器上而非容器)
注意:不同发行版细节不同。下面按 Ubuntu/Debian 与 RHEL/CentOS/Fedora 分别给出常用步骤与注意点。
2.1 Ubuntu / Debian(快速安装)
推荐:如果只想快速安装并不追求最新版,可以直接用系统仓库;若需要官方最新 MySQL 8.x,请使用 MySQL APT 仓库(官方文档)。(Ubuntu 文档)
# 更新系统包索引
sudo apt update
# 安装 MySQL Server
sudo apt install -y mysql-server
# 启动并设置开机启动(通常安装时已自动启用)
sudo systemctl start mysql
sudo systemctl enable mysql
# 查看状态
sudo systemctl status mysql
随后运行安全脚本:
sudo mysql_secure_installation
按提示完成(移除匿名用户、删除 test 数据库、设定 root 密码等)。(MySQL开发者专区)
登录验证:
sudo mysql -u root -p
创建用户与数据库示例:
CREATE DATABASE demo_db;
CREATE USER 'demo_user'@'%' IDENTIFIED BY 'StrongPwd123!';
GRANT ALL PRIVILEGES ON demo_db.* TO 'demo_user'@'%';
FLUSH PRIVILEGES;
要允许远程连接(慎用):
编辑配置文件(不同系统路径可能略有差异,常见为
/etc/mysql/mysql.conf.d/mysqld.cnf
或/etc/mysql/my.cnf
),把bind-address = 127.0.0.1
改为0.0.0.0
(或注释掉)。重启 MySQL:
sudo systemctl restart mysql
调整防火墙:
sudo ufw allow 3306/tcp
(或用iptables
/firewalld
)。
若想使用 MySQL 官方 APT 仓库来获取官方包(更可控的版本管理),请参考 MySQL 官方 APT 仓库说明。(MySQL开发者专区)
2.2 RHEL / CentOS / Fedora(快速安装)
在 RHEL/CentOS 上,推荐使用 MySQL 官方 Yum 仓库以获取官方 MySQL 8 包;某些发行版自带的是 MariaDB 或老版本 MySQL,需要手动启用官方仓库。官方安装说明在这里。(MySQL开发者专区)
示例(RHEL/CentOS 8+ / Fedora):
# 以 root 或 sudo 执行
# 1)(可选)安装 MySQL 官方 yum repo RPM(请以 dev.mysql.com 的最新文件为准)
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el8-3.noarch.rpm
# 2) 安装 mysql-server
sudo dnf install -y mysql-server
# 3) 启动并设置开机启动
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 4) 运行安全脚本
sudo mysql_secure_installation
查看状态:
sudo systemctl status mysqld
如果系统提供 mysqld
初始临时密码(某些 RPM 会在 /var/log/mysqld.log
写临时密码),按日志提示拿到临时密码后再运行 mysql_secure_installation
修改密码。详见 MySQL 官方 Yum 仓库安装文档。(MySQL开发者专区)
防火墙(firewalld)打开端口:
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
SELinux 注意:如果你改变了 MySQL 监听端口或数据目录,需相应设置 SELinux 策略(semanage
/ chcon
等),生产环境请参照 RHEL 文档或运维手册。(红帽文档)
三、关于 MySQL 8 的重要兼容性/安全提示(小白容易踩坑的点)
默认认证插件:MySQL 8(自 8.0.x 起)默认使用
caching_sha2_password
,这是更安全的认证方式,但某些旧客户端可能不支持它(例如老版本的 PHP mysql 客户端、旧 GUI 工具)。若遇到连接问题,可:升级客户端驱动(推荐)或
在创建用户时显式指定兼容插件(不推荐长期使用),例如:
CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
官方文档说明了
caching_sha2_password
的细节。(MySQL开发者专区)root 远程登录:默认建议禁止 root 远程登录,仅用普通用户并赋予必要权限。
mysql_secure_installation
会提示你是否禁止远程 root 登录。(MySQL开发者专区)备份策略:生产环境至少要有定期 mysqldump 或 xtrabackup(innoDB 热备)策略,并将备份文件放到异地或对象存储。
日志与监控:启用慢查询日志(
slow_query_log
),并配合pt-query-digest
/MySQL Enterprise Monitor
/Prometheus
等工具监控。
四、常见命令速查(粘贴即用)
启动/停止服务(宿主机):
sudo systemctl start mysqld # 或 mysql
sudo systemctl stop mysqld
sudo systemctl restart mysqld
sudo systemctl status mysqld
登录 MySQL:
mysql -u root -p
创建用户/数据库:
CREATE DATABASE mydb;
CREATE USER 'app'@'%' IDENTIFIED BY 'S3cure!';
GRANT ALL PRIVILEGES ON mydb.* TO 'app'@'%';
FLUSH PRIVILEGES;
导出/导入:
mysqldump -u root -p mydb > mydb.sql
mysql -u root -p mydb < mydb.sql
Docker 中备份:
docker exec -i mysql8 mysqldump -uroot -p'rootpwd' mydb > mydb.sql
docker exec -i mysql8 mysql -uroot -p'rootpwd' < mydb.sql
五、推荐阅读与官方文档(关键来源)
官方 Docker 镜像(mysql:8.0)说明(环境变量、初始化机制等)。(Docker Hub)
Ubuntu 官方安装向导(apt 安装示例)。(Ubuntu 文档)
MySQL 官方 Yum 仓库 & 安装文档(RHEL/CentOS 安装指引)。(MySQL开发者专区)
MySQL 安全脚本与建议(
mysql_secure_installation
)。(MySQL开发者专区)MySQL 8 的默认认证插件
caching_sha2_password
说明(兼容性注意)。(MySQL开发者专区)
六、小结与建议(给小白的实用建议)
只想快速搞一个本地数据库做开发或测试:用 Docker Compose,把
docker-compose.yml
放到项目里,写好MYSQL_ROOT_PASSWORD
和volumes
,docker compose up -d
即可。使用 named volume 避免权限坑。生产或长期部署:考虑用宿主机安装(或容器化 + 额外运维),并配置定期备份、监控、网络安全策略(防火墙、限制 root 远程、使用专用用户)。
客户端兼容性:若使用较旧的管理工具(如某些 GUI),遇到连接失败,优先升级工具或驱动,而不是长期降级认证插件。(MySQL开发者专区)
如果你愿意,我可以:
根据你当前系统(例如 Ubuntu 22.04 / CentOS 8 / Debian 12 / macOS)给出一步步逐命令操作的脚本;或者
帮你把 docker-compose.yml 按你的项目需求定制(例如挂载位置、初始化 SQL、时区设置、字符集设置等);或者
给出一份最小化、生产可用的
my.cnf
推荐配置样本。
你想要哪一个?(直接告诉我系统或目标,我会把可复制的命令/文件直接给你。)
默认评论
Halo系统提供的评论