【最新】MySQL9.7安装教程:图文详解(附MySQL安装包)

描述:最详细的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

bash 复制代码
[root@test ~]# ldd --version
ldd (GNU libc) 2.34   # 如果小于2.28,请升级系统或下载低版本MySQL

如果版本低于 2.28,启动会报错 FATAL: kernel too oldGLIBC_2.28 not found


二、二进制安装MySQL 9.7全流程

2.1 创建虚拟用户及目录

bash 复制代码
# 创建MySQL运行用户(不登录,无家目录)
useradd -s /sbin/nologin -M mysql

# 创建软件存放、安装、数据目录
mkdir -p /server/tools
mkdir -p /opt/mysql
mkdir -p /data/mysql/mysql3306/{data,logs}
cd /server/tools

2.2 上传并解压二进制包

bash 复制代码
# 若没有rz,先安装 lrzsz
yum install -y lrzsz
rz   # 选择下载好的 tar.xz 文件
若没有tar工具,先按照
yum install tar -y
# 解压(.xz 格式,用 xf 参数)
tar xf mysql-9.7.1-linux-glibc2.28-x86_64.tar.xz

2.3 移动软件并创建软链接

bash 复制代码
mv mysql-9.7.1-linux-glibc2.28-x86_64 /opt/mysql/mysql-9.7.1
ln -s /opt/mysql/mysql-9.7.1/ /usr/local/mysql

2.4 移除系统自带的 MariaDB 库(避免冲突)

bash 复制代码
rpm -e --nodeps mariadb-libs

2.5 编写实例配置文件(多实例标准化)

使用 vi /data/mysql/mysql3306/my3306.cnf,粘贴以下内容(已针对 MySQL 9.7 优化):

ini 复制代码
[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_daysbinlog_expire_logs_seconds 取代),本配置已兼容。

2.6 安装依赖包并修改目录权限

bash 复制代码
yum install -y libaio-devel numactl
chown -R mysql:mysql /data/*

2.7 初始化数据库(无密码,方便首次登录)

bash 复制代码
/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 添加环境变量

bash 复制代码
echo 'PATH="/usr/local/mysql/bin:$PATH"' >> /etc/profile
source /etc/profile

2.9 启动MySQL

bash 复制代码
mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &

2.10 验证启动

bash 复制代码
# 如没有netstat命令,先安装
yum install net-tools -y
netstat -lntup | grep 3306
# 或者
ss -lntup | grep mysql

三、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),重新初始化。


启动失败三板斧排查口诀

  1. 看版本 :确认 ldd --versionmysql --version
  2. 看日志tail -100 /data/mysql/mysql3306/logs/error.log
  3. 看权限ls -l /data/mysql/mysql3306/data 是否属主正确。

四、连接MySQL与用户安全策略

4.1 本地与远程连接方式

bash 复制代码
# 本地socket连接
mysql  -S /data/mysql/mysql3306/mysql.sock

4.2 初始化安全策略

  • --initialize-insecure:root 密码为空,需立即修改。
  • --initialize:生成随机密码,在 error.log 中查找 A temporary password is generated for root@localhost

修改root密码

sql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongP@ssw0rd';

或使用 mysqladmin

bash 复制代码
mysqladmin -uroot -p'oldpass' password 'newpass' -S /data/mysql/mysql3306/mysql.sock

4.3 删除匿名用户与多余账号

sql 复制代码
DELETE FROM mysql.user WHERE user != 'root';
FLUSH PRIVILEGES;

4.4 创建管理用户并授权

sql 复制代码
CREATE USER 'ergou'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'ergou'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

五、MySQL基础操作(DML/DDL/DQL/DCL)

SQL 语言按功能分为四大类,掌握它们是DBA和开发的基本功。

5.1 DDL(数据定义语言)

用于创建、修改、删除数据库对象(库、表、索引等)。

sql 复制代码
-- 创建数据库
CREATE DATABASE IF NOT EXISTS testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建表
CREATE TABLE testdb.users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 修改表结构(添加列)
ALTER TABLE testdb.users ADD COLUMN age TINYINT;

-- 删除表
DROP TABLE testdb.users;

5.2 DML(数据操纵语言)

增、删、改数据。

sql 复制代码
-- 插入
INSERT INTO testdb.users (username, email) VALUES ('zhangsan', 'zhangsan@example.com');

-- 更新
UPDATE testdb.users SET age = 28 WHERE username = 'zhangsan';

-- 删除(务必带条件)
DELETE FROM testdb.users WHERE id = 1;

5.3 DQL(数据查询语言)

最常用的 SELECT 查询。

sql 复制代码
-- 简单查询
SELECT * FROM testdb.users WHERE age > 20 ORDER BY created_at DESC;

-- 聚合查询
SELECT COUNT(*), AVG(age) FROM testdb.users;

-- 多表联查(JOIN)
SELECT u.username, o.order_id 
FROM users u 
JOIN orders o ON u.id = o.user_id;

5.4 DCL(数据控制语言)

权限管理与事务控制(事务也常归为DCL)。

sql 复制代码
-- 授予权限
GRANT SELECT, INSERT ON testdb.* TO 'app_user'@'%';

-- 回收权限
REVOKE INSERT ON testdb.* FROM 'app_user'@'%';

-- 事务控制(begin/commit/rollback)
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_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(推荐)、statementmixed 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:全文索引(用于文本搜索)。
  • 复合索引 :多列组合,遵循最左前缀原则

索引优化建议

  1. 在 WHERE、JOIN、ORDER BY 列上建索引。
  2. 区分度高的列优先(如身份证号优于性别)。
  3. 避免在索引列上使用函数或计算。
  4. 使用 EXPLAIN 分析执行计划,关注 typekeyrows

查看索引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启动排错

如果觉得本文对你有帮助,欢迎收藏、转发,如有问题请在评论区留言,我会尽力解答!

相关推荐
IT乐手1 小时前
Android 写本地日志工具类
android·java
非典型Android程序员2 小时前
Launcher学习总结
android
DB哥讲数据库2 小时前
MySQL 8.4 安装教程:超详细图文讲解(附mysql安装包)
linux·数据库·mysql·centos
Coffeeee3 小时前
Android功耗优化,哪些代码会让你的机子发热又耗电
android·架构·kotlin
wefg13 小时前
【MySQL】MySQL C API 访问 MySQL
数据库·mysql
L1624764 小时前
Zabbix 7.0 LTS 完整部署与运维手册(AlmaLinux 9 + MySQL 8.0 + Nginx)
运维·mysql·zabbix
xianrenli384 小时前
Android14自动时区更新
android·学习·framework·aosp14·自动时区
心中有国也有家4 小时前
AtomGit Flutter 鸿蒙客户端:零外部资源的应用打包策略
android·javascript·flutter·华为·harmonyos
恋猫de小郭4 小时前
Fluter 共享内存多线程正在落地,IsolateGroupBound 来了
android·前端·flutter