ARTICLE DETAIL

资讯详情

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

MySQL 8.0安装教程:Windows与Linux从零部署到排错指南

MySQL 8.0安装教程:Windows与Linux从零部署到排错指南 装MySQL这事说简单真简单官网下个安装包一路按“下一步”就行说难也真难我见过太多人卡在“装完连不上”“登录密码不对”“服务起不来”这些坎上最后折腾一晚上也没搞定。这篇东西就是把MySQL安装这件事从选版本、写配置、跑命令到排错完整捋一遍Windows和Linux都有适合刚接触数据库的学生、转行做开发的“半路出家”选手以及需要在自己电脑上搭环境做课程设计或小项目的朋友。文章里每一个步骤我都会解释为什么要这么做而不是只给你一串命令。1. 装MySQL之前先把这三件事想清楚很多人一上来就下载安装包结果装到一半发现版本不对、平台不匹配、安装方式选错白费十分钟。别急先花30秒把下面三件事定下来后面会顺畅得多。1.1 版本选型到底用8.0还是5.7目前官方主推的版本是MySQL 8.0系列这也是日常开发中最常用的版本。8.0相比老版本有几个明显变化默认字符集改成了utf8mb4对中文支持更友好新增了窗口函数和通用表表达式CTE写复杂统计查询方便很多认证插件默认用caching_sha2_password安全性更高。但8.0也带来一个常见连带问题——很多旧客户端和旧驱动不认识caching_sha2_password导致连接时报错。如果你要对接老系统或者公司项目指定的版本就是5.7那就老实装5.7如果是自己学习、做新项目直接上8.0版本别犹豫。注意标题里说“3分钟安装”指的是安装动作本身不包括下载时间。MySQL完整安装包通常两三百MB网速一般的话光下载就要几分钟别被标题误导。安装操作熟练之后确实3分钟能完成但第一次千万别掐表。1.2 安装方式选型MSI安装包、ZIP免安装版、系统包管理器同一个MySQL在不同平台上有完全不同的安装思路我强烈建议你先确定自己要走哪条路安装方式适用平台优点缺点MSI安装包Windows有可视化向导自动配置服务适合新手卸载不干净时容易残留ZIP免安装版Windows解压即用便于管理和迁移需要手动写配置、初始化和注册服务apt/yum包管理器Linux命令简单自动处理依赖升级方便官方源版本可能偏旧需要额外配置仓库源代码编译Linux/macOS可自定义编译选项编译时间长依赖多不适合新手对Windows用户我一般推荐MSI安装包省心对Linux用户走包管理器对想精确控制环境的人来说Windows下用ZIP免安装版自己也是常见做法我后面都会讲。1.3 提前预判“装完用不了”的几种局面根据我帮别人排查过的经验“装完连不上”通常跑不出这几个原因服务没有启动或者启动后立刻崩溃退出安装时设置的root密码和实际登录密码不一致3306端口被别的程序占用Windows防火墙拦截了3306端口的连接请求用了ZIP免安装版但没有初始化数据目录服务根本起不来。这些问题我会在第6章统一讲排查思路但如果你在安装阶段就注意以下几点大概率不会遇到它们第一用官方安装包第二端口能选默认3306就不要改第三安装过程中弹出的密码一定记住或者用我后面讲的方法重置第四装完先不要急着用客户端工具连先用命令行验证一遍。2. Windows平台实操MSI安装包的完整步骤这一章是给Windows用户准备的。整体流程其实就四步下载、安装、配置、验证。我按步骤拆开讲每步都有值得留意的地方。2.1 下载不要随便在第三方站点下载集成包MySQL的官方下载地址是mysql官网的downloads页面进去之后选择“MySQL Community Server”这是免费的社区版。页面里有多个版本优先选8.0.x的最新小版本因为小版本里面修复了不少已知bug和潜在问题。下载时注意两个细节平台选择“Microsoft Windows”操作系统选“Windows (x86, 32-bit), MSI Installer”或者“Windows (x86, 64-bit), MSI Installer”现在绝大多数电脑都是64位选64位的页面下方会让你登录Oracle账号但实际上有个“No thanks, just start my download”的链接点它就能直接下载不用注册。这里我想多说一句国内很多所谓“一键安装包”或者第三方整合环境虽然方便但经常会捆绑旧版本、魔改配置甚至植入不明组件。如果你是想正经学MySQL请永远从官网下载。哪怕下载慢一点至少干净可控。2.2 安装向导中的关键选项MSI安装包双击运行后前几步基本一路“Next”即可但有几个选项务必留意。第一个是Choosing a Setup Type选择安装类型。如果你是首次安装我建议选“Server only”只装MySQL服务端。别选“Full”或“Developer Default”因为那会附带一大堆你可能用不到的组件比如MySQL for Excel、MySQL Router等既拖慢安装速度还会在卸载时留下几个奇怪的残留服务。第二个是High Availability高可用选项。这个页面会让你选“Standalone MySQL Server / Classic MySQL Replication”默认就是独立服务器直接下一步即可。第三个是Type and Networking类型和网络。这里默认端口是3306除非3306被占用否则不要改端口。改了端口后面连接时就要多加一个参数很麻烦。下方的“Windows Firewall”选项建议勾上允许MySQL通过防火墙否则远程连接时会被系统拦掉。第四个是Authentication Method认证方式这是在MySQL 8.0里新增的页面。默认推荐使用“Use Strong Password Encryption for Authentication”也就是caching_sha2_password认证保持默认就好。如果你遇到老客户端连不上的情况后面可以用ALTER USER命令改回mysql_native_password。2.3 root密码设置与服务安装接下来是设置root账户的密码。MySQL要求强密码一般包含大小写字母、数字和特殊字符长度至少8位。这里要记住两个原则密码一定要设置成一个你确定不会忘的值。MySQL官方不提供找回密码的功能忘了只能通过跳过认证的方式重置流程比较绕可以勾选“Create MySQL User Account”创建一个普通用户但这一步不是必需的。初学阶段用root就够了生产环境才考虑最小权限原则。最后一页是Windows Service配置。把“Configure MySQL Server as a Windows Service”勾上服务名称默认是“MySQL80”或者“MySQL”这一步的目的就是让MySQL以系统服务的方式常驻后台运行开机自动启动。下方的“Start at System Startup”默认勾选保留即可。安装完成后安装程序会提示“Apply Configuration”耐心等它执行完所有步骤。出现“Finish”按钮时MySQL就装完了。提示如果配置过程中报错最好先截图或者记下完整错误信息。绝大多数配置失败都跟“服务安装失败”“启动失败”有关此时可以直接跳到第6章的排查方法。3. 更轻量的第二种选择Windows下用ZIP免安装版部署MSI安装包虽然省心但如果你需要控制MySQL的行为或者想把整个数据目录放到指定磁盘ZIP免安装版更合适。在公司服务器上部署我反而更常用免安装版因为方便版控和批量分发。这一章把免安装版流程完整走一遍。3.1 解压、写my.ini、初始化数据目录官网下载页里选“Windows (x86, 64-bit), ZIP Archive”得到一个压缩包解压到指定目录比如D:\mysql-8.0.xx-winx64。解压后目录里本来没有my.ini配置文件需要你自己新建一个。为什么需要my.ini因为MySQL在启动时会去读取配置文件里的参数比如端口、数据目录、字符集等。免安装版不写配置文件也能启动但会全用默认值字符集还可能是旧默认后面中文存储会出现乱码隐患。下面是一个基础的my.ini参考配置请把其中路径替换成你的实际目录[mysqld] # MySQL安装目录 basedirD:/mysql-8.0.xx-winx64 # 数据目录 datadirD:/mysql-8.0.xx-winx64/data # 端口 port3306 # 字符集 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci # 时区 default-time-zone08:00 [client] default-character-setutf8mb4配置写好后用管理员身份打开命令行先切到MySQL的bin目录然后执行初始化命令mysqld --initialize --console这一步会自动生成数据目录和系统数据库并且把root账号的临时密码打印到控制台上注意保存下来后面登录要用。注意--initialize会生成一个随机临时密码如果你希望root密码为空可以用--initialize-insecure但生产环境请不要这么干。日志中那行“A temporary password is generated for rootlocalhost: 后面那串字符”就是临时密码粗心的人很容易直接关掉窗口弄丢。3.2 把MySQL注册成Windows服务临时密码拿到后先别急着启动mysql先把服务注册了这样以后不用每次手动启动进程mysqld --install MySQL提示“Service successfully installed”后执行net start MySQL服务启动后用临时密码登录mysql -uroot -p登录成功后会强制要求修改密码执行下面的命令ALTER USER rootlocalhost IDENTIFIED BY 你的新密码;改完密码免安装版的安装工作就算完成了。3.3 免安装版最容易忽略的坑时区和字符集免安装版最常见的两个问题都是配置问题不是软件问题。第一个是时区。MySQL内部的系统时间默认跟操作系统时区走但如果你在my.ini里没写default-time-zone某些版本下用JDBC连接时会报 “The server time zone value” 之类的错误。提前在配置里写08:00能避免这个坑。第二个是字符集。如果不写character-set-serverutf8mb4MySQL默认字符集可能是latin1这时候你往表里插入中文数据再查出来就可能是问号。虽然可以在建库时指定字符集补救但最好的方式还是从服务端层面统一。免安装版的卸载也很简单先停止服务net stop MySQL然后执行mysqld --remove MySQL再删掉整个目录就行不会留下像MSI那样乱七八糟的残留项。4. Linux环境下安装MySQL从仓库配置到远程访问Linux用户安装MySQL的思路跟Windows完全不同。这里我只讲在生产环境中最常见的两种发行版操作思路Ubuntu/Debian系和CentOS/RHEL系。演示命令以Ubuntu为主CentOS的差异会单独说明。4.1 用apt安装MySQL之前先想清楚版本来源Ubuntu的默认软件源里确实有MySQL但版本可能不是最新的8.0而是发行版自带的旧版本。如果你对版本有要求最可靠的方式是添加MySQL官方APT仓库。官方仓库的添加方式以前比较繁琐要手动下载deb包、注册key现在简单很多。可以先去MySQL官网下载页选择“MySQL APT Repository”下载那个.deb文件然后用命令安装sudo dpkg -i mysql-apt-config_0.8.xx-1_all.deb安装过程中会弹出一个蓝底界面让你选择要配置的MySQL版本默认就是8.0直接选中“Ok”回车即可。接着更新一下软件源信息sudo apt update这一步完成之后再安装服务端sudo apt install mysql-serverCentOS/RHEL用户则先要安装官方yum仓库sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo yum install mysql-community-server这里我想提醒一句用包管理器安装最大的好处是卸载干净、升级方便但坏处是有些发行版内置了MariaDB的依赖冲突。装了MariaDB的机器再装MySQL有可能互相打架建议先移除MariaDB相关包再装。4.2 初始化、启动服务与开机自启包管理器安装完成之后MySQL通常不会自动启动需要手动操作sudo systemctl start mysqld先看一下服务的运行状态sudo systemctl status mysqld如果显示active (running)说明启动成功。接着设置开机自启sudo systemctl enable mysqld在CentOS/RHEL下MySQL第一次启动时会在日志里生成一个临时密码查看方式sudo grep temporary password /var/log/mysqld.logUbuntu下则略有不同新版安装包会要求你先用sudo mysql以系统root身份登录socket然后手动修改root密码或者直接进入mysql_secure_installation向导来配置。用临时密码登录后第一件事还是改密码ALTER USER rootlocalhost IDENTIFIED BY 你的新密码;然后执行安全设置向导sudo mysql_secure_installation这个向导会问你是否要移除匿名用户、是否禁止root远程登录、是否删除test数据库、是否刷新权限表。初学阶段除“禁止root远程登录”我建议选Yes之外其他根据自己情况选推荐全部Yes减少安全隐患。4.3 远程访问权限的配置不到万不得已不要放开很多人装完MySQL后需要用本地的图形客户端工具连服务器上的数据库。这时经常遇到Host xxx is not allowed to connect to this MySQL server的报错。默认情况下MySQL只允许localhost访问远程连接需要单独授权。最简单的做法是在MySQL中执行CREATE USER myuser% IDENTIFIED BY mypassword; GRANT ALL PRIVILEGES ON *.* TO myuser%; FLUSH PRIVILEGES;但这里我必须强调%表示所有IP都能连生产环境这是非常危险的操作。如果只是想从自己电脑连最好把%换成你当前电脑的固定IP比如myuser192.168.1.100。我基本都会建议为远程连接单独创建一个用户而不是直接开放root。因为root拥有最高权限一旦被攻破整个数据库就没了而普通用户至少还能把影响范围控制在他有权限的那几个库。Linux下还有两个容易漏掉的“隐藏关卡”一是my.cnf中如果配置了bind-address127.0.0.1相当于只监听本机回环地址远程无论如何都连不上需要改成0.0.0.0二是系统防火墙必须放行3306端口以Ubuntu的ufw为例sudo ufw allow from 你的IP to any port 3306这两个位置不动MySQL内部的用户授权做得再对远程连接一样失败。5. 装好之后必须做的验证清单不是看到“安装成功”就完了很多安装教程到“安装完成”就结束了但实际上装好跟能用之间还有一段距离。我每次装完MySQL之后一定会按这套清单验证一遍整个过程不超过一分钟但能提前暴露绝大多数隐蔽问题。5.1 命令行连接测试首先测试能否正常登录。Windows下打开命令行执行mysql -uroot -pLinux下如果当前系统用户是root可能需要走sudosudo mysql -uroot -p输入密码后如果出现mysql提示符说明登录成功。这一步能同时证明三件事客户端能连上服务端、密码正确、服务端在监听。接下来在mysql提示符下执行一个最简单的查询SELECT VERSION();能看到类似8.0.36的输出说明服务端正常响应查询请求。5.2 版本、端口、字符集、时区整体检查登录之后用下面几条SQL做一次环境体检-- 查看版本 SELECT VERSION(); -- 查看端口 SHOW VARIABLES LIKE port; -- 查看服务端字符集 SHOW VARIABLES LIKE character_set_server; -- 查看时区 SHOW VARIABLES LIKE time_zone;重点关注几个目标值port应该是3306character_set_server应该是utf8mb4time_zone如果是SYSTEM但你的系统时区是北京时间也可以如果后面遇到JDBC时区报错再改不迟。查看默认存储引擎SHOW ENGINES;InnoDB应该显示为DEFAULT这是MySQL 8.0的默认引擎支持事务和外键日常使用足够了。5.3 创建第一个数据库和测试表能查配置还不够最好实际创建一个库、建一张表、插入一条数据、再查出来。这样能从端到端验证写入路径没有坏CREATE DATABASE test_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE test_db; CREATE TABLE student ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT ); INSERT INTO student (name, age) VALUES (张三, 20), (李四, 21); SELECT * FROM student;如果最后一行把两条数据查了出来说明从建库、建表到写入、读取的整条链路都正常。顺便也验证了中文存储没有问题因为库和表的字符集都已经指定为utf8mb4。做完这一步我的内心才会真正觉得“装好了”而不是“装完了”。6. 安装失败场景排查为什么3分钟装完却连不上这一章写给那些已经栽过跟头的人。我在给朋友和同事排查MySQL安装问题的过程中发现大部分问题高度集中在几个固定原因上。下面按出现频率排序每个问题都给出排查链路你可以照着自己的报错信息对号入座。6.1 服务启动失败先看日志不要猜报错场景是点击“Start Service”时报错或者net start MySQL提示服务启动失败。很多人第一反应是重装其实先看错误日志才是最快的路。Windows下MySQL的错误日志叫hostname.err默认放在数据目录下免安装版则在datadir指向的目录里。用编辑器打开这个文件看最后几行几乎都会直接写明失败原因。我在实际中遇到最多的三种日志Cant create/write to file D:\...\mysql.sock或权限拒绝——数据目录没有写权限右键目录设置一下当前用户完全控制权限Unknown variable default-time-zone08:00——说明my.ini里写了当前版本不认识的参数检查拼写或删除该行The data directory needs to be initialized——忘记执行mysqld --initialize。Linux下日志位置一般是/var/log/mysqld.log或/var/log/mysql/error.log排查方式相同先看日志再做判断不要盲目卸载重装。6.2 密码无法登录的几种情况与重置方法最常见的两个登录失败原因一是把安装时生成的临时密码弄丢了二是忘记了后来设置的密码。这两种情况都只能通过跳过权限校验的方式重置密码。方法是在Linux下以root权限执行sudo systemctl stop mysqld sudo mysqld_safe --skip-grant-tables 然后不需要密码直接进入MySQLmysql -uroot进入后再重置密码要注意MySQL 8.0下密码字段已经改为authentication_stringUSE mysql; UPDATE user SET authentication_string WHERE userroot; ALTER USER rootlocalhost IDENTIFIED BY 你的新密码; FLUSH PRIVILEGES;重置之后重启服务sudo systemctl restart mysqldWindows下重置思路一样只是在执行mysqld --skip-grant-tables之前需要先手动结束mysqld进程。提示--skip-grant-tables模式下MySQL不校验任何登录密码相当于裸奔状态处理完密码后一定记得正常重启服务不要在这种状态下让数据库对外提供服务。6.3 端口被占用、防火墙拦截与“Cant connect”类报错格式类似Cant connect to MySQL server on localhost (10061)的报错通常意味着客户端根本没有连到服务端。排查顺序是下面三步先确认服务在跑Windows下查看“服务”面板里MySQL服务状态Linux下用systemctl status mysqld。再确认端口在监听。Windows下执行netstat -ano | findstr 3306Linux下执行ss -lntp | grep 3306如果没有输出说明mysqld没起来如果有输出但IP是127.0.0.1:3306说明只监听了本机远程连接会被拒绝。最后确认防火墙放行。Windows下检查入站规则里有没有MySQL相关规则Linux下用ufw status或firewall-cmd --list-all查看3306端口状态。在本地连接场景下还有一个经常踩的坑是mysql: [ERROR] Unknown database xxx这种情况不是连接问题而是你登录时顺手把数据库名写错了比如mysql -uroot -p mysql里的数据库名不存在去掉最后的参数直接连接即可。7. 几个值得做的收尾动作环境变量、客户端工具与学习路径装好MySQL之后还有几个小动作会明显提升使用体验属于那种“早知道就好了”的顺手优化。7.1 把MySQL的bin目录加入系统环境变量安装完MySQL之后命令行执行mysql提示“不是内部或外部命令”是因为系统还不知道去哪找这个命令。把bin目录加入PATH之后就不用每次先切换到安装目录了。Windows下的操作路径是右键“此电脑”“属性”“高级系统设置”“环境变量”在Path变量里添加一行指向MySQL的bin目录比如D:\mysql-8.0.xx-winx64\bin。Linux下通常安装后bin目录已经在PATH里只有免安装版的tar包才需要手动把export PATH$PATH:/usr/local/mysql/bin写进~/.bashrc。做完这件事你就能在任意路径下直接运行mysql -uroot -p了。7.2 装一个值得信赖的图形客户端工具命令行适合练习和学习但日常开发中我基本都会装一个图形界面客户端效率高很多。免费又好用的有DBeaver Community、MySQL Workbench其中DBeaver是纯Java写的跨平台支持几乎所有数据库是我最常推荐给别人的。连接时主要填几项主机地址写127.0.0.1或localhost端口写3306用户写root密码填你设置的密码数据库可以不填连上之后再选。如果连不上对照第6章的排查顺序检查服务、端口和防火墙。7.3 装完数据库下一步建议学什么数据库装完了只是万里长征第一步。接下来最值得花时间的几个方向按学习次序排是SQL基础语法SELECT、INSERT、UPDATE、DELETE是四条最常用的语句先把增删改查练熟表设计基础数据类型、主键外键、唯一约束、三范式这是设计一张合理表的基础索引机制为什么查询慢、走没走索引、联合索引的生效顺序这一步是区分初级和中级开发者的分水岭事务与锁InnoDB的事务隔离级别、行锁表锁、死锁产生的原因这是后端开发的必备知识备份与恢复mysqldump工具、binlog思路、数据误删之后的补救方法这块练好之后你维护的数据库才叫真正有保障。我个人在实际操作中感受最深的一点是很多人装完数据库之后一直用着默认配置直到应用出现性能问题了才回头分析那时往往牵一发动全身改起来畏首畏尾。建议新装好的MySQL第一时间把字符集、时区、备份策略定下来。这三件事在初期几乎零成本等到数据量大了再改付出的代价可能是通宵加班。最后再分享一个小技巧每次改完配置文件之后不要直接重启服务就完事先用mysqld --validate-config预检一下配置对不对确认通过再重启。这一条命令能帮你省下很多因为少写一个空格、多写一个符号导致的崩溃现场。
返回列表