资讯动态

MySQL 5.7.22 安装包下载与安装全攻略:Linux和Windows避坑指南

发布时间:2026/10/9 10:40:56 来源:尧图企业网站定制
简介MySQL 5.7.22 是开源关系型数据库发展中的重要版本本资源为适配 32 位 Windows 系统的官方安装包面向需要本地搭建数据库环境的开发者、运维人员及数据库学习者可解决开发测试、教学演示与小型业务部署中的环境安装问题。压缩包共 365 个文件约 308.83MB以 h 头文件、dll 动态库、pdb 调试符号、exe 可执行程序及 xml 配置为主另含 sql 脚本、sys 系统文件与 readme、changelog 等说明文档覆盖服务端、客户端工具与连接器组件。该版本在 InnoDB 并发处理、查询优化器、权限管理与 SSL/TLS 默认配置上均有增强并支持在线备份、JSON 数据类型与窗口函数便于处理非结构化数据与复杂分析。目前已有 852 人学习下载适合希望快速获得完整安装介质、对照版本特性进行环境验证与功能测试的读者。1. MySQL 5.7.22 安装包为什么这个“老版本”还在被反复翻出来如果你在搜索引擎里敲下“MySQL数据库安装包5.7.22”大概率不是出于好奇而是被现实推着走手头一个老项目只认 5.7 的语法或者某套业务系统在 8.0 上跑出一堆兼容性报错又或者你只是想在本地快速搭一个和线上环境一致的测试库。5.7.22 这个版本号本身很具体它属于 MySQL 5.7 系列的一个稳定维护版本既不是最早的 5.7.x也不是最后的 5.7.44。很多人找它是因为某个部署脚本、某份配置模板或者某个依赖库的文档里白纸黑字写着“需要 5.7.22”。这篇文章不打算劝你升级也不打算讨论版本优劣只解决一件事拿到这个安装包之后怎么在 Linux 和 Windows 上把它稳稳当当地装起来、跑起来、连上去以及那些让你半夜爬起来查日志的坑到底在哪。2. 先搞清楚 5.7.22 安装包到底有几种形态2.1 别下错包Linux 下的 tar.gz、rpm、deb 和源码包MySQL 5.7.22 在 Linux 下的分发形式主要有四类选错了后面全是麻烦。最常见的是mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz这是一个已经编译好的二进制包解压就能用适合不想折腾编译、又需要自定义安装路径的场景。第二种是 RPM 包通常是一组mysql-community-common、mysql-community-libs、mysql-community-server这样的包用yum或rpm安装适合 CentOS 7 这类系统但依赖关系容易打架。第三种是 DEB 包面向 Debian/Ubuntu用dpkg或apt安装。第四种是源码包mysql-5.7.22.tar.gz需要自己cmake编译耗时且容易缺依赖除非你要改编译参数否则不建议新手碰。判断自己该用哪种看两个东西操作系统版本和是否允许 root 统一管理。如果是 CentOS 7 且没有特殊路径要求RPM 最省事如果要装到/usr/local/mysql并且和系统包隔离tar.gz 更干净。我一般会优先选 tar.gz因为它不污染系统包管理器卸载就是删目录后悔药比较好买。2.2 Windows 下 MSI 和 ZIP 的区别以及 5.7.22 的安装向导变化Windows 上 MySQL 5.7.22 提供 MSI 安装向导和 ZIP 免安装包。MSI 会帮你建服务、配环境变量、跑mysqld --initialize适合不熟悉命令行的开发者。ZIP 包解压后需要手动初始化、手动注册服务、手动改my.ini灵活但步骤多。5.7.22 的 MSI 向导里有一个容易忽略的选项在“Authentication Method”那一步默认是“Use Strong Password Encryption”但很多老客户端比如某些版本的 Navicat 或旧版 PHP 驱动连不上需要改成“Use Legacy Authentication Method”。这个选项一旦选错后面就要用ALTER USER改插件比较折腾。2.3 校验安装包完整性的两个命令下载完安装包先别急着解压。Linux 下用md5sum或sha256sum对一下官方提供的校验值Windows 下用certutil -hashfile。这一步能过滤掉下载中断导致的半截包省得后面初始化时报“文件损坏”这种玄学错误。# Linux 下校验 tar.gz 包 sha256sum mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz # Windows 下校验 ZIP 包 certutil -hashfile mysql-5.7.22-winx64.zip SHA256逻辑说明sha256sum输出一串哈希值和官方页面上的值逐字符对比。参数说明-hashfile后面跟文件路径和算法名算法用 SHA256 比 MD5 更稳。如果哈希对不上直接重新下载不要试图解压。3. Linux 下用 tar.gz 包跑通 5.7.22 的最小步骤3.1 解压、建用户、改权限三条命令定基础拿到 tar.gz 包后第一步不是急着mysqld而是把目录、用户、权限理顺。MySQL 5.7.22 默认不允许用 root 跑mysqld所以必须建一个专用系统用户。# 解压到 /usr/local 并重命名 tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ mv /usr/local/mysql-5.7.22-linux-glibc2.12-x86_64 /usr/local/mysql # 创建 mysql 用户组和用户禁止登录 groupadd mysql useradd -r -g mysql -s /bin/false mysql # 改属主和权限 chown -R mysql:mysql /usr/local/mysql chmod 750 /usr/local/mysql逻辑说明-r表示创建系统用户-s /bin/false禁止该用户登录 shell降低被利用风险。chmod 750保证只有 mysql 用户和同组用户能进入目录。参数说明如果你把 MySQL 装到/opt/mysql把路径换掉即可但后续my.cnf里的basedir也要同步改。3.2 初始化数据目录--initialize和--initialize-insecure怎么选MySQL 5.7.22 初始化数据目录用mysqld --initialize它会生成一个临时的 root 密码写在错误日志里。如果你不想去日志里翻密码可以用--initialize-insecure它会把 root 密码设为空登录后再改。生产环境建议用前者本地测试用后者更省事。# 创建数据目录 mkdir -p /usr/local/mysql/data chown -R mysql:mysql /usr/local/mysql/data # 初始化生成临时密码 /usr/local/mysql/bin/mysqld --initialize --usermysql --basedir/usr/local/mysql --datadir/usr/local/mysql/data # 或者初始化空密码 /usr/local/mysql/bin/mysqld --initialize-insecure --usermysql --basedir/usr/local/mysql --datadir/usr/local/mysql/data逻辑说明--initialize会创建mysql系统库、sys库和 root 用户并在错误日志末尾打印A temporary password is generated for rootlocalhost: xxxxx。参数说明--basedir是 MySQL 安装根目录--datadir是数据存放目录两个路径必须存在且属主为 mysql。如果初始化报“Cannot create directory”检查datadir的父目录权限。3.3 写一个能用的 my.cnf五个必调参数初始化完成后需要一份my.cnf告诉 MySQL 去哪里找数据、用什么字符集、监听哪个端口。5.7.22 的默认配置比较保守下面这五个参数建议显式写出来。[mysqld] basedir /usr/local/mysql datadir /usr/local/mysql/data port 3306 character-set-server utf8mb4 collation-server utf8mb4_general_ci socket /tmp/mysql.sock log-error /usr/local/mysql/data/error.log pid-file /usr/local/mysql/data/mysql.pid [client] socket /tmp/mysql.sock default-character-set utf8mb4逻辑说明character-set-server设为utf8mb4是为了支持 emoji 和更多生僻字5.7.22 默认的latin1在插入中文时容易乱码。参数说明socket文件路径要和[client]里一致否则本地mysql命令连不上。log-error和pid-file建议放在datadir下方便统一管理。把这份配置存为/etc/my.cnf或/usr/local/mysql/my.cnf启动时用--defaults-file指定。3.4 启动、改密码、开远程三条 SQL 收尾配置写好后用mysqld_safe或直接mysqld启动。5.7.22 推荐用mysqld_safe它会在进程崩溃后自动拉起。# 启动 MySQL /usr/local/mysql/bin/mysqld_safe --defaults-file/etc/my.cnf --usermysql # 登录如果初始化时用了 --initialize密码在 error.log 里 /usr/local/mysql/bin/mysql -uroot -p # 改 root 密码 ALTER USER rootlocalhost IDENTIFIED BY YourNewPassword123!; # 允许 root 从任意主机连接仅测试环境生产慎用 CREATE USER root% IDENTIFIED BY YourNewPassword123!; GRANT ALL PRIVILEGES ON *.* TO root% WITH GRANT OPTION; FLUSH PRIVILEGES;逻辑说明ALTER USER是 5.7 推荐的改密码方式比SET PASSWORD更明确。CREATE USER root%会新建一个允许远程登录的 root和rootlocalhost是两个独立账号。参数说明YourNewPassword123!换成你自己的强密码5.7.22 默认密码策略要求包含大小写字母、数字和符号。FLUSH PRIVILEGES让权限表立即生效。4. Windows 下 ZIP 包安装比 MSI 更可控的路径4.1 解压与 my.ini 的最小配置Windows ZIP 包解压到D:\mysql-5.7.22-winx64后目录下没有data文件夹也没有my.ini。需要手动建一个my.ini放在解压目录下。[mysqld] basedir D:\mysql-5.7.22-winx64 datadir D:\mysql-5.7.22-winx64\data port 3306 character-set-server utf8mb4 default-storage-engine INNODB sql_mode STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION [client] port 3306 default-character-set utf8mb4逻辑说明sql_mode这一行是 5.7.22 的常见配置去掉了ONLY_FULL_GROUP_BY避免一些老 SQL 报错。参数说明basedir和datadir用反斜杠路径不要有空格和中文。如果端口 3306 被占用改成 3307 并同步改[client]下的 port。4.2 初始化并注册为 Windows 服务以管理员身份打开命令提示符进入bin目录执行初始化和安装服务。# 初始化数据目录空密码 mysqld --initialize-insecure --usermysql --console # 注册服务 mysqld --install MySQL57 --defaults-fileD:\mysql-5.7.22-winx64\my.ini # 启动服务 net start MySQL57逻辑说明--console把初始化日志打印到屏幕方便看报错。--install后面跟服务名可以自定义比如MySQL57。参数说明如果提示“Install/Remove of the Service Denied”说明没有用管理员权限。启动后如果服务立刻停止去data目录下看.err文件。4.3 用 mysql 命令行验证连接和字符集服务启动后用mysql -uroot -p登录然后跑几条 SQL 确认字符集和版本。-- 查看版本 SELECT VERSION(); -- 查看字符集 SHOW VARIABLES LIKE character_set%; -- 查看 sql_mode SELECT sql_mode;逻辑说明VERSION()应该返回5.7.22。character_set_server应该是utf8mb4。sql_mode里不应该出现ONLY_FULL_GROUP_BY否则一些GROUP BY查询会报错。参数说明如果字符集不对检查my.ini是否被正确加载可以用mysqld --verbose --help | findstr my.ini看默认读取路径。5. 避坑5.7.22 安装过程中最容易翻车的五件事5.1 初始化报“data directory has files”但目录明明是空的现象执行mysqld --initialize时提示--initialize specified but the data directory has files in it. Aborting.但ls data看不到东西。原因datadir下可能有隐藏文件比如.DS_Store或之前初始化失败留下的auto.cnf。解决ls -la确认隐藏文件清空datadir后重试。如果还是不行换一个全新的目录路径。5.2 启动后本地 socket 连不上但 TCP 能连现象mysql -uroot -p报Cant connect to local MySQL server through socket /tmp/mysql.sock但mysql -h127.0.0.1 -uroot -p正常。原因my.cnf里[mysqld]和[client]的socket路径不一致或者mysqld没有权限在/tmp下创建 socket 文件。解决统一两处socket路径或者把 socket 放到datadir下并确保 mysql 用户有写权限。5.3 远程连接报“Host is not allowed to connect”现象在另一台机器上用客户端连报Host x.x.x.x is not allowed to connect to this MySQL server。原因5.7.22 默认只创建了rootlocalhost没有root%。解决在服务器本地登录后执行CREATE USER root% IDENTIFIED BY 密码; GRANT ALL ON *.* TO root%; FLUSH PRIVILEGES;。注意如果服务器有防火墙还要放行 3306 端口。5.4 中文乱码从建库到连接的全链路检查现象插入中文后显示???或者乱码。原因可能是character_set_server不是utf8mb4也可能是客户端连接时用了latin1。解决先SHOW VARIABLES LIKE character_set%看服务端再SHOW VARIABLES LIKE collation%看排序规则。建库时显式指定CREATE DATABASE dbname DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;。连接串里加上?useUnicodetruecharacterEncodingutf8。5.5 忘记 root 密码跳过权限表重置的完整流程现象初始化时没记临时密码或者改完密码忘了。原因5.7.22 的密码存在mysql.user表里直接改文件不现实。解决停掉 MySQL用mysqld_safe --skip-grant-tables --skip-networking 启动然后mysql -uroot免密登录执行UPDATE mysql.user SET authentication_stringPASSWORD(新密码) WHERE Userroot; FLUSH PRIVILEGES;。注意5.7.22 的密码字段是authentication_string不是password。改完后正常重启。6. 进阶把 5.7.22 装进容器和验证安装是否真的可用6.1 用 Docker 跑一个 5.7.22 的临时实例如果你不想在宿主机上留一堆文件用容器跑 5.7.22 是最快的方式。前提是本地已经装了 Docker并且能拉取镜像。# 拉取 5.7.22 镜像 docker pull mysql:5.7.22 # 启动容器映射端口和挂载数据卷 docker run -d --name mysql5722 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORDYourNewPassword123! \ -v /data/mysql5722:/var/lib/mysql \ mysql:5.7.22 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_general_ci逻辑说明-e MYSQL_ROOT_PASSWORD设置 root 密码-v把数据目录挂到宿主机容器删了数据还在。参数说明--character-set-server和--collation-server直接追加在镜像名后面会覆盖默认配置。如果 3306 被占用把-p 3306:3306改成-p 3307:3306。6.2 验证安装是否真的可用四条检查命令装完不等于能用。我一般会跑四条检查版本、字符集、存储引擎、时区。-- 版本必须是 5.7.22 SELECT VERSION(); -- 字符集必须是 utf8mb4 SHOW VARIABLES LIKE character_set_server; -- InnoDB 必须可用 SHOW ENGINES; -- 时区建议设为东八区 SET GLOBAL time_zone 8:00; SELECT global.time_zone;逻辑说明SHOW ENGINES里 InnoDB 的Support应该是DEFAULT。时区如果不设NOW()返回的是 UTC和本地时间差 8 小时。参数说明SET GLOBAL只对当前实例生效重启失效要永久生效得写进my.cnf的default-time-zone 8:00。6.3 一个容易忽略的细节lower_case_table_names在 Linux 和 Windows 上的差异MySQL 5.7.22 在 Linux 下默认lower_case_table_names0表名区分大小写Windows 下默认是1表名不区分。如果你在 Windows 上开发部署到 LinuxUser和user会被当成两张表直接报“表不存在”。这个坑我踩过不止一次血泪经验是在my.cnf里显式加上lower_case_table_names1并且初始化之前就加初始化之后再改会报错。参数说明这个参数只能在初始化时设定后期修改需要重新初始化数据目录所以一开始就要想清楚。6.4 最后一条习惯装完先备份一份初始数据目录不管是 tar.gz 还是 ZIP初始化完成后、还没建业务库之前把整个data目录打包备份一份。后面如果配置改乱了、密码忘了、字符集搞错了直接删掉data恢复备份比任何后悔药都管用。我一般会执行tar -czvf mysql5722_init_data.tar.gz /usr/local/mysql/data放在一个不会被误删的路径下。这个习惯帮我省过至少三次重装的时间。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