IWA
2025-09-22
点 赞
0
热 度
6
评 论
0

MySQL 8 部署教程(含docker方案)小白也适用

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/DebianRHEL/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;

要允许远程连接(慎用):

  1. 编辑配置文件(不同系统路径可能略有差异,常见为 /etc/mysql/mysql.conf.d/mysqld.cnf/etc/mysql/my.cnf),把 bind-address = 127.0.0.1 改为 0.0.0.0(或注释掉)。

  2. 重启 MySQL:sudo systemctl restart mysql

  3. 调整防火墙: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 的重要兼容性/安全提示(小白容易踩坑的点)

  1. 默认认证插件: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开发者专区)

  2. root 远程登录:默认建议禁止 root 远程登录,仅用普通用户并赋予必要权限。mysql_secure_installation 会提示你是否禁止远程 root 登录。(MySQL开发者专区)

  3. 备份策略:生产环境至少要有定期 mysqldump 或 xtrabackup(innoDB 热备)策略,并将备份文件放到异地或对象存储。

  4. 日志与监控:启用慢查询日志(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_PASSWORDvolumesdocker compose up -d 即可。使用 named volume 避免权限坑。

  • 生产或长期部署:考虑用宿主机安装(或容器化 + 额外运维),并配置定期备份、监控、网络安全策略(防火墙、限制 root 远程、使用专用用户)。

  • 客户端兼容性:若使用较旧的管理工具(如某些 GUI),遇到连接失败,优先升级工具或驱动,而不是长期降级认证插件。(MySQL开发者专区)


如果你愿意,我可以:

  • 根据你当前系统(例如 Ubuntu 22.04 / CentOS 8 / Debian 12 / macOS)给出一步步逐命令操作的脚本;或者

  • 帮你把 docker-compose.yml 按你的项目需求定制(例如挂载位置、初始化 SQL、时区设置、字符集设置等);或者

  • 给出一份最小化、生产可用my.cnf 推荐配置样本。

你想要哪一个?(直接告诉我系统或目标,我会把可复制的命令/文件直接给你。)


用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

IWA

estp 企业家

具有版权性

请您在转载、复制时注明本文 作者、链接及内容来源信息。 若涉及转载第三方内容,还需一同注明。

具有时效性

文章目录

IWA的艺术编程,为您导航全站动态

22 文章数
9 分类数
10 评论数
25标签数
最近评论
IWA

IWA


👍

M丶Rock

M丶Rock


😂

M丶Rock

M丶Rock


感慨了

M丶Rock

M丶Rock


厉害了

M丶Rock

M丶Rock


6666666666666666666