拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MySQL下载安装与配置全攻略:从Windows到Linux实战指南

MySQL下载安装与配置全攻略:从Windows到Linux实战指南

如果你正准备在一台新电脑上部署 MySQL,大概率会遇到和大多数人一样的问题:官网下载页面弹来弹去不知道怎么点、版本选7还是8、装完后客户端连不上、root密码找不到……这篇文章就是围绕 MySQL 下载安装及配置这一整套流程写的,我把这些年替同事、帮客户装 MySQL 踩过的坑和验证过的操作全部整理进来,从 Windows 到 Linux,从 MSI 到 RPM,从初始化密码到 SSL 连接报错,一条线走完。内容没有废话,适合刚接触数据库的新手照着敲,也适合经常要快速搭建环境的开发和运维同学收藏备查。

1. 下载前必须想清楚的三件事

1.1 版本怎么选:8.0还是5.7?

先说版本。现在网上还能搜到大量5.7的老教程,但MySQL 5.7官方支持已经结束,新漏洞不再修复,新项目我强烈建议直接用8.0系列。8.0的性能和功能改进非常明显,比如默认字符集就是utf8mb4,CTE、窗口函数、哈希连接这些特性也让SQL写起来更顺手。如果你是跟着老项目走,必须用5.7,那也要注意驱动兼容性,特别是Java 8的JDBC驱动、PHP的mysqlnd扩展,版本太老会有问题。

为什么新手不建议装最新小版本?比如刚发布的8.0.36,其实没问题,但如果是刚改版的小版本可能存在未知回归。我的习惯是选择官网当前推荐的GA版本,8.x版本号一般以8.0.xx递增,挑最新的就行,没必要刻意避开。生产环境更看重稳定,可以在一个版本发布一个月后再考虑升级,避免当小白鼠。

1.2 从哪下载最靠谱:官网路径与镜像站

官网下载地址是https://dev.mysql.com/downloads/,注意是 dev 开头,不是 www。进入后选择 MySQL Community Server,就能看到当前最新GA版本。页面支持选择操作系统,默认是Windows,Windows下又区分MSI Installer和ZIP Archive,要按平台选。选好后点 Download,页面会提示登录,直接点下方的 “No thanks, just start my download” 就能不登录下载,这个细节经常有人卡住。

国内网络从官网下载速度不稳定,可以使用国内镜像,比如阿里云、华为云的MySQL软件镜像,或者部分高校镜像源。镜像站的版本一般和官网同步,下载时选择 mysql-8.0.x 的安装包即可。需要提醒的是,下载完成后最好校验一下SHA256值,官网每个包旁边都有校验码,Windows可用命令certutil -hashfile 文件名 SHA256,Linux 下用sha256sum 文件名,别嫌麻烦,这能避免下载到损坏的包,也防止中间链路被篡改。

1.3 安装包类型:ZIP、MSI、RPM、DEB怎么区分

可能你会困惑:MySQL安装包怎么这么多格式?其实不同格式对应不同平台和安装方式。MSI是Windows下的安装引导包,图形化点击下一步就行,适合新手;ZIP是免安装压缩包,解压出来初始化就能用,适合喜欢自己控制目录和不装服务的人。Linux下RPM适用于CentOS、RHEL、Rocky、Fedora等Red Hat系;DEB适用于Ubuntu、Debian;还有一个带.tar.gz的通用二进制包,任何Linux都能用,但要手动配置依赖。

平台包格式特点适用场景
WindowsMSI图形向导,自动配置服务新手、单机部署
WindowsZIP解压即用,初始化手动快速迁移、自动化脚本
Red Hat系RPMyum/dnf安装,自动注册服务CentOS、RHEL、Rocky
Debian系DEBapt安装,自动处理依赖Ubuntu、Debian
通用LinuxTAR.GZ手动控制所有步骤离线部署、特殊目录要求

