描述:最详细的MySQL 9.7二进制安装教程,覆盖MySQL环境检查、MySQL安装配置、MySQL启动排错、用户安全、SQL基础、参数调优、事务与索引原理,适合学生、开发和运维工程师。
一、安装前必读
1.1 为什么选择二进制安装?
MySQL 在 Linux 下支持多种安装方式:
| 安装方式 | 优点 | 缺点 |
|---|---|---|
| 源码编译 | 定制性强,可优化编译参数 | 耗时长,依赖多,易出错 |
| YUM/RPM | 方便快捷,自动解决依赖 | 版本滞后,路径分散,管理不便 |
| 二进制(预编译) | 开箱即用,性能稳定,便于多实例管理 | 需手动配置环境变量和服务 |
本教程采用官方二进制包(glibc 2.28 版),适合生产环境批量部署,统一目录规范(/opt/mysql+/data分离)。
1.2 下载MySQL 9.7.1 二进制包
百度网盘链接(含mysql-9.7.1-linux-glibc2.28-x86_64.tar.xz):
🔗 链接: https://pan.baidu.com/s/1QRuCxRMsXaiv4d4quGpzuQ?pwd=hpe3
📦 提取码:hpe3
1.3 检查系统glibc版本(必须 ≥ 2.28)
如果还没有Linux环境,请参考我的这篇文章:VMware安装Rocky Linux。
[root@test ~]# ldd --versionldd(GNU libc)2.34# 如果小于2.28,请升级系统或下载低版本MySQL如果版本低于 2.28,启动会报错FATAL: kernel too old或GLIBC_2.28 not found。
二、二进制安装MySQL 9.7全流程
2.1 创建虚拟用户及目录
# 创建MySQL运行用户(不登录,无家目录)useradd-s/sbin/nologin-Mmysql# 创建软件存放、安装、数据目录mkdir-p/server/toolsmkdir-p/opt/mysqlmkdir-p/data/mysql/mysql3306/{data,logs}cd/server/tools2.2 上传并解压二进制包
# 若没有rz,先安装 lrzszyuminstall-ylrzsz rz# 选择下载好的 tar.xz 文件若没有tar工具,先按照 yuminstalltar-y# 解压(.xz 格式,用 xf 参数)tarxf mysql-9.7.1-linux-glibc2.28-x86_64.tar.xz2.3 移动软件并创建软链接
mvmysql-9.7.1-linux-glibc2.28-x86_64 /opt/mysql/mysql-9.7.1ln-s/opt/mysql/mysql-9.7.1/ /usr/local/mysql2.4 移除系统自带的 MariaDB 库(避免冲突)
rpm-e--nodepsmariadb-libs2.5 编写实例配置文件(多实例标准化)
使用vi /data/mysql/mysql3306/my3306.cnf,粘贴以下内容(已针对 MySQL 9.7 优化):
[mysqld] user=mysql basedir=/usr/local/mysql datadir=/data/mysql/mysql3306/data socket=/data/mysql/mysql3306/mysql.sock server_id=1 port=3306 log_error=/data/mysql/mysql3306/logs/error.log log_bin=/data/mysql/mysql3306/logs/mysql-bin binlog_format=row gtid_mode=on enforce_gtid_consistency=true log_slave_updates=1 # 连接与超时 max_connections=1024 wait_timeout=60 max_allowed_packet=32M # 排序与连接缓冲区 sort_buffer_size=2M join_buffer_size=2M # InnoDB 核心配置(生产环境请调大 buffer pool) innodb_buffer_pool_size=128M # 建议设为物理内存的70%~80% innodb_flush_log_at_trx_commit=1 # 最安全(双一) innodb_log_buffer_size=32M innodb_redo_log_capacity = 128M # 二进制日志缓存 binlog_cache_size=2M max_binlog_cache_size=8M max_binlog_size=512M binlog_expire_logs_seconds=604800 # 7天 # 慢查询日志 slow_query_log=on slow_query_log_file=/data/mysql/mysql3306/logs/slow.log long_query_time=0.5 log_queries_not_using_indexes=1⚠️注意:MySQL 9.7 已废弃部分老参数(如
expire_logs_days被binlog_expire_logs_seconds取代),本配置已兼容。
2.6 安装依赖包并修改目录权限
yuminstall-ylibaio-devel numactlchown-Rmysql:mysql /data/*2.7 初始化数据库(无密码,方便首次登录)
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf\--initialize-insecure--user=mysql--basedir=/usr/local/mysql\--datadir=/data/mysql/mysql3306/data若想生成随机初始密码,将
--initialize-insecure替换为--initialize,密码会记录在error.log中。
2.8 添加环境变量
echo'PATH="/usr/local/mysql/bin:$PATH"'>>/etc/profilesource/etc/profile2.9 启动MySQL
mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf&2.10 验证启动
# 如没有netstat命令,先安装yuminstallnet-tools-ynetstat-lntup|grep3306# 或者ss-lntup|grepmysql三、MySQL启动失败常见案例与排查
3.1 目录权限问题
错误日志:[ERROR] Could not open file '/data/mysql/mysql3306/logs/error.log' for error logging: Permission denied
原因:data/logs 目录属主不是mysql:mysql。
解决:chown -R mysql:mysql /data/*
3.2 配置文件参数拼写或版本废弃
错误:[ERROR] unknown variable 'basedi=/usr/local/mysql'
解决:仔细检查my3306.cnf,修改正确拼写(如basedir)。
3.3 未正确指定配置文件
现象:MySQL 启动时使用了默认路径的配置(如/etc/my.cnf),导致参数不符。
排查:mysqld --verbose --help | grep defaults查看默认加载顺序。
解决:启动时务必带--defaults-file指定绝对路径。
3.4 端口被占用
错误:[ERROR] Do you already have another mysqld server running on port: 3306 ?
解决:修改端口或 kill 旧进程,多实例需确保每个实例端口不同。
3.5 二进制日志文件丢失
错误:[ERROR] Failed to open log (file '/data/mysql/mysql3306/logs/mysql-bin.000014', errno 2)
解决:编辑mysql-bin.index,删除缺失的那一行记录。
3.6 共享表空间大小不匹配
错误:The Auto-extending innodb_system data file './ibdata1' is of a different size ...
解决:若未初始化,修改配置文件中的innodb_data_file_path=ibdata1:12M:autoextend(默认12M),重新初始化。
启动失败三板斧排查口诀
- 看版本:确认
ldd --version、mysql --version。 - 看日志:
tail -100 /data/mysql/mysql3306/logs/error.log。 - 看权限:
ls -l /data/mysql/mysql3306/data是否属主正确。
四、连接MySQL与用户安全策略
4.1 本地与远程连接方式
# 本地socket连接mysql-S/data/mysql/mysql3306/mysql.sock4.2 初始化安全策略
--initialize-insecure:root 密码为空,需立即修改。--initialize:生成随机密码,在 error.log 中查找A temporary password is generated for root@localhost。
修改root密码:
ALTERUSER'root'@'localhost'IDENTIFIEDBY'YourStrongP@ssw0rd';或使用mysqladmin:
mysqladmin-uroot-p'oldpass'password'newpass'-S/data/mysql/mysql3306/mysql.sock4.3 删除匿名用户与多余账号
DELETEFROMmysql.userWHEREuser!='root';FLUSHPRIVILEGES;4.4 创建管理用户并授权
CREATEUSER'ergou'@'localhost'IDENTIFIEDBY'123456';GRANTALLPRIVILEGESON*.*TO'ergou'@'localhost'WITHGRANTOPTION;FLUSHPRIVILEGES;五、MySQL基础操作(DML/DDL/DQL/DCL)
SQL 语言按功能分为四大类,掌握它们是DBA和开发的基本功。
5.1 DDL(数据定义语言)
用于创建、修改、删除数据库对象(库、表、索引等)。
-- 创建数据库CREATEDATABASEIFNOTEXISTStestdbCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;-- 创建表CREATETABLEtestdb.users(idINTPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(50)NOTNULL,emailVARCHAR(100)UNIQUE,created_atDATETIMEDEFAULTCURRENT_TIMESTAMP)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;-- 修改表结构(添加列)ALTERTABLEtestdb.usersADDCOLUMNageTINYINT;-- 删除表DROPTABLEtestdb.users;5.2 DML(数据操纵语言)
增、删、改数据。
-- 插入INSERTINTOtestdb.users(username,email)VALUES('zhangsan','zhangsan@example.com');-- 更新UPDATEtestdb.usersSETage=28WHEREusername='zhangsan';-- 删除(务必带条件)DELETEFROMtestdb.usersWHEREid=1;5.3 DQL(数据查询语言)
最常用的SELECT查询。
-- 简单查询SELECT*FROMtestdb.usersWHEREage>20ORDERBYcreated_atDESC;-- 聚合查询SELECTCOUNT(*),AVG(age)FROMtestdb.users;-- 多表联查(JOIN)SELECTu.username,o.order_idFROMusers uJOINorders oONu.id=o.user_id;5.4 DCL(数据控制语言)
权限管理与事务控制(事务也常归为DCL)。
-- 授予权限GRANTSELECT,INSERTONtestdb.*TO'app_user'@'%';-- 回收权限REVOKEINSERTONtestdb.*FROM'app_user'@'%';-- 事务控制(begin/commit/rollback)STARTTRANSACTION;UPDATEaccountsSETbalance=balance-100WHEREuser_id=1;UPDATEaccountsSETbalance=balance+100WHEREuser_id=2;COMMIT;-- 或 ROLLBACK;六、MySQL 9.7 核心参数详解
| 参数 | 作用 | 建议值 |
|---|---|---|
innodb_buffer_pool_size | InnoDB 缓存数据和索引的内存池,性能最关键参数 | 物理内存的70%~80% |
innodb_log_file_size | 重做日志文件大小,影响崩溃恢复速度和写入性能 | 1G~4G(生产) |
innodb_flush_log_at_trx_commit | 1(最安全,每次提交刷盘)、2(每秒刷盘)、0(每秒刷盘,延迟) | 生产环境=1 |
binlog_format | 二进制日志格式:row(推荐)、statement、mixed | ROW |
gtid_mode | 开启全局事务标识,便于主从切换 | ON |
max_connections | 最大并发连接数 | 根据业务估算,一般 500~2000 |
wait_timeout | 非交互连接超时秒数,避免长连接堆积 | 60~300 |
binlog_expire_logs_seconds | binlog 保留时间(秒) | 604800(7天) |
long_query_time | 慢查询阈值(秒) | 0.5~2 |
log_queries_not_using_indexes | 记录未走索引的查询,便于优化 | ON |
修改参数后,需重启实例或动态调整(部分参数支持
SET GLOBAL)。
七、事务与索引深度解析
7.1 事务(Transaction)
事务特性(ACID):
- 原子性(A):事务中操作要么全部成功,要么全部失败。
- 一致性(C):事务前后数据库完整性约束不被破坏。
- 隔离性(I):并发事务互相隔离,MySQL 提供四种隔离级别:
READ UNCOMMITTED(读未提交)READ COMMITTED(读已提交,Oracle默认)REPEATABLE READ(可重复读,MySQL默认,解决幻读)SERIALIZABLE(串行化,性能最低)
- 持久性(D):事务提交后数据持久化到磁盘。
查看隔离级别:SELECT @@transaction_isolation;
设置隔离级别:SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
MVCC(多版本并发控制):MySQL 通过 undo log 实现非锁定读,提高并发性能。
7.2 索引(Index)
索引是加速查询的数据结构(B+树、Hash等),但会占用空间并影响写入性能。
常见索引类型:
- PRIMARY KEY:聚集索引,叶子节点存储完整行数据。
- UNIQUE KEY:唯一索引,不允许重复。
- INDEX(普通索引):辅助索引,叶子节点存储主键值(回表)。
- FULLTEXT:全文索引(用于文本搜索)。
- 复合索引:多列组合,遵循最左前缀原则。
索引优化建议:
- 在 WHERE、JOIN、ORDER BY 列上建索引。
- 区分度高的列优先(如身份证号优于性别)。
- 避免在索引列上使用函数或计算。
- 使用
EXPLAIN分析执行计划,关注type、key、rows。
查看索引:SHOW INDEX FROM table_name;
创建索引:CREATE INDEX idx_name ON table_name (col1, col2);
删除索引:DROP INDEX idx_name ON table_name;
八、总结与最佳实践
通过本教程,你已掌握:
✅ MySQL 9.7 二进制安装全流程(从下载到启动)
✅ 常见启动故障排查思路(权限、参数、端口、日志)
✅ 用户安全和连接方式
✅ SQL 四大分类(DDL/DML/DQL/DCL)实操
✅ 核心参数调优与事务/索引原理
生产环境部署建议:
- 数据目录与软件目录分离,便于迁移和扩容。
- 开启 binlog + GTID,为高可用(主从、MGR)做准备。
- 定期监控慢查询,并利用
pt-query-digest分析。 - 使用
mysql_secure_installation脚本加固安全。
MySQL 9.7 新特性亮点(简要):
- 更强大的 JSON 函数支持。
- 改进的 InnoDB 并行读取。
- 优化器对窗口函数和 CTE 的优化。
- 安全性增强(caching_sha2_password 默认)。
关键词:MySQL 9.7安装、MySQL二进制安装、MySQL 9.7配置、MySQL基础操作、DML DDL DQL DCL、MySQL事务索引、MySQL启动排错
如果觉得本文对你有帮助,欢迎收藏、转发,如有问题请在评论区留言,我会尽力解答!