安装是使用 MySQL 的第一步。根据不同的操作系统和部署场景,安装方式也会有所不同。本节会覆盖 Linux、Windows 和 Docker 三种最常见的部署方式,以 MySQL 8.0 为主线,同时指出与 5.7 的关键差异,目标是让你在任何环境下都能 30 分钟内跑起一个可用的 MySQL 实例。
2.1.1 安装前的考量
在动手之前,有几个选择值得先明确:
- 版本选择:新项目直接用 MySQL 8.0,它的性能、安全性和 SQL 能力相比 5.7 有显著提升(如窗口函数、CTE、原子 DDL、直方图等)。如果接手的是老项目且依赖 5.7 若干行为(如默认 utf8mb3 字符集),则保留 5.7,但应规划升级。注意,8.0 将默认身份认证插件改为
caching_sha2_password,部分老旧的客户端或驱动(如 5.X 版本的 Navicat、老版 JDBC 驱动)可能无法直接连接,需要配置或降级为mysql_native_password。 - 部署环境:开发测试环境优先用 Docker,启动快、隔离好、随时可销毁重建;生产环境建议用物理机或云主机原生安装,配合精细化调优;本地开发可用 Windows 或 macOS 原生服务,也可用 Docker。
- 硬件要求:MySQL 本身对资源要求不高,256MB 内存即可运行,但生产环境建议至少 2 核 4GB 以上,且规划好
innodb_buffer_pool_size的内存空间。
2.1.2 Linux 环境安装(以 CentOS 8 / Ubuntu 20.04 为例)
Linux 是生产环境的主流选择。因为各发行版默认仓库中的 MySQL 往往版本较旧,所以我们使用 MySQL 官方维护的 YUM / APT 仓库,获取最新的版本和补丁。
CentOS / RHEL 系列
- 添加 MySQL 官方 YUM 仓库
从 MySQL 官方仓库页面 下载对应的 rpm 包,或者直接执行:
wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
sudo rpm -ivh mysql80-community-release-el8-1.noarch.rpm
> 如果想安装 5.7,可以先 yum repolist all | grep mysql 查看仓库,然后 sudo yum-config-manager --disable mysql80-community 和 --enable mysql57-community,再安装。
- 安装 MySQL Server
sudo yum install mysql-community-server -y
安装过程中会自动创建 mysql 用户和组。
- 启动服务并获取初始密码
sudo systemctl start mysqld
sudo systemctl enable mysqld # 设置开机自启
MySQL 8.0 安装后会生成一个临时密码,存放在日志文件中:
sudo grep 'temporary password' /var/log/mysqld.log
记下这个密码,接下来要用。
- 安全初始化
运行安全配置脚本,按照提示修改 root 密码、移除匿名用户、禁止 root 远程登录等:
sudo mysql_secure_installation
输入上面查到的临时密码,然后设置新的 root 密码。密码策略默认要求大小写字母、数字和特殊字符,长度至少 8 位。如果仅是本地开发环境,可以在后续自行降低策略。
- 开放远程访问(可选)
需要远程连接时,先登录 MySQL:
mysql -u root -p
然后执行授权(注意,这会将 root 开放给所有主机,生产环境不建议,应创建专用用户并限制 IP):
USE mysql;
UPDATE user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;
同时确保防火墙开放 3306 端口(或你自定义的端口):
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
Ubuntu / Debian 系列
- 添加 MySQL 官方 APT 仓库
下载并安装 repository 配置包:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb
在出现的图形界面中选择 MySQL 8.0(或 5.7),然后 OK 退出。
- 更新包索引并安装
sudo apt update
sudo apt install mysql-server -y
- 启动与获取临时密码
sudo systemctl start mysql
sudo systemctl enable mysql
临时密码可能直接在安装过程弹出的界面中显示,也可以查看日志:
sudo grep 'temporary password' /var/log/mysql/error.log
- 安全初始化
sudo mysql_secure_installation
操作与 CentOS 完全一致。
安装后核心配置文件位置:/etc/my.cnf(CentOS)或 /etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu)。建议顺手调整一下字符集和默认存储引擎:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-storage-engine=INNODB
调整认证插件(可选)
如果遇到客户端连接报错 Authentication plugin 'caching_sha2_password' cannot be loaded,可以在 MySQL 中将相应用户的插件改回旧版:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourPassword';
2.1.3 Windows 环境安装
Windows 下安装主要用于本地开发和调试。
- 访问 MySQL 官方下载页面,选择 Windows 平台,下载 MSI 安装包。推荐选择完整安装包(通常
mysql-installer-community-8.0.x.x.msi)。 - 双击运行安装程序,选择 Developer Default 或 Server only。
- 在安装过程中,安装向导会提示你配置:
- 端口(默认 3306)
- 认证插件(建议选择
Use Strong Password Encryption for Authentication (RECOMMENDED),即caching_sha2_password;如果使用老旧的工具,可选中下方的 Legacy 选项) - 设置 root 密码
- 配置 Windows 服务名(默认
MySQL80),并建议将MySQL Server的 bin 目录添加到系统 PATH 中。
- 完成安装后,MySQL 会作为 Windows 服务自动启动。你可以通过
services.msc管理,或使用命令行net stop MySQL80和net start MySQL80。 - 环境变量:若安装时未自动添加 PATH,可手动将
C:\Program Files\MySQL\MySQL Server 8.0\bin加入系统变量 PATH,之后即可在 CMD 或 PowerShell 中直接使用mysql -u root -p。
Windows 下配置文件默认路径为 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini,修改后需重启服务生效。
2.1.4 Docker 容器化部署
Docker 方式非常适合本地开发、测试环境和快速体验,几分钟内就能拉起一个干净的 MySQL 实例。
基础启动命令
执行以下命令即可启动一个 8.0 版本的 MySQL 容器,并设置 root 密码为 root:
docker run -d \
--name mysql-test \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0
-d后台运行--name mysql-test容器名称-p 3306:3306将容器 3306 端口映射到宿主机 3306-e MYSQL_ROOT_PASSWORD=root设置环境变量,指定 root 密码
连接容器内的 MySQL:
docker exec -it mysql-test mysql -u root -p
生产可用的 docker-compose 配置
生产或需要持久化数据的场景,必须挂载数据卷和配置文件。创建一个 docker-compose.yml:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql-prod
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: Str0ngPassw0rd
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: mypass
volumes:
- ./mysql/data:/var/lib/mysql # 数据持久化
- ./mysql/conf:/etc/mysql/conf.d # 自定义配置
- ./mysql/init:/docker-entrypoint-initdb.d # 初始化脚本
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-authentication-plugin=mysql_native_password # 兼容旧客户端
主要说明:
- 数据卷
./mysql/data确保容器销毁后数据不丢。 ./mysql/conf中可以放置.cnf文件,例如my-custom.cnf,里面可以写缓冲池大小等参数。./mysql/init放入.sql或.sh脚本,容器初次启动时会自动执行,用于建表或导入数据。--default-authentication-plugin可根据需要选择。
启动:
docker-compose up -d
进入容器:
docker exec -it mysql-prod mysql -u root -p
版本切换
只需修改 image: mysql:5.7 即可使用 5.7 版本,注意 5.7 环境变量 MYSQL_ROOT_PASSWORD 等同样有效。
2.1.5 安装后的验证与初步调优建议
无论哪种方式安装完成,建议立即做个快速验证:
mysql -u root -p
进入 MySQL 后执行:
SELECT VERSION();
SHOW DATABASES;
STATUS;
确认版本号和字符集等信息。
接下来可以根据物理内存情况,简单设置一下 innodb_buffer_pool_size。以 8GB 内存的服务器为例,你可以在配置文件里加入:
[mysqld]
innodb_buffer_pool_size=4G
Docker 容器可通过启动参数 --innodb-buffer-pool-size=4G 或者自定义配置文件来设置。
通过这些步骤,你应该已经拥有了一个可连接、可持久化、可自定义的 MySQL 实例。后面的章节我们会进一步优化参数、创建表结构并执行查询,但一切的起点都是一次成功的安装。