如果只是学习,用MSI(Linux用RPM或DEB)最简单;如果你要写自动化脚本批量部署,ZIP/TAR更方便。选型时不要只盯着“能不能装上”,还要想清楚后续维护谁来做。比如Windows服务方式安装,重启后自动拉起来,很省心;ZIP方式虽然灵活,但如果忘了注册服务,宕机恢复时就麻烦了。

2. Windows平台安装MySQL 8全流程

2.1 MSI安装包图形化安装步骤

Windows下最省事的方式是下载mysql-installer-community-8.0.x.msi,社区版是GPL协议,可以免费使用。双击运行前,建议确认系统已经装了Visual C++运行库,老系统经常在这里报错,缺什么就补什么。安装时会让你选择 Setup Type,我一般选 Server only,只装服务端,避免把一堆用不到的例子程序和文档也装上。如果想用图形化管理工具,可以额外装 MySQL Workbench,但新手先用命令行练手更踏实。

设置Root密码那一步很关键,8.0默认启用强密码策略,要求密码至少8位,包含大小写字母、数字和特殊字符。如果你只是本机开发用,密码可以简单点,但建议还是设置成高强度,避免后续被安全策略卡住。Authentication Method 会让你选 “Use Strong Password Encryption for Authentication” 还是 “Legacy Authentication”。前者是8.0默认的 caching_sha2_password,安全性更高,但如果你的老客户端不支持,连接会报2059错误,这时才考虑兼容模式。新手直接选第一个,后续连不上了再处理驱动。

随后是 Windows Service 配置,勾选 “Start that MySQL Server at System Startup”,服务名默认 MySQL80,运行账户可以用 Network Service。这里不用改成Local System,默认就好,权限管理更安全。安装完成后,用mysql -u root -p测试一下,能进入mysql>命令行就说明服务已经正常跑起来了。

2.2 ZIP压缩包手动安装与初始化

ZIP方式更“绿色”,适合想完全掌控MySQL文件路径的玩家。先把压缩包解压到例如D:\mysql-8.0.x-winx64,然后在根目录新建my.ini。这个文件就是MySQL的核心配置文件,里面至少要指定 basedir 和 datadir,否则初始化时不知道去哪找程序和数据文件。

[mysqld] basedir=D:/mysql-8.0.36-winx64 datadir=D:/mysql-8.0.36-winx64/data port=3306 character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ci [client] default-character-set=utf8mb4

写好后以管理员身份打开命令提示符,进入bin目录,执行初始化命令。这里有个非常容易踩的坑:mysqld --initialize会生成一个随机root密码,记在日志文件里,新手经常找不到;而mysqld --initialize-insecure会生成一个空密码的root账户,登录后自己再改。我建议新手直接用mysqld --initialize-insecure,省去翻日志的痛苦。初始化完成后,再执行mysqld --install MySQL80注册成Windows服务,最后net start MySQL80启动就好了。

datadir 路径中尽量不要有空格和中文目录。之前帮一个同事处理过,路径写成D:\Program Files\MySQL\data,启动时服务总是瞬间停止,查日志才发现是路径里空格导致的引号问题。这问题在Linux下不存在,Windows下手动配置特别要注意。

2.3 配置环境变量与服务自启动

ZIP方式安装完,bin目录下的mysql.exe只能在当前路径执行,非常不方便。把bin目录加入系统环境变量Path后,在任何目录都能敲mysql -u root -p。具体操作:右键“此电脑” -> 属性 -> 高级系统设置 -> 环境变量 -> 在系统变量中找到Path,编辑追加D:\mysql-8.0.36-winx64\bin,注意多次拼路径时要用分号分隔。

配置好环境变量后,先打开一个新的终端窗口,执行mysql --version验证是否生效。如果提示“不是内部或外部命令”,说明Path没生效或者路径写错。服务自启动方面,MSI安装时在服务配置里勾选即可;ZIP方式用前面提到的mysqld --install注册成服务后,服务默认就是开机自启的。也可以打开services.msc,找到MySQL80服务,确认启动类型是“自动”。用net stop MySQL80/net start MySQL80可以手动启停。

3. Linux平台安装与配置

3.1 用RPM包安装MySQL 8(rpm安装mysql实操)

Linux服务器上,Red Hat系(如CentOS、Rocky、AlmaLinux)最常见的安装方式就是RPM。如果服务器能联网,推荐先安装MySQL官方Yum仓库,后续升级和管理都方便。下载链接在官网的 “MySQL Yum Repository” 页面,例如mysql80-community-release-el8-6.noarch.rpm,然后执行:

yum install mysql80-community-release-el8-6.noarch.rpm yum install mysql-community-server

如果服务器处于内网环境,没法用Yum仓库,就只能把RPM包下载下来离线安装。需要注意依赖顺序,一般依次是:common -> client-plugins -> libs -> client -> icu-data-files -> server。执行时可以用rpm -ivh逐个安装,也可以用通配符一次装完,但依赖缺失时会有提示:

rpm -ivh mysql-community-common-8.0.36-1.el8.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.36-1.el8.x86_64.rpm rpm -ivh mysql-community-libs-8.0.36-1.el8.x86_64.rpm rpm -ivh mysql-community-client-8.0.36-1.el8.x86_64.rpm rpm -ivh mysql-community-icu-data-files-8.0.36-1.el8.x86_64.rpm rpm -ivh mysql-community-server-8.0.36-1.el8.x86_64.rpm

RPM安装完成后,MySQL的数据目录默认在/var/lib/mysql,配置文件在/etc/my.cnf。第一次启动前,需要先执行初始化命令mysqld --initialize,完成后初始密码会写入日志文件/var/log/mysqld.log。用下面这条命令查看临时密码:

grep 'temporary password' /var/log/mysqld.log

拿到初始密码后,执行systemctl start mysqld启动,再用临时密码登录,登录后第一步就是修改密码。

3.2 Ubuntu/Debian下APT方式安装

Debian系服务器推荐用APT方式。Ubuntu系统仓库里的mysql-server包版本往往比较旧,如果你需要8.0,可以配置MySQL官方APT仓库。从官网下载mysql-apt-config_0.8.33-1_all.deb后执行:

dpkg -i mysql-apt-config_0.8.33-1_all.deb apt update apt install mysql-server

安装过程中,官方APT仓库一般会弹窗让你设置root密码。如果没设置,新版MySQL在Ubuntu上默认用auth_socket插件认证root用户,此时只有系统的root用户或sudo组用户能连接MySQL,直接mysql -u root -p反而会失败。遇到这种状况,先执行sudo mysql进入客户端,再改root密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '你的新密码';

Apache和PHP环境经常需要MySQL,APT安装后PHP的php-mysql扩展会自动识别/var/run/mysqld/mysqld.sock,不需要额外配置。Ubuntu下服务管理命令是systemctl status mysql,启动是systemctl start mysql。

3.3 数据目录迁移与权限配置

不管用哪种方式装完,都可能面临一个实际问题:系统盘空间不够,需要把数据目录迁到大容量磁盘。这个操作在安装配置阶段做最省事,后面业务上线了再迁移就得停机维护。假设要把/var/lib/mysql迁到/data/mysql,先停服务:

systemctl stop mysqld rsync -av /var/lib/mysql /data/mysql

然后修改/etc/my.cnf里的datadir=/data/mysql,同时把socket文件路径也确认一下,建议保持默认的/var/run/mysqld/mysqld.sock,不要让客户端找不到。改完后,最关键的一步是权限设置:

chown -R mysql:mysql /data/mysql systemctl start mysqld

如果启用了SELinux,直接启动大概率会失败。CentOS默认SELinux是强制模式,MySQL进程无法访问非标准目录,需要为数据目录添加上下文:

semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?" restorecon -Rv /data/mysql

如果系统没装semanage,先执行yum install policycoreutils-python-utils。这条SELinux的坑,特别多人踩,迁移数据目录后服务起不来的第一嫌疑就是它。

4. 初始化配置与核心参数调整

4.1 初始密码获取与安全策略设置

Windows的MSI安装通常在图形界面就设置了密码,但Linux下RPM安装后初始密码是随机的,很多人不知道要去日志里找。已经说过,grep 'temporary password' /var/log/mysqld.log。找到后用mysql -u root -p登录,会提示需要先改密码才能继续操作。

MySQL 8默认安装的密码校验插件是 validate_password,要求密码至少8位,且包含大小写字母、数字和特殊字符。很多新手在这里卡住,设置一个123456直接被拒绝。如果只是本地测试环境,可以降低校验等级:

SET GLOBAL validate_password.policy = LOW; SET GLOBAL validate_password.length = 4;

但这个设置是运行时生效,重启后会恢复,重启后想在配置里永久放开,需要改动validate_password.*相关参数。生产环境最好保留默认严格模式,不要因小失大。

除了改密码,安装后强烈建议执行一次mysql_secure_installation。它交互式引导你完成几个安全设置:移除匿名用户、禁止root远程登录、删除测试数据库、刷新权限表。新手可能觉得多余,但这一步能堵住很多漏洞,尤其是暴露到公网的数据库,不做瘦身基本等于裸奔。

4.2 字符集与排序规则配置

项目上线后出现中文乱码,八成是字符集配置不正确。MySQL 8的默认字符集已经改为utf8mb4,比5.7的utf8mb3更合理,能完整存储Emoji和生僻字。安装配置时,我习惯在配置文件中显式声明,避免后续导入数据时被系统老环境干扰:

[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ci

utf8mb4_0900_ai_ci是8.0默认的排序规则,ai表示accent insensitive(不区分口音),ci表示case insensitive(不区分大小写)。如果你的老系统已经用了utf8mb4_general_ci,也可以继续沿用,但要注意,同一个数据库实例里不同表的字段排序规则不一致,JOIN关联时可能出现字符集排序规则冲突,报错Illegal mix of collations。统一字符集不是可有可无,而是必须做的事。

验证字符集是否生效,登录后执行:

SHOW VARIABLES LIKE 'character%'; SHOW VARIABLES LIKE 'collation%';

看到character_set_server和collation_server都对应utf8mb4相关设置就说明配置成功了。

4.3 远程访问授权与防火墙放行

MySQL默认root只能在本地登录,如果其他服务器上的应用要连上来,必须显式创建用户并授权。这里我强烈建议不要直接允许root远程登录,而是创建专用账号,这样即使密码泄露,权限范围也可控:

CREATE USER 'appuser'@'192.168.1.%' IDENTIFIED BY '你的强密码'; GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'192.168.1.%'; FLUSH PRIVILEGES;

'appuser'@'192.168.1.%'表示只允许来自192.168.1网段的主机连接,更严格可以写成单个IP。权限可以按需给,如果只是后端Web应用使用,不需要给ALL PRIVILEGES。授权完成后,修改配置文件里bind-address,MySQL 8默认监听所有网卡,如果只想本机访问,可以改成:

[mysqld] bind-address=127.0.0.1

改完要重启服务。最后别忘了防火墙,CentOS/RHEL:

firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload

Ubuntu上是ufw:

ufw allow 3306/tcp

如果服务器在云上,还要去云控制台的安全组放行3306端口。三处缺一处,客户端报错2003就永远查不明白。

4.4 my.cnf核心参数建议

很多人的配置文件里只有port=3306和datadir,能用,但性能全吃默认值。对于一台4G内存的服务器,我常用的基础配置骨架如下:

[mysqld] port=3306 socket=/tmp/mysql.sock datadir=/var/lib/mysql character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ci max_connections=500 innodb_buffer_pool_size=2G innodb_log_file_size=512M sort_buffer_size=2M join_buffer_size=2M 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_buffer_pool_size是最重要的一个参数,它决定InnoDB引擎的缓存池大小。打个比方,这相当于给MySQL建了一个仓库里的“热门货架”,数据都在内存里放着,查询就不用去磁盘搬。通常建议设置为物理内存的50%到70%,但也不要贪心,机器上还有操作系统、PHP、Java服务要吃内存,设太大触发OOM就得不偿失。innodb_log_file_size决定事务日志大小,写入频繁的库建议设到512M以上。配置修改后执行systemctl restart mysqld,再登录确认参数是否生效:

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

5. 连接、验证与日常维护

5.1 客户端连接与常见连接错误排查

安装配置完成,第一件事就是客户端能连上。命令行方式:

mysql -h 192.168.1.10 -P 3306 -u appuser -p

如果报1045 access denied,马上想到用户名密码错误或授权不足。报2003 can't connect,则要按这个顺序排查:目标机器MySQL服务是否启动 -> bind-address是否允许当前来源IP -> 防火墙是否放行 -> 云安全组是否放行。每次都有人把服务开机自启没开,服务器重启后MySQL没起来,白白排查半天。

再说一个热词里的高频问题:mysql ssl连接错误。MySQL 8默认开启SSL传输加密,客户端连接时默认会尝试使用SSL。如果服务端没有配置合法的CA证书,或者客户端用了旧的驱动,连接时就会报SSL握手失败或证书校验错误。连接命令可以临时加参数:

mysql -h 192.168.1.10 -u appuser -p --ssl-mode=DISABLED

--ssl-mode=DISABLED表示不启用SSL加密,仅适用于内网或测试环境,生产环境还是要正确配置SSL证书。图形客户端里,比如DBeaver,在连接编辑页面找到SSL选项卡,把“使用SSL/启用SSL”关掉,也能绕开这个报错。另外还有2059错误,老客户端不认识 caching_sha2_password 认证插件,解决办法是升级客户端驱动,不要图省事降级认证插件,8.0里改成mysql_native_password会很麻烦,而且以后版本会彻底移除。

5.2 服务启停与开机自启

日常维护里,启停数据库是基本功。Windows下:

  • 启动:net start MySQL80
  • 停止:net stop MySQL80
  • 临时跳过启动时的服务检查,可以用mysqld --console

Linux下统一用systemctl:

systemctl start mysqld systemctl stop mysqld systemctl restart mysqld systemctl enable mysqld

systemctl enable设置开机自启,装完一定要记得执行。有些朋友装完用service mysql start也能启动,但重启机器后数据库起不来,就是因为没设enabled。重启后建议看一眼状态:

systemctl status mysqld

如果状态是active (running),说明服务正常。如果failed,去看日志/var/log/mysqld.log或者/var/log/mysql/error.log,大部分问题日志里都有线索。

5.3 备份与恢复简单实践

安装配置完成不等于万事大吉,数据库最怕的就是数据丢失。我习惯在初始化配置后立刻做一次全库备份,确认备份命令可用。最简单可靠的逻辑备份工具是mysqldump:

mysqldump -u root -p --single-transaction --set-gtid-purged=OFF --all-databases > /backup/alldb_$(date +%F).sql

--single-transaction对InnoDB表使用一致性快照,备份时不锁表,线上业务不受影响。--set-gtid-purged=OFF是为了兼容不同GTID配置环境,否则在某些机器上导入备份时会报错。恢复命令更简单:

mysql -u root -p < /backup/alldb_2026-01-01.sql

日常不需要天天全量备份,但安装后做一次验证备份特别重要。否则等数据真正丢了你才第一次试mysqldump,运气好能恢复,运气不好工具缺个参数或者磁盘空间不够,那时候哭都来不及。

6. 常见问题速查表

6.1 服务无法启动、端口被占用怎么办?

这是安装阶段最常遇到的问题,我把典型现象、原因和处理方法整理成表,方便对照排查:

现象可能原因解决方法
端口3306启动报错已有其他MySQL实例占用`netstat -ano
Windows服务启动后秒退my.ini路径相关配置错误检查basedir/datadir是否有空格,查看data目录下.err日志
Linux启动失败数据目录权限不对chown -R mysql:mysql /var/lib/mysql
日志提示SELinux deniedSELinux上下文未设置用semanage fcontext添加mysqld_db_t上下文
mysql.sock' (2)错误socket文件路径不一致检查my.cnf里socket配置,重启服务生成sock文件

端口被占用时,真正要做的不是反复重启服务,而是找到占用进程。Windows下用netstat -ano | findstr :3306找到PID,再去任务管理器定位程序。如果3306被别的应用占用,又不想用默认端口,可以在配置里改成3307,但客户端连接端口也要相应改。

6.2 忘记root密码怎么重置?

忘了root密码是每个DBA都经历过的尴尬时刻。别慌,流程不复杂。停掉MySQL服务,然后以跳过权限表的方式启动:

systemctl stop mysqld mysqld --skip-grant-tables --skip-networking &

--skip-networking是为了禁止外部网络连接,避免在无认证状态下被其他人连上来,安全上必须加。然后无需密码就能进入客户端:

mysql -u root

进入后要先刷新权限表,再改密码:

FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

最后重启服务,恢复正常模式。注意,--skip-grant-tables启动时千万不要让服务对外监听,这也是为什么一定加--skip-networking。

6.3 MySQL排序规则与事务处理快查

下载安装配置完成后,很多新同学会困惑“为什么排序结果和预想不一样”,这往往不是SQL写错了,而是collation没理解。比如utf8mb4_general_ci和utf8mb4_0900_ai_ci对大小写和重音字符的处理有差异。配置阶段统一字符集和排序规则,能避免后续无数排序坑。

验证排序行为,可以执行:

SELECT 'a' = 'A' COLLATE utf8mb4_0900_ai_ci; SELECT 'a' = 'A' COLLATE utf8mb4_0900_bin;

第一个返回1,第二个返回0。如果业务要求严格区分大小写,表的排序规则要选_bin或_cs结尾的,而不能用默认的_ci。

事务处理是MySQL的看家本领,新装完可以顺手验证InnoDB事务是否正常:

SHOW ENGINES; BEGIN; UPDATE user SET ... WHERE id = 1; ROLLBACK;

执行ROLLBACK后再查数据,发现没有变化,说明事务生效。如果业务需要跨多个表原子操作,务必使用事务,不要靠多条SQL裸跑。

6.4 这些细节配置完一定要检查

最后列一个我自己的检查清单,每次装完MySQL都会逐项过一遍,省得后面反复折腾:

  • SHOW VARIABLES LIKE 'port';确认端口不是默认的3306冲突。
  • SHOW VARIABLES LIKE 'log_error';确认错误日志路径。
  • SELECT VERSION();确认版本号符合预期。
  • SHOW DATABASES;确认没有多余测试库。
  • SELECT user, host FROM mysql.user;检查是否存在无用匿名账户。
  • 新用户能否从应用服务器远程连上,用最简单的mysql --version和实际查询验证一把。

每一项都简单,组合起来价值很高。很多人装完MySQL只到“能连上”就结束了,后续慢查询、权限漏洞、字符集乱码接踵而至,就是因为配置阶段欠了技术债。

最后分享一个我自己的习惯:每装好一个MySQL实例,我都会先做一次全量备份,再恢复一次,确认备份链路是通的。这个习惯救过我很多回。MySQL下载安装及配置这件事,别指望一次调到位,核心是先跑起来、数据不丢,然后再根据日志和业务慢慢优化。如果你按这个流程装,遇到问题,回来对照着第6节一步步排查,基本都能解决。

返回列表