MySQL从入门到生产(一):安装与配置
一、引言
在当今数字化转型加速的时代,数据库作为信息系统的核心基础设施,其稳定性、性能与安全性直接关系到业务的连续性与数据资产的安全。MySQL 凭借其成熟的生态系统、卓越的性能表现以及庞大的社区支持,依然是全球最流行的开源关系型数据库之一,被广泛应用于从中小型项目到大型互联网系统的各类场景,成为无数开发者和企业的首选。
而 MariaDB —— 由 MySQL 原始创始人 Michael "Monty" Widenius 在 Oracle 收购 MySQL 后为保障开源自由而发起的分支项目 —— 继承了 MySQL 的架构精髓,并在社区驱动、许可开放性、存储引擎扩展以及对新兴硬件平台(如 ARM 架构)的支持方面持续创新,逐渐发展为一个高性能、高兼容性的独立数据库分支,被众多组织用于生产环境和关键业务系统。
尽管 MySQL 与 MariaDB 高度兼容且部署流程相似,但在实际安装与配置过程中,开发者和运维人员仍常常面临诸多“看似简单却易出错”的技术挑战。无论是在 Windows 开发环境,还是主流 Linux 发行版(如 Ubuntu、CentOS、Debian)上进行部署,权限配置不当、数据目录路径冲突、版本兼容性问题、字符集与大小写敏感设置失误等“隐形陷阱”,都可能导致服务启动失败、安全漏洞或后续迁移困难。此外,残留配置文件、初始化顺序错误、用户权限未正确赋权等问题,也常常让初学者甚至有经验的工程师在安装过程中屡屡受挫。
二、Windows 下 MySQL 安装
适用于需要自定义路径、多版本共存或无图形界面的场景。
2.1 下载与解压
- 从MySQL 官网(https://dev.mysql.com/downloads/mysql/)下载 Windows (x86, 64-bit), ZIP Archive
- 解压到目录,例如:
C:\mysql\mysql-8.0.36-winx64
2.2 配置 my.ini
在 C:\mysql\mysql-8.0.36-winx64\ 下创建 my.ini:
[mysqld]
# 基础路径
basedir=C:/mysql/mysql-8.0.36-winx64
datadir=C:/mysql/mysql-8.0.36-winx64/data
# 端口与网络
port=3306
bind-address=0.0.0.0 # 允许远程连接(按需开启)
# 字符集与引擎
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
default-storage-engine=INNODB
# 认证插件(兼容旧客户端)
default_authentication_plugin=mysql_native_password
# 性能与安全
max_connections=500
max_connect_errors=10
skip-name-resolve # 跳过 DNS 反向解析,提升连接速度
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
port=3306
路径使用正斜杠 / 或双反斜杠 \\,避免单反斜杠导致解析错误。
2.3 初始化数据目录
以 管理员身份 打开 CMD:
cd C:\mysql\mysql-8.0.36-winx64\bin
mysqld --initialize --console
控制台会输出临时 root 密码,形如:
A temporary password is generated for root@localhost: abc123!@#
务必记录!
2.4 安装为 Windows 服务
mysqld --install MySQL80 --defaults-file=C:\mysql\mysql-8.0.36-winx64\my.ini
net start MySQL80
2.5 首次登录与密码修改
mysql -u root -p
输入临时密码后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword123!';
FLUSH PRIVILEGES;
安全建议:生产环境不要直接开放 root@%,应创建专用用户并限制 IP。
三、Linux 下 MySQL 安装
3.1 使用官方源安装
CentOS / Rocky / 麒麟(RPM 系)
# 添加官方 YUM 源
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
# 安装
sudo dnf install -y mysql-server
# 启动
sudo systemctl start mysqld
sudo systemctl enable mysqld
Ubuntu / Debian / 统信 UOS(DEB 系)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.28-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.28-1_all.deb
sudo apt update
sudo apt install -y mysql-server
3.2 获取初始密码
sudo grep 'temporary password' /var/log/mysqld.log
3.3 运行安全初始化
可选但推荐执行
sudo mysql_secure_installation
可设置 root 密码、移除匿名用户、禁用远程 root 登录等。
四、Linux 下 MariaDB 安装
MariaDB 是 MySQL 的完全开源替代品。
4.1 安装 MariaDB(以 CentOS 为例)
# 添加 MariaDB 官方源(可选,系统源通常已包含)
sudo curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
# 安装
sudo dnf install -y mariadb-server
# 启动
sudo systemctl start mariadb
sudo systemctl enable mariadb
4.2 初始化安全设置
sudo mysql_secure_installation
MariaDB 默认 root 无密码,首次运行会引导设置。
4.3 MariaDB vs MySQL 关键差异
|
特性 |
MySQL 8.0 |
MariaDB 10.6+ |
|
JSON 支持 |
原生 类型 |
需用 + 虚拟列模拟 |
|
默认认证插件 |
|
|
|
线程池 |
仅企业版 |
社区版可用 |
|
存储引擎 |
InnoDB(主力) |
Aria(默认)、MyRocks、ColumnStore |
|
国产化支持 |
官方提供 ARM 包 |
社区活跃,适配更灵活 |
建议:
- 若需完全兼容 Oracle MySQL 生态 → 选 MySQL
- 若追求开源自由、高性能、多引擎 → 选 MariaDB
五、常见安装问题与解决方案
5.1 数据目录无权限(Permission denied)
错误:
Failed to set datadir to '/opt/mysql/data/' (OS errno: 13)
原因:MySQL 要求数据目录由 mysql 用户拥有。
正确修复:
sudo mkdir -p /opt/mysql/data
sudo chown -R mysql:mysql /opt/mysql/data
sudo chmod -R 750 /opt/mysql/data
不要使用 chmod 777,也不要轻易设置 user=root(安全风险极高)。
5.2 无法通过套接字连接(ERROR 2002)
错误:
ERROR 2002: Can't connect through socket '/opt/mysql/data/mysql.sock'
原因:国产系统常预装 MariaDB,卸载后残留 /etc/mysql/ 干扰。
解决:
sudo systemctl stop mariadb mysqld
sudo rm -rf /etc/mysql/ /var/lib/mysql/
# 重新安装 MySQL 并初始化
sudo systemctl start mysqld
同时确保 my.cnf 中 [mysqld] 和 [client] 的 socket 路径一致。
5.3 InnoDB 存储引擎注册失败
错误:
Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
原因:旧 InnoDB 日志文件未清理。
解决:
sudo systemctl stop mysqld
sudo rm -rf /var/lib/mysql/* # 会清空所有数据!
sudo mysqld --initialize --user=mysql
sudo systemctl start mysqld
建议:卸载 MySQL 时使用 yum remove mysql-server + 手动清理 /var/lib/mysql。
六、关键配置项详解
6.1 表名大小写不敏感
跨平台必备项目,在 /etc/my.cnf 的 [mysqld] 段添加:
lower_case_table_names=1
必须在初始化数据库前设置! 初始化后修改会导致表无法访问。
|
值 |
含义 |
适用场景 |
|
0 |
区分大小写 |
Linux 默认(不推荐跨平台) |
|
1 |
全部转小写,不区分 |
推荐统一使用 |
|
2 |
存储原样,比较转小写 |
仅 macOS |
查看当前设置:
SHOW VARIABLES LIKE 'lower_case_table_names';
6.2 支持远程连接
该项目谨慎开启
- 修改配置:
[mysqld]
bind-address = 0.0.0.0
- 创建远程用户(不要直接用 root):
CREATE USER 'admin'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
- 开放防火墙:
sudo ufw allow 3306/tcp # Ubuntu
sudo firewall-cmd --add-port=3306/tcp --permanent && firewall-cmd --reload # CentOS
6.3 忘记 root 密码
# 1. 停止服务
sudo systemctl stop mysqld
# 2. 跳过权限启动
sudo mysqld_safe --skip-grant-tables --skip-networking &
# 3. 无密码登录
mysql -u root
# 4. 重置密码
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
FLUSH PRIVILEGES;
EXIT;
# 5. 重启服务
sudo pkill mysqld
sudo systemctl start mysqld
若提示认证插件错误,可在 ALTER USER 后加 IDENTIFIED WITH mysql_native_password BY ...
6.4 主从复制跳过错误
当 Slave 因冲突停止时:
临时跳过(推荐):
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;
永久跳过(高风险):
[mysqld]
slave-skip-errors = 1062,1032 # 主键冲突、记录不存在
# slave-skip-errors = all # 极度危险!
跳错后务必使用 pt-table-checksum 等工具校验数据一致性。
6.5 大小写敏感性策略总结
MySQL 在 Linux 和 Windows 系统下对数据库名、表名、列名等标识符的大小写敏感性存在显著差异,主要由操作系统和配置参数决定,列名、字段值的大小写是否敏感,与操作系统无关,只与 collation 有关(如 utf8mb4_bin 敏感,utf8mb4_general_ci 不敏感),库名和表名的大小写敏感性,由操作系统文件系统 + lower_case_table_names 决定。
|
对象 |
Linux 默认 |
Windows 默认 |
是否可配置 |
|
数据库名(schema) |
大小写敏感 |
大小写不敏感 |
通过 控制 |
|
表名(table) |
大小写敏感 |
大小写不敏感 |
通过 控制 |
|
列名、别名、变量名 |
始终不敏感(SQL 标准) |
始终不敏感 |
不可配置 |
|
数据内容(字符串比较) |
取决于字符集和排序规则(collation) |
同左 |
可通过 collation 控制 |
lower_case_table_names 参数详解
这是控制库名和表名大小写行为的核心参数。
|
值 |
含义 |
Linux |
Windows |
|
0 |
表名按创建时的大小写存储,比较时敏感 |
默认(因为 Linux 文件系统区分大小写) |
禁止使用(Windows 文件系统不区分大小写,会导致冲突) |
|
1 |
表名全部转为小写存储,比较时不敏感 |
可手动设置 |
默认 |
|
2 |
表名按创建时大小写存储,但比较时转为小写(仅 macOS 推荐) |
不推荐 |
不推荐 |
查看大小写策略
SHOW VARIABLES LIKE 'lower_case_table_names';
- 本文标签: MySQL
- 本文链接: https://xiaolanzi.cyou/article/52
- 版权声明: 本文由卓原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
