1. 首页 > MySQL教程 > 正文

数据库教程FGMT73:MySQL数据库工程师入门培训实战教程(从MySQL5.7 到 MySQL8.0)

数据库教程FGMT73:MySQL数据库工程师入门培训实战教程(从MySQL5.7 到 MySQL8.0)

## 一、前言与内容大纲

**风哥教程本文**面向想系统入门MySQL数据库运维(DBA)方向的学习者。很多新手在入门时容易陷入”会敲几个SQL、会装个MySQL就以为会运维”的误区,缺少对版本演进、体系架构、存储引擎、备份恢复、主从复制、读写分离这些核心知识点的系统认知。因此,风哥针对这类需求设计了这一套从零到一、覆盖 MySQL 5.7 与 8.0 的完整入门方案,并在实战环节同步融入 8.4 与 9.7 新版本的差异对照,帮助学习者建立”看得懂架构、装得了环境、写得出SQL、做得了备份、搭得起复制”的基本能力。

整篇内容大纲如下:

1. **前言与内容大纲**:说明受众、目标与全文结构(即本章)。
2. **理论篇**:MySQL发展历程与版本演进、与Oracle/SQLServer的差异、体系架构、物理与逻辑存储结构、数据库与实例关系、进程访问、InnoDB存储引擎、事务隔离级别、备份恢复方案选型、主从复制与GTID原理、MyCAT读写分离原理。
3. **实战篇**:学习环境规划(主机 fgedu-net-cn1、fgedu-net-cn2);Linux快速安装MySQL 8.0 与 5.7;8.4/9.7 新版本安装差异;建库建表、增删改查、用户权限、密码修改、启停、参数调整、监控、日志查看、卸载;mysqldump/xtrabackup备份恢复;基于GTID的主从复制实战;MyCAT读写分离实战。
4. **总结**:梳理核心要点与后续进阶方向。

全篇按 5% 前言、30% 理论、60% 实战、5% 总结的比例展开,配置参数统一按 64G 内存、8 CPU 的服务器规格设计。

## 二、理论篇

### 2.1 MySQL发展历程与版本演进

MySQL 自诞生以来经历了清晰的版本脉络。5.x 时代是 MySQL 走向成熟并被大规模部署的阶段,其中 5.6 引入了在线DDL等能力,5.7 则在性能、JSON支持、优化器上做了大量增强,成为生产环境沿用时间极长的稳定版本。8.0 是一次大版本架构更新,数据字典改为统一的事务字典、默认字符集升级为 utf8mb4、新增窗口函数与公共表表达式、引入了 caching_sha2_password 默认认证插件,并强化了 InnoDB 与性能库。其后 8.0 持续小版本迭代,8.4 作为 8.0 系列的长期支持收敛版本,进一步整理废弃特性、明确升级路径;9.7 则属于 8.x 的延续创新版本,在并行复制、字符集、可观测性等方面持续增强。理解这一演进脉络,有助于在选择版本时判断稳定性、特性与升级成本。

### 2.2 MySQL、Oracle、SQLServer的差异

三者同属主流关系型数据库,但定位不同。Oracle 功能庞大、适合高端企业级与核心交易系统,管理复杂度与授权成本高;SQLServer 与 Windows 生态绑定紧密,图形化管理友好,常见于政企与中小规模业务;MySQL 开源免费、轻量灵活、生态成熟,是互联网与Web业务的主流选择。语法上三者存在差异,比如分页写法 Oracle 用 rownum/offset,SQLServer 用 top/offset-fetch,MySQL 用 limit;字符串拼接、序列、日期函数也各不相同。作为入门者,先在一套上打牢根基,再迁移到其他产品会更从容。

### 2.3 MySQL体系架构

MySQL 逻辑上分为三层。第一层是连接层,负责客户端连接管理、认证与权限校验;第二层是服务层,包括 SQL 接口、解析器、优化器与缓存(8.0 已移除查询缓存);第三层是存储引擎层,负责数据的存储与读取,InnoDB 为默认引擎。一条 SQL 的执行路径是:连接建立后,经解析器生成语法树,优化器基于统计信息生成执行计划,再交由存储引擎读写数据,最后返回结果集。理解这条路径,是后续做慢查询分析、参数调优的基础。

### 2.4 物理存储与逻辑存储结构

物理存储层面,MySQL 的数据目录(datadir)下存放系统库、表空间文件(ibdata1)、独立表空间(.ibd)、重做日志(ib_logfile*)、binlog、error log 等。逻辑层面,MySQL 采用”实例+数据库+表”的层级:一个实例可管理多个数据库,库内由表、视图、索引、存储过程等对象组成。8.0 之后数据字典元数据统一存储于 InnoDB 中,用户库默认使用独立表空间(innodb_file_per_table=ON)。

### 2.5 数据库与实例的关系、进程访问

“数据库”是逻辑上的一组数据对象集合,”实例”是运行中的 MySQL 进程与内存结构。客户端通过 TCP 连接到实例的监听端口(默认3306),实例内部由多线程提供服务,如主线程、刷盘线程、后台清理线程等,并发请求通过线程池/连接池进行调度。DBA 日常的启停、连接管理、资源监控,本质上都是在管理”实例”。

### 2.6 InnoDB存储引擎

InnoDB 是 MySQL 默认且最常用的存储引擎,支持事务、行级锁、外键、崩溃恢复与 MVCC。其核心存储结构为 B+ 树聚簇索引,表数据即按主键排序的聚簇索引;辅助索引叶子节点存储主键值,因此回表与覆盖索引概念至关重要。内存中最重要的结构是缓冲池(innodb_buffer_pool_size),数据读写先经过缓冲池,由后台线程异步刷盘,从而实现高性能与持久化的平衡。

### 2.7 事务与隔离级别

InnoDB 通过 redo log 保证持久性、undo log 支持回滚与 MVCC、锁机制保证并发一致性。标准隔离级别有读未提交、读已提交、可重复读、可串行化,MySQL 默认使用可重复读,并借助间隙锁解决部分幻读问题。事务隔离级别直接决定并发场景下的一致性与性能表现,生产环境一般使用读已提交或可重复读,并配合恰当的索引与事务粒度。

### 2.8 备份恢复方案选型

备份按粒度分全量、增量与差异备份,按方式分逻辑备份与物理备份。逻辑备份工具如 mysqldump、mysqlpump 生成SQL语句,可移植性好但速度慢;物理备份如 xtrabackup、mysqlbackup 直接复制数据文件,速度快、适合大库。方案选型需综合数据量、恢复时间目标(RTO)、数据丢失容忍度(RPO)与运维成本,且备份必须定期做恢复演练验证,否则备份形同虚设。

### 2.9 主从复制与GTID原理

主从复制的核心是主库将变更写入 binlog,从库通过 I/O 线程拉取 binlog 写入中继日志(relay log),再由 SQL 线程重放实现数据同步。传统复制基于 binlog 文件名+位置(file+pos),配置繁琐且主从切换易出错;GTID(全局事务标识)为每个事务分配全局唯一ID,复制自动定位,极大简化搭建与故障切换。复制拓扑有主从、级联、双主、一主多从等,主从常用于读写分离、备份扩展与高可用。

### 2.10 MyCAT读写分离原理

MyCAT 是基于 Java 的分布式数据库中间件,对应用表现为一个 MySQL 实例。应用将请求发给 MyCAT,MyCAT 根据配置的 schema.xml、rule.xml 等把 SQL 路由到后端真实MySQL节点,实现读写分离(写走主库、读走从库)与分库分表。读写分离能分担主库读压力,但对一致性敏感的业务需谨慎,存在主从延迟时可能读到过期数据。

## 三、实战篇

### 3.1 学习环境规划

本套风哥教程规划两台主机:主库节点 fgedu-net-cn1,从库节点 fgedu-net-cn2,均为 64G 内存、8 CPU 规格,操作系统为 CentOS/RHEL 7.6(64位)。所有数据库软件统一安装在 /fgedudb 目录下,运行用户统一使用 fgedudb,数据库名/实例名也统一为 fgedudb。先在两台主机上创建用户与目录:

“`
useradd fgedudb
mkdir -p /fgedudb/{mysql,data,backup,logs,soft}
chown -R fgedudb:fgedudb /fgedudb
“`

### 3.2 Linux快速安装MySQL 8.0(fgedu-net-cn1)

先做系统级配置:关闭防火墙与SELinux、设置主机名、上传安装包到 /fgedudb/soft。以二进制包安装为例:

“`
hostnamectl set-hostname fgedu-net-cn1
cd /fgedudb/soft
tar -xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.32-linux-glibc2.12-x86_64 /fgedudb/mysql
chown -R fgedudb:fgedudb /fgedudb/mysql
“`

编写配置文件 /fgedudb/mysql/my.cnf,按 64G 内存规格设置关键参数:

“`
[mysqld]
user=fgedudb
basedir=/fgedudb/mysql
datadir=/fgedudb/data
socket=/fgedudb/mysql/mysql.sock
pid-file=/fgedudb/mysql/mysqld.pid
port=3306
server-id=1
innodb_buffer_pool_size=48G
innodb_log_file_size=2G
innodb_flush_log_at_trx_commit=1
sync_binlog=1
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
log-bin=/fgedudb/data/binlog
gtid_mode=ON
enforce_gtid_consistency=ON
“`

初始化数据目录并启动:

“`
su – fgedudb -c “/fgedudb/mysql/bin/mysqld –defaults-file=/fgedudb/mysql/my.cnf –initialize-insecure –user=fgedudb”
su – fgedudb -c “/fgedudb/mysql/bin/mysqld –defaults-file=/fgedudb/mysql/my.cnf &”
/fgedudb/mysql/bin/mysql -uroot –socket=/fgedudb/mysql/mysql.sock
“`

### 3.3 Linux快速安装MySQL 5.7

5.7 的安装流程与8.0基本一致,区别在于初始化命令。5.7 使用 –initialize 时会生成临时随机密码,记录在错误日志中;也可用 –initialize-insecure 生成空密码 root:

“`
su – fgedudb -c “/fgedudb/mysql/bin/mysqld –defaults-file=/fgedudb/mysql/my.cnf –initialize-insecure –user=fgedudb”
su – fgedudb -c “/fgedudb/mysql/bin/mysqld –defaults-file=/fgedudb/mysql/my.cnf &”
“`

5.7 的默认认证插件为 mysql_native_password,默认字符集为 latin1,建议在建库时显式指定 utf8mb4。若采用 systemd 托管,可创建 /etc/systemd/system/mysqld.service 并设置开机自启。

### 3.4 MySQL 8.4 与 9.7 安装差异

8.4 与 9.7 延续 8.0 的安装模型,主要差异在于:9.7 进一步收敛旧参数与废弃特性,部分 8.0 的参数名或默认值发生调整(如更严格的 SQL 模式、默认开启部分安全策略);初始化后必须显式创建 root 账号认证并设置密码;caching_sha2_password 为默认认证插件,部分旧客户端需先升级驱动。安装路径与参数模板仍沿用 /fgedudb 目录与 64G 规格,此处不再重复命令,重点提醒在升级前使用 mysqldump 做全量备份,并利用 mysqlsh 的 util.checkForServerUpgrade 做预检。

### 3.5 基础操作实战

登录后创建业务库 fgedudb,并建表、插入、查询:

“`
CREATE DATABASE fgedudb DEFAULT CHARACTER SET utf8mb4;
USE fgedudb;
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
salary DECIMAL(10,2),
hiredate DATE
) ENGINE=InnoDB;
INSERT INTO emp(name,salary,hiredate) VALUES(‘zhangsan’,8000,’2024-01-01′);
INSERT INTO emp(name,salary,hiredate) VALUES(‘lisi’,9500,’2024-06-15′);
SELECT * FROM emp WHERE salary>8500 ORDER BY salary DESC;
“`

修改root密码并创建应用账号:

“`
— 8.0+
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Fgedu@2026’;
CREATE USER ‘fgedu’@’%’ IDENTIFIED BY ‘Fgedu@123456’;
GRANT ALL PRIVILEGES ON fgedudb.* TO ‘fgedu’@’%’;
FLUSH PRIVILEGES;
— 5.7
SET PASSWORD FOR ‘root’@’localhost’=PASSWORD(‘Fgedu@2026’);
“`

查看参数、慢查询与连接监控:

“`
SHOW VARIABLES LIKE ‘innodb_buffer_pool_size’;
SHOW VARIABLES LIKE ‘character_set_server’;
SHOW STATUS LIKE ‘Threads_connected’;
SHOW PROCESSLIST;
SHOW GLOBAL STATUS LIKE ‘Slow_queries’;
“`

错误日志与binlog查看:

“`
tail -100 /fgedudb/logs/mysqld.err
/fgedudb/mysql/bin/mysqlbinlog –no-defaults /fgedudb/data/binlog.000001
“`

优雅启停与卸载:

“`
su – fgedudb -c “/fgedudb/mysql/bin/mysqladmin -uroot -p shutdown”
# 卸载
systemctl stop mysqld
rm -rf /fgedudb/mysql /fgedudb/data /fgedudb/logs
userdel -r fgedudb
“`

### 3.6 备份恢复实战

逻辑备份 mysqldump 适合中小库与结构备份:

“`
/fgedudb/mysql/bin/mysqldump -uroot -p -h127.0.0.1 –single-transaction –master-data=2 fgedudb > /fgedudb/backup/fgedudb_full.sql
/fgedudb/mysql/bin/mysql -uroot -p -h127.0.0.1 fgedudb < /fgedudb/backup/fgedudb_full.sql
“`

物理备份 xtrabackup 适合大库,全量备份并恢复:

“`
xtrabackup –defaults-file=/fgedudb/mysql/my.cnf –backup –target-dir=/fgedudb/backup/full
xtrabackup –prepare –target-dir=/fgedudb/backup/full
xtrabackup –copy-back –target-dir=/fgedudb/backup/full
chown -R fgedudb:fgedudb /fgedudb/data
“`

备份完成后务必做恢复演练:把备份恢复到一台临时实例,比对表结构与行数,确认RTO/RPO满足要求。

### 3.7 基于GTID的主从复制实战

主库为 fgedu-net-cn1,从库为 fgedu-net-cn2。主库 my.cnf 已开启 binlog、server-id=1、gtid_mode=ON。从库配置:

“`
[mysqld]
server-id=2
gtid_mode=ON
enforce_gtid_consistency=ON
relay-log=/fgedudb/data/relaylog
read_only=ON
“`

在主库创建复制账号:

“`
CREATE USER ‘repl’@’%’ IDENTIFIED BY ‘Fgedu@Repl’;
GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’;
“`

从库用 xtrabackup 全量恢复主库数据后,配置并启动复制:

“`
CHANGE MASTER TO
MASTER_HOST=’fgedu-net-cn1′,
MASTER_USER=’repl’,
MASTER_PASSWORD=’Fgedu@Repl’,
MASTER_AUTO_POSITION=1;
START SLAVE;
SHOW SLAVE STATUS\G
“`

检查 Slave_IO_Running 与 Slave_SQL_Running 均为 Yes,Seconds_Behind_Master 为 0。在主库插入数据验证同步:

“`
— 主库
INSERT INTO fgedudb.emp(name,salary) VALUES(‘wangwu’,12000,’2026-10-22′);
— 从库
SELECT * FROM fgedudb.emp WHERE name=’wangwu’;
“`

### 3.8 MyCAT读写分离实战

在业务侧部署 MyCAT,配置 schema.xml 把写请求路由到主库 fgedu-net-cn1、读请求路由到从库 fgedu-net-cn2:

“`
<dataHost name=”host1″ maxCon=”100″ writeType=”0″ balance=”1″>
<writeHost host=”master” url=”fgedu-net-cn1:3306″ user=”mycat” password=”Mycat@123″>
<readHost host=”slave” url=”fgedu-net-cn2:3306″ user=”mycat” password=”Mycat@123″/>
</writeHost>
</dataHost>
“`

应用通过 MyCAT 连接(端口8066)执行同样的增删改查,MyCAT 自动完成读写分离与结果返回,可在后端主机上通过 general log 或 processlist 确认读写流量被正确分流。

## 四、风哥针对本文总结

**风哥针对本文总结**:本套风哥教程以 MySQL 5.7 到 8.0 为主线,同步对照 8.4、9.7 新版本,帮助入门者建立从”理解架构”到”动手落地”的完整闭环。理论层面,掌握版本演进、体系架构、InnoDB、事务隔离、备份方案与复制原理,是成为合格 DBA 的地基;实战层面,在 64G/8CPU 规格的两台主机(fgedu-net-cn1、fgedu-net-cn2)上,沿 /fgedudb 目录与 fgedudb 用户完成了安装、初始化、建库建表、权限、启停、监控、备份恢复、GTID主从复制与 MyCAT 读写分离的整套操作。学习本套风哥教程后,建议在此基础上继续深挖索引优化、执行计划分析、高可用(MGR/Proxy)、容器化部署与分库分表,逐步走向高级工程师方向。风哥也鼓励你动手重跑每一个命令并多做破坏性演练,只有亲手做过的备份与恢复,才是真正属于你的能力。

—

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息