未记录事实核验 · 状态:维护中
记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。
warning 适用边界与维护说明
本文可用于按实际平台选择MySQL安装方式,练习基础连接、用户权限设置及安装验证,不是可跨平台直接照抄的完整生产部署方案;本次仅作全文结构审阅,未作外部事实核验或命令实测。主体配置以MySQL 8.0为背景,未锁定版本的包管理器安装结果、认证方式及服务名须与实际环境匹配。源码流程仍缺Boost依赖配置、初始化后的启动及临时密码获取步骤,不能独立完成源码部署;密码恢复流程仍未停止手动启动的临时实例,不应按现有顺序直接重启系统服务。配置文件位置表已修正,数据、socket及日志目录仍须按实际安装与权限调整;TLS示例以已有证书为前提,不覆盖证书准备、私钥权限及客户端身份验证。Docker示例使用明文示例密码并映射对外端口,仅适合受控开发环境,Compose引用的本地配置文件和初始化目录需自行准备;调优数值及基准测试示例不构成性能保证。
🚀 MySQL安装配置完全指南 - 多平台部署与环境配置
abstract 📋 本节概览
- 🎯 学习目标:掌握MySQL在不同平台的安装和基础配置
- 📚 前置知识:MySQL介绍与特性 | 基础Linux命令
- ⏱️ 预计用时:60分钟
- 🔧 技术重点:多平台安装、配置文件、安全设置、Docker部署
🎯 安装方式选择指南
安装方式对比
| 安装方式 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| 官方二进制包 | 稳定、官方支持 | 版本更新较慢 | 生产环境 |
| 包管理器 | 安装简单、依赖自动解决 | 版本可能不是最新 | 开发环境 |
| 源码编译 | 可定制构建选项,性能取决于构建配置与实际负载 | 编译复杂、耗时长 | 有定制构建需求的场景 |
| Docker容器 | 环境隔离、部署快速 | 需要容器技术 | 开发测试 |
| 云服务 | 免运维、高可用 | 成本高、限制多 | 快速上线 |
🐧 Linux平台安装
CentOS/RHEL 8+ 安装
# 1. 下载MySQL官方YUM源
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
# 2. 查看可用的MySQL版本
sudo dnf repolist enabled | grep mysql
# 3. 安装MySQL服务器
sudo dnf install -y mysql-community-server
# 4. 启动MySQL服务
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 5. 获取临时root密码
sudo grep 'temporary password' /var/log/mysqld.log
# 6. 安全初始化配置
sudo mysql_secure_installation
Ubuntu/Debian 安装
# 1. 更新包索引
sudo apt update
# 2. 安装MySQL服务器
sudo apt install -y mysql-server
# 3. 启动并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
# 4. 安全配置
sudo mysql_secure_installation
# 5. 登录MySQL(Ubuntu默认使用auth_socket插件)
sudo mysql
-- 在MySQL中创建新用户并设置密码认证
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_password';
-- 或者创建新的管理员用户
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin_password';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
从源码编译安装
# 1. 安装编译依赖
# CentOS/RHEL
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y cmake openssl-devel ncurses-devel bison
# Ubuntu/Debian
sudo apt install -y build-essential cmake libssl-dev libncurses5-dev bison
# 2. 下载MySQL源码
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35.tar.gz
tar -xzf mysql-8.0.35.tar.gz
cd mysql-8.0.35
# 3. 编译配置
mkdir build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DENABLED_LOCAL_INFILE=1
# 4. 编译和安装(需要较长时间)
make -j$(nproc)
sudo make install
# 5. 创建MySQL用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
# 6. 设置权限和初始化
sudo chown -R mysql:mysql /usr/local/mysql
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql
# 7. 复制SysV启动脚本(不是systemd原生服务单元,需确认系统兼容性)
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo systemctl enable mysqld
🍎 macOS平台安装
使用Homebrew安装(推荐)
# 1. 安装Homebrew(如果没有)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 2. 安装MySQL
brew install mysql
# 3. 启动MySQL服务
brew services start mysql
# 4. 安全配置
mysql_secure_installation
# 5. 设置开机自启(可选)
brew services start mysql
使用官方DMG包安装
# 1. 下载并安装DMG包
# 访问:https://dev.mysql.com/downloads/mysql/
# 2. 添加MySQL到PATH(在 ~/.zshrc 或 ~/.bash_profile 中)
export PATH="/usr/local/mysql/bin:$PATH"
# 3. 启动MySQL服务
sudo /usr/local/mysql/support-files/mysql.server start
# 4. 设置root密码
sudo /usr/local/mysql/bin/mysql_secure_installation
🪟 Windows平台安装
使用MySQL Installer(推荐)
# 1. 下载MySQL Installer
# 访问:https://dev.mysql.com/downloads/installer/
# 2. 选择安装类型
# - Developer Default: 开发环境完整套件
# - Server only: 仅服务器
# - Client only: 仅客户端工具
# - Full: 完整安装
# - Custom: 自定义安装
# 3. 配置MySQL服务器
# - Config Type: Development Computer/Server Computer/Dedicated Computer
# - Connectivity: TCP/IP Port 3306
# - Authentication: Use Strong Password Encryption (推荐)
# 4. 设置root密码和创建用户账户
# 5. Windows服务配置
# - Service Name: MySQL80
# - Start at System Startup: 是
使用Chocolatey安装
# 1. 安装Chocolatey(如果没有)
Set-ExecutionPolicy Bypass -Scope Process -Force
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
# 2. 安装MySQL
choco install mysql
# 3. 启动MySQL服务
net start mysql80
# 4. 登录配置
mysql -u root -p
🐳 Docker部署(推荐用于开发)
单容器部署
# 1. 拉取MySQL 8.0镜像
docker pull mysql:8.0
# 2. 运行MySQL容器
docker run -d \
--name mysql-dev \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-e MYSQL_DATABASE=testdb \
-e MYSQL_USER=testuser \
-e MYSQL_PASSWORD=testpass \
-p 3306:3306 \
-v mysql-data:/var/lib/mysql \
mysql:8.0
# 3. 查看容器状态
docker ps
docker logs mysql-dev
# 4. 连接到MySQL
docker exec -it mysql-dev mysql -u root -p
# 5. 从宿主机连接
mysql -h localhost -P 3306 -u root -p
Docker Compose部署
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql-dev
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: appdb
MYSQL_USER: appuser
MYSQL_PASSWORD: apppassword
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./config/my.cnf:/etc/mysql/conf.d/my.cnf
- ./init:/docker-entrypoint-initdb.d
command: --default-authentication-plugin=mysql_native_password
phpmyadmin:
image: phpmyadmin:5.2
container_name: phpmyadmin-dev
restart: always
ports:
- "8080:80"
environment:
PMA_HOST: mysql
PMA_PORT: 3306
MYSQL_ROOT_PASSWORD: rootpassword
depends_on:
- mysql
volumes:
mysql_data:
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs mysql
# 停止服务
docker-compose down
# 停止并删除数据
docker-compose down -v
⚙️ 配置文件详解
配置文件位置
| 平台 | 配置文件路径 | 说明 |
|---|---|---|
| Linux | /etc/my.cnf 或 /etc/mysql/my.cnf |
常见系统级配置位置,以实际安装为准 |
| macOS | $(brew --prefix)/etc/my.cnf |
Homebrew安装;先运行 brew --prefix 获取实际安装前缀 |
| Windows | C:\ProgramData\MySQL\MySQL Server 8.0\my.ini |
默认位置 |
| Docker | 本文Compose示例挂载至容器内 /etc/mysql/conf.d/my.cnf |
主配置位置及附加配置目录以所用镜像为准 |
基础配置模板
[mysql]
# 客户端默认字符集
default-character-set = utf8mb4
[mysqld]
# 基础配置
port = 3306
bind-address = 0.0.0.0
server-id = 1
# 字符集配置
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
# 数据目录
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
# 日志配置
log-error = /var/log/mysql/error.log
slow-query-log = 1
slow-query-log-file = /var/log/mysql/slow.log
long_query_time = 2
# 二进制日志(用于复制和备份)
log-bin = mysql-bin
binlog-format = ROW
expire-logs-days = 7
# InnoDB配置
innodb_buffer_pool_size = 1G # 设置为内存的60-80%
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
# 连接配置
max_connections = 200
max_connect_errors = 10000
wait_timeout = 3600
interactive_timeout = 3600
# 查询缓存(MySQL 5.7及之前版本)
# query_cache_type = 1
# query_cache_size = 32M
# 安全配置
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
[mysqld_safe]
log-error = /var/log/mysql/error.log
pid-file = /var/lib/mysql/mysqld.pid
性能优化配置
[mysqld]
# 内存相关配置(假设8GB内存服务器)
innodb_buffer_pool_size = 5G
innodb_buffer_pool_instances = 8
innodb_log_buffer_size = 64M
# I/O相关配置
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
# 线程相关配置
thread_cache_size = 50
table_open_cache = 4000
table_definition_cache = 2000
# 临时表配置
tmp_table_size = 64M
max_heap_table_size = 64M
# 排序配置
sort_buffer_size = 2M
read_buffer_size = 1M
read_rnd_buffer_size = 2M
join_buffer_size = 2M
# 网络配置
max_allowed_packet = 64M
🔐 安全配置
初始安全设置
# 运行安全配置脚本
mysql_secure_installation
# 配置选项说明:
# 1. 设置root密码强度验证插件
# - LOW: 长度>=8
# - MEDIUM: 长度>=8,包含数字、大小写字母、特殊字符
# - STRONG: 长度>=8,包含数字、大小写字母、特殊字符、字典文件
# 2. 设置root密码
# 3. 删除匿名用户 (选择 Yes)
# 4. 禁止root远程登录 (生产环境选择 Yes)
# 5. 删除test数据库 (选择 Yes)
# 6. 重新加载权限表 (选择 Yes)
用户权限管理
-- 创建数据库和用户
CREATE DATABASE production_db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
-- 创建应用用户(限制权限)
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'strong_password';
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'strong_password';
-- 授予应用权限(只授予必要权限)
GRANT SELECT, INSERT, UPDATE, DELETE ON production_db.* TO 'app_user'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON production_db.* TO 'app_user'@'192.168.1.%';
-- 创建只读用户
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'readonly_password';
GRANT SELECT ON production_db.* TO 'readonly_user'@'%';
-- 创建备份用户
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'backup_password';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup_user'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 查看用户权限
SHOW GRANTS FOR 'app_user'@'localhost';
SSL/TLS配置
-- 检查SSL状态
SHOW VARIABLES LIKE '%ssl%';
-- 查看SSL证书信息
SHOW STATUS LIKE 'ssl_cipher';
-- 要求用户使用SSL连接
ALTER USER 'app_user'@'192.168.1.%' REQUIRE SSL;
-- 验证SSL连接
\s -- 在mysql客户端中显示连接状态
[mysqld]
# SSL配置
ssl-ca = /etc/mysql/ssl/ca-cert.pem
ssl-cert = /etc/mysql/ssl/server-cert.pem
ssl-key = /etc/mysql/ssl/server-key.pem
# 要求使用安全传输;TCP连接须使用TLS,本地Unix socket等安全传输仍可使用
require_secure_transport = ON
🔧 常用管理命令
服务管理
# Linux systemd
sudo systemctl start mysqld # 启动
sudo systemctl stop mysqld # 停止
sudo systemctl restart mysqld # 重启
sudo systemctl status mysqld # 状态
sudo systemctl enable mysqld # 开机自启
# macOS
brew services start mysql # 启动
brew services stop mysql # 停止
brew services restart mysql # 重启
# Windows
net start mysql80 # 启动
net stop mysql80 # 停止
sc query mysql80 # 状态
# 手动启动(调试用)
mysqld_safe --user=mysql &
连接和基础操作
# 本地连接
mysql -u root -p
# 远程连接
mysql -h hostname -P 3306 -u username -p database_name
# 指定字符集连接
mysql -u root -p --default-character-set=utf8mb4
# 执行SQL文件
mysql -u root -p database_name < script.sql
# 备份数据库
mysqldump -u root -p database_name > backup.sql
# 导入数据库
mysql -u root -p database_name < backup.sql
🧪 安装验证
验证安装
-- 1. 检查MySQL版本
SELECT VERSION();
-- 2. 查看当前用户
SELECT USER();
-- 3. 查看数据库列表
SHOW DATABASES;
-- 4. 查看存储引擎
SHOW ENGINES;
-- 5. 查看字符集
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 6. 查看服务器状态
SHOW STATUS;
-- 7. 测试基本功能
CREATE DATABASE test_install;
USE test_install;
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO test_table (name) VALUES ('Test Data');
SELECT * FROM test_table;
DROP DATABASE test_install;
性能基准测试
# 测试并发插入性能
mysqlslap \
--user=root \
--password \
--host=localhost \
--concurrency=10 \
--iterations=100 \
--create-schema=test_bench \
--query="INSERT INTO t1 VALUES (NULL, 'test_data', NOW())" \
--create="CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY, data VARCHAR(100), created_at TIMESTAMP)" \
--engine=InnoDB
# 测试混合查询性能
mysqlslap \
--user=root \
--password \
--host=localhost \
--concurrency=20 \
--iterations=50 \
--number-of-queries=1000 \
--auto-generate-sql \
--auto-generate-sql-load-type=mixed \
--engine=InnoDB
🐛 常见问题解决
连接问题
# 1. 找不到socket文件
# 检查socket文件位置
mysql --help | grep socket
# 或者指定socket路径
mysql -u root -p --socket=/var/lib/mysql/mysql.sock
# 2. 权限问题
# 检查MySQL用户和组
ps aux | grep mysql
# 修复权限
sudo chown -R mysql:mysql /var/lib/mysql
# 3. 端口被占用
# 检查端口占用
netstat -tlnp | grep 3306
# 或使用ss命令
ss -tlnp | grep 3306
# 4. 防火墙问题
# CentOS/RHEL
sudo firewall-cmd --permanent --add-service=mysql
sudo firewall-cmd --reload
# Ubuntu
sudo ufw allow mysql
密码重置
# 方法1:跳过权限表启动
sudo systemctl stop mysqld
sudo mysqld_safe --skip-grant-tables &
mysql -u root
mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
sudo systemctl restart mysqld
# 已能通过有效管理员认证访问时,可使用安全初始化工具调整安全设置;这不是遗忘密码时的独立恢复方法
sudo mysql_secure_installation
🎓 最佳实践建议
tip 💡 安装配置最佳实践
- 版本选择:生产环境使用LTS版本,开发环境可用最新版
- 安全优先:立即运行mysql_secure_installation
- 配置备份:安装后立即备份配置文件
- 监控配置:从一开始就配置慢查询日志
- 用户权限:遵循最小权限原则
- 字符集设置:始终使用utf8mb4字符集
- 备份策略:安装后立即制定备份计划
warning ⚠️ 常见安装陷阱
- 忘记设置字符集为utf8mb4,导致中文乱码
- 生产环境使用默认配置,性能不佳
- 不定期更新MySQL版本,存在安全风险
- 忽视日志配置和监控,问题难以追踪
- root用户的密码设置过于简单
- 在公网对外开放3306端口
🔗 下一步学习
安装配置完成后,建议继续学习:
success ✅ 安装成功检查列表
- [ ] 能够正常启动MySQL服务
- [ ] 能使用root用户登录
- [ ] 已运行mysql_secure_installation
- [ ] 字符集设置为utf8mb4
- [ ] 已创建应用用户并授予正确权限
- [ ] 慢查询日志已启用
- [ ] 能够正常创建数据库和表
- MySQL工具生态 - 掌握各种管理工具
- 字符集与校对规则 - 处理中文和国际化
- MySQL架构 - 理解内部工作原理
最后更新:2024-06-29