数据库教程FGMT27‑MySQL数据库基础知识与体系架构
## 前言
本套风哥教程面向数据库工程师、DBA、IT运维人员、云计算工程师、软件开发人员,完整覆盖MySQL基础知识、体系架构、存储引擎、高可用集群架构,同时配套大量可直接复现的实操命令,适配MySQL5.7、MySQL8.0、MySQL8.4、MySQL9.7主流版本。
风哥教程本文主要分为理论原理与实战操作两大模块。理论部分讲解MySQL发展历史、版本差异、物理与逻辑存储结构、内存结构、存储引擎、各类高可用架构原理;实战部分基于两台主机`fgedu‑net‑cn1`、`fgedu‑net‑cn2`,硬件规格**64G内存,8CPU**,数据根目录统一使用`/fgedudb`,数据库实例名、库名统一为`fgedudb`,业务用户名统一使用`fgedu`,完整演示安装部署、参数调优、SQL开发、备份恢复、主从复制、MHA、MGR、InnoDB Cluster集群部署等全流程。
风哥教程本文学习目标:能够理解MySQL底层运行原理,读懂核心配置参数,独立完成数据库部署、日常运维、故障恢复、高可用集群搭建,具备生产环境MySQL基础运维能力。
>
> 学习提示:所有实操命令建议在测试环境执行,生产执行前做好备份校验。
> 网上搜索风哥教程可以学习全套数据库教程
## 目录
1. MySQL数据库基础知识
1.1 MySQL介绍与发展历程
1.2 MySQL社区版与企业版区别
1.3 MySQL企业版核心功能
1.4 MySQL主要分支版本
1.5 MySQL、Oracle、SQL Server横向对比
2. MySQL数据库体系架构
2.1 MySQL整体体系架构分层
2.2 MySQL物理存储结构
2.3 MySQL逻辑存储结构
2.4 数据库与实例的关系
2.5 MySQL进程模型
2.6 MySQL内存结构(64G/8CPU硬件规格参数详解)
2.7 MySQL存储引擎分类
2.8 InnoDB存储引擎深度解析
3. MySQL数据库高可用与集群架构
3.1 MySQL高可用常见类型
3.2 主从复制架构、拓扑与业务场景
3.3 MMM架构原理
3.4 MHA架构原理
3.5 Orchestrator、Xenon架构介绍
3.6 不同业务规模高可用架构选型(初创、小型、中型、大型)
3.7 InnoDB Cluster集群架构原理
4. 实战操作
4.1 Linux环境MySQL8.4部署(主机fgedu‑net‑cn1)
4.2 my.cnf核心配置文件编写(64G内存8CPU)
4.3 数据库基础SQL实操,库、表、数据类型、CRUD
4.4 用户权限管理实操
4.5 逻辑备份恢复mysqldump/mysqlpump实操
4.6 物理备份XtraBackup实操
4.7 GTID主从复制集群搭建(fgedu‑net‑cn1为主,fgedu‑net‑cn2为从)
4.8 MGR组复制集群部署实操
4.9 InnoDB Cluster集群部署实操
5. 风哥针对本文总结
## 1 MySQL数据库基础知识
### 1.1 MySQL介绍与发展历程
MySQL是开源关系型数据库管理系统,最初由瑞典MySQL AB公司开发,先后经历Sun公司收购、Oracle公司收购,是Web业务、互联网业务最广泛使用的开源数据库。发展历程大致分为几个阶段:早期4.x版本奠定基础,5.x大规模普及,5.7成为企业长期稳定版本;8.0版本重构数据字典,支持原子DDL,增强InnoDB能力;8.4为当前长期支持LTS版本,企业生产逐步迁移至8.4 LTS版本。
关系数据库核心特征为使用二维表格组织结构化数据,支持事务ACID,支持SQL标准,支持索引、约束,适合业务系统结构化业务数据存储。
>
> 风哥 itpux‑com
### 1.2 MySQL社区版和企业版的区别
MySQL采用双授权模式,社区版Community Edition为GPL开源协议,可免费使用;企业版Enterprise Edition为商业授权,需要购买许可授权。
| 对比项 | 社区版 | 企业版 |
| — | — | — |
| 授权协议 | GPL开源,可免费使用,修改分发受协议约束 | 商业闭源许可,付费购买授权 |
| 基础SQL/InnoDB引擎 | 完整支持 | 完整支持 |
| 官方技术支持 | 无官方技术支持,社区论坛交流 | 7*24官方技术支持,BUG修复补丁优先下发 |
| 企业工具 | 无MySQL Enterprise Backup、监控工具 | 包含企业备份、审计、防火墙、监控工具 |
| 高级特性 | 部分高级特性缺失 | 透明数据加密TDE、审计日志、线程池、内存缓存高级优化等 |
| 适用场景 | 测试环境、中小企业非核心业务 | 生产核心业务,需要官方保障的业务系统 |
### 1.3 MySQL企业版的功能介绍
1. **MySQL Enterprise Backup**:官方物理热备份工具,支持全量、增量、压缩备份,支持时间点恢复,在线备份不阻塞业务读写。
2. **透明数据加密TDE**:支持InnoDB表空间加密,磁盘上数据文件密文存储,防止磁盘泄露导致数据泄露。
3. **审计日志Audit Log**:完整记录数据库登录、DDL、DML操作,满足等保、合规审计需求。
4. **线程池Thread Pool**:高并发大量短连接场景,降低线程上下文切换开销,提升高并发稳定性。
5. **企业监控套件**:MySQL Enterprise Monitor,实例监控、告警、SQL分析、性能报告。
6. **防火墙**:数据库防火墙,拦截非法SQL语句,防止SQL注入攻击。
### 1.4 MySQL分支版本的发展
Oracle收购MySQL之后,社区开发出多个分支,最主流为MariaDB,Percona Server。
1. **MariaDB**:完全兼容MySQL语法,社区主导开发,新增部分存储引擎,很多Linux发行版默认内置MariaDB,API协议和MySQL高度兼容,但8版本之后出现部分差异性。
2. **Percona Server**:基于MySQL源码增强版本,Percona公司维护,增加性能监控、XtraBackup物理备份工具,运维诊断能力增强,完全兼容MySQL。
3. **其他分支**:国内部分数据库基于MySQL源码二次开发,适配信创硬件与国产化操作系统。
>
> 风哥教程 113257174
### 1.5 MySQL、Oracle、SQL Server的区别
| 维度 | MySQL | Oracle | SQL Server |
| — | — | — | — |
| 授权模式 | 社区开源+商业企业版 | 全商业付费授权 | 商业授权,Windows生态绑定 |
| 运行平台 | Linux、Windows、国产操作系统,跨平台能力强 | Linux为主,Windows支持,小型机支持 | 主要Windows平台,Linux支持有限 |
| 存储引擎架构 | 插件式存储引擎,InnoDB为默认引擎 | 集成式存储引擎,无插件架构 | 单一存储引擎 |
| 事务能力 | InnoDB完整ACID,支持行锁 | 强大事务,高可用、RMAN备份,容灾能力强 | 完整事务,Windows生态深度集成 |
| 适用业务 | 互联网、Web业务,中小型业务,也可支撑大型分布式业务 | 金融电信核心大型业务,高可靠核心交易 | 微软生态企业业务,.NET业务系统 |
## 2 MySQL数据库体系架构
### 2.1 MySQL整体体系架构分层
MySQL架构分为四层:连接层、SQL服务层、存储引擎层、文件系统层。
1. **连接层**:处理客户端TCP连接、Socket本地连接,完成账号密码身份认证、连接线程管理。
2. **SQL服务层**:接收SQL,语法解析、语义检查、查询优化器生成执行计划,权限校验,查询缓存(8.0已移除查询缓存),调用存储引擎接口。
3. **存储引擎层**:插件式架构,不同存储引擎实现不同数据读写逻辑,InnoDB为默认存储引擎。
4. **文件系统层**:磁盘持久化,数据文件、redo log、undo log、binlog、错误日志、慢查询日志,完成磁盘IO读写。
一条SELECT语句完整执行流程:客户端建立连接 → 连接层认证账号 → SQL服务层语法解析、优化器生成执行计划 → 调用InnoDB存储引擎接口 → InnoDB访问内存缓冲池,未命中则读取磁盘数据页 → 返回结果集逐层向上返回给客户端。
>
> 网上搜索风哥教程可以学习全套数据库教程
### 2.2 MySQL物理存储结构
物理存储指磁盘上真实存在的各类文件,数据根目录`/fgedudb`,实例fgedudb。
1. **ibdata1系统表空间**:共享表空间,存储系统元数据,5.7版本,8.0系统表空间主要存放数据字典。
2. **.ibd独立表空间文件**:开启`innodb_file_per_table`之后,每张InnoDB表独立一个ibd文件,存放表的数据页、索引页。
3. **redo log重做日志**:ib_logfile0、ib_logfile1,崩溃恢复核心,事务提交先写redo log,后台刷数据页到磁盘。
4. **undo log回滚日志**:8.0版本undo tablespace独立undo表空间,保存数据修改前镜像,实现事务回滚、MVCC多版本读。
5. **binlog二进制日志**:记录DDL、DML变更,用于主从复制、时间点数据恢复。
6. **错误日志error.log**:实例启动关闭、告警、报错全部记录,排错首要查看日志。
7. **慢查询日志slow.log**:记录执行时间超过阈值的SQL,SQL性能分析。
8. **my.cnf配置文件**:数据库启动读取的参数配置文件。
### 2.3 MySQL逻辑存储结构
InnoDB逻辑层级从上至下:数据库(Schema) → 表 → 行(Row) → 页(Page,默认16KB) → 区(Extent,1MB,连续64个page) → 段(Segment) → 表空间Tablespace。
1. **页Page**:InnoDB最小IO读写单元,默认16KB,存放多行记录,包含页头、行数据、页尾校验信息。
2. **区Extent**:64个连续页,大小1MB,表空间分配存储空间的单位。
3. **段Segment**:分为数据段、索引段、回滚段,一个段由若干区组成。
4. **表空间Tablespace**:逻辑最高单元,分为共享系统表空间、独立表空间、通用表空间。
### 2.4 MySQL数据库与实例的关系
**实例(Instance)**:内存结构+后台进程/线程,运行在内存中,对外提供数据库服务;一台服务器可以运行多个MySQL实例,不同实例监听不同端口,独立内存,独立数据目录。
**数据库(Schema)**:磁盘上的逻辑集合,多张表、视图、存储过程的集合。
>
> 风哥数据库教程 itpux‑com
实例启动,加载磁盘上数据库文件,分配内存,对外提供SQL服务;实例停止,内存释放,磁盘数据库文件仍然保留。主机`fgedu‑net‑cn1`实例名为`fgedudb`,端口3306,数据目录`/fgedudb/fgedudb`。
### 2.5 MySQL进程访问
MySQL8采用多线程模型,mysqld主进程内部拆分大量线程:
1. **主线程**:监听客户端连接,接收TCP连接请求。
2. **用户工作线程**:处理客户端SQL请求,每个连接对应一个工作线程(不开启线程池前提下)。
3. **IO线程**:redo log刷盘线程、page cleaner刷新脏页线程,读取磁盘数据页。
4. **purge线程**:清理undo log旧版本数据,回收多版本读旧行。
5. **page cleaner线程**:把缓冲池内的脏数据页刷新写入磁盘ibd文件。
查看系统进程命令:
“`
ps -ef |grep mysqld
“`
### 2.6 MySQL内存结构(硬件:64G内存,8CPU)
MySQL内存分为全局内存和会话级内存。全局内存实例启动分配;会话内存每个客户端连接独立分配,连接销毁释放内存。
**全局内存(64G主机配置)**
1. `innodb_buffer_pool_size`:InnoDB缓冲池,缓存数据页、索引页。64G服务器推荐设置**40G**,占物理内存60‑70%;`innodb_buffer_pool_instances=8`,CPU为8核,缓冲池实例数量匹配CPU核数,降低锁竞争。
2. `innodb_log_buffer_size` redo日志缓冲,推荐256M,事务提交把log buffer写入redo log磁盘文件。
3. `key_buffer_size` MyISAM引擎索引缓冲,设置256M,MyISAM已经不推荐生产使用。
**会话内存(每个连接独立分配)**
`sort_buffer_size`、`join_buffer_size`、`read_buffer_size`、`read_rnd_buffer_size`,这部分参数不要设置过大,大量并发连接会造成内存暴涨。64G主机,sort_buffer_size设置4M,join_buffer_size设置4M。
>
> 风哥教程 113257174
### 2.7 MySQL存储引擎分类
存储引擎是MySQL读写数据的插件,同实例不同表可以使用不同存储引擎。执行`show engines;`查看全部存储引擎。
1. **InnoDB(默认)**:完整支持事务ACID,行级锁,MVCC,外键约束,崩溃安全恢复,生产环境标准选择。
2. **MyISAM**:不支持事务,只有表锁,崩溃不安全,查询速度快,已经不推荐业务使用。
3. **MEMORY**:全部数据存放内存,磁盘只保留表结构,重启数据丢失,适合临时中间计算表。
4. **Archive**:高压缩归档存储,只支持insert、select,不支持update delete,适合日志归档数据。
### 2.8 InnoDB存储引擎深度解析
InnoDB核心四大特性:事务ACID、MVCC多版本并发控制、行锁、崩溃安全恢复。
1. **MVCC多版本读**:undo log保存数据历史镜像,实现快照读,不加锁读取数据,读写互不阻塞。select普通快照读不会加行锁;update delete会加行锁。
2. **redo log WAL预写日志**:事务提交,优先写redo log磁盘,内存脏页后台慢慢刷盘,大幅提升提交性能,实例崩溃依靠redo log做崩溃恢复。
3. **锁机制**:行锁针对索引生效,如果没有索引,行锁退化为表锁;分为共享S锁、排他X锁;意向锁解决表锁行锁冲突检测。
4. **事务隔离级别**:READ‑UNCOMMITTED、READ‑COMMITTED、REPEATABLE‑READ(MySQL InnoDB默认)、SERIALIZABLE。生产环境推荐READ‑COMMITTED隔离级别。
>
> 网上搜索风哥教程可以学习全套数据库教程
## 3 MySQL数据库高可用与集群架构
### 3.1 MySQL高可用类型
MySQL高可用目标:实例故障尽可能业务不中断,分为:
1. **主从复制类高可用**:异步复制、半同步复制、GTID复制,一主多从。
2. **故障转移管理方案**:MMM、MHA,基于原生主从复制增加故障检测、自动主节点切换。
3. **组复制集群**:MGR,基于Paxos协议,多节点一致性复制。
4. **完整管理集群**:InnoDB Cluster,MGR+MySQL Shell+Router完整运维套件。
5. **分布式中间件分片集群**:ShardingSphere等中间件做分库分表,解决数据量水平扩展。
### 3.2 MySQL主从复制架构与常用拓扑结构
主库(Source)执行DML/DDL,写入binlog二进制日志;从库(Replica)IO线程拉取binlog,保存本地relay‑log中继日志,SQL线程重放中继日志,实现数据同步。
拓扑:一主一从、一主多从、链式复制(A→B→C)、环形复制。
复制模式:异步复制、半同步复制(rpl_semi_sync_master),GTID全局事务ID复制,推荐生产使用GTID模式,切换主库不需要记录binlog文件名与position。
业务场景:读写分离(读压力分摊多个从库);数据备份(从库执行备份,不影响主库性能);异地灾备;故障切换容灾。
### 3.3 MMM架构介绍
MMM(Master‑Master Replication Manager),双主互写架构,管理多主节点,管理虚拟IP,故障切换。缺点:数据冲突风险高,对写并发业务不友好,现在已经逐步淘汰,新项目不再推荐MMM。
### 3.4 MHA架构介绍
MHA(Master High Availability),基于原生MySQL主从复制,分为Manager管理节点与数据库节点;Manager监控主库状态,主库故障,自动选最优从库提升为新主库,其他从库自动向新主库做同步,支持虚拟IP漂移。
优点:基于原生复制,不需要修改MySQL内核,支持MySQL5.7/8.0;缺点:Manager存在单点,半同步不能完全保证零数据丢失,需要业务适配。
### 3.5 Orchestrator / Xenon架构
Orchestrator:开源复制拓扑管理工具,基于GTID复制,Web界面,自动故障检测、故障选主,管理主从拓扑;Xenon是国内开源高可用组件,类似MHA,实现故障自动切换。
>
> 风哥数据库教程 itpux‑com
### 3.6 不同规模业务架构选型
1. **初创公司架构**:一主一从,手动切换,无自动故障转移,业务量小,优先保证数据,故障人工介入。
2. **小型业务架构**:MHA架构,一主两从,自动故障转移,适合中小业务,故障自动切换。
3. **中型业务架构**:MGR单主三节点,InnoDB Cluster,自动选主,数据一致性强。
4. **大型业务架构**:InnoDB Cluster集群 + 读写分离中间件,多机房异地从库灾备,完整监控告警体系。
### 3.7 MySQL InnoDB Cluster集群架构
InnoDB Cluster官方完整高可用套件,三部分组成:
1. **MGR组复制数据库节点**:底层数据复制,保证多节点数据一致性。
2. **MySQL Shell**:集群管理命令行工具,创建集群、增加删除实例、故障修复。
3. **MySQL Router**:中间件路由层,应用连接Router,自动读写分离,故障自动屏蔽故障节点。
优势:官方原生套件,完整生命周期管理,适合8.0及以上版本生产环境。
## 4 实战操作
>
> 实战环境说明
> 主机1:`fgedu‑net‑cn1` (主节点,8CPU,64G内存)
> 主机2:`fgedu‑net‑cn2`(从节点,8CPU,64G内存)
> 实例名:`fgedudb`
> 数据目录:`/fgedudb/fgedudb`
> 端口:3306
> 业务库名:`fgedudb`,业务账号`fgedu`
### 4.1 Linux环境MySQL8.4部署(fgedu‑net‑cn1)
“`
# 创建数据目录
mkdir -p /fgedudb/fgedudb
chown -R mysql:mysql /fgedudb
chmod 700 /fgedudb/fgedudb
# 初始化实例(无密码初始化)
mysqld –initialize‑insecure –user=mysql –datadir=/fgedudb/fgedudb
# 编写systemd服务单元
cat > /etc/systemd/system/mysqld‑fgedudb.service <<EOF
[Unit]
Description=MySQL fgedudb Instance
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/sbin/mysqld –defaults‑file=/fgedudb/my.cnf
LimitNOFILE=65535
Restart=on‑failure
[Install]
WantedBy=multi‑user.target
EOF
systemctl daemon‑reload
systemctl start mysqld‑fgedudb
systemctl enable mysqld‑fgedudb
# 本地登录实例
mysql -S /fgedudb/fgedudb/mysql.sock
“`
### 4.2 my.cnf配置文件编写,64G内存8CPU规格,路径`/fgedudb/my.cnf`
“`
[mysqld]
user=mysql
port=3306
socket=/fgedudb/fgedudb/mysql.sock
datadir=/fgedudb/fgedudb
pid‑file=/fgedudb/fgedudb/fgedudb.pid
log‑error=/fgedudb/fgedudb/error.log
#基础参数
server‑id=1
lower_case_table_names=1
character‑set‑server=utf8mb4
collation‑server=utf8mb4_unicode_ci
max_connections=2000
max_allowed_packet=128M
#binlog配置
log_bin=binlog
binlog_format=ROW
binlog_expire_logs_seconds=864000
sync_binlog=1
gtid_mode=ON
enforce_gtid_consistency=ON
#InnoDB核心 64G内存
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_buffer_pool_size=40G
innodb_buffer_pool_instances=8
innodb_log_file_size=4G
innodb_log_buffer_size=256M
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_read_io_threads=8
innodb_write_io_threads=8
#会话缓冲
sort_buffer_size=4M
join_buffer_size=4M
read_buffer_size=2M
read_rnd_buffer_size=4M
[mysql]
socket=/fgedudb/fgedudb/mysql.sock
default‑character‑set=utf8mb4
“`
修改配置之后重启实例生效:
“`
systemctl restart mysqld‑fgedudb
“`
### 4.3 数据库基础SQL实操
登录数据库
“`
mysql -S /fgedudb/fgedudb/mysql.sock
“`
“`
— 创建业务库fgedudb
CREATE DATABASE IF NOT EXISTS fgedudb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
— 创建业务用户fgedu,授权访问fgedudb库
CREATE USER ‘fgedu’@’%’ IDENTIFIED BY ‘Fg@123456’;
GRANT ALL PRIVILEGES ON fgedudb.* TO ‘fgedu’@’%’;
FLUSH PRIVILEGES;
USE fgedudb;
— 创建测试业务表
CREATE TABLE fg_user(
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT ‘主键ID’,
user_name VARCHAR(64) NOT NULL COMMENT ‘用户名’,
phone VARCHAR(20) COMMENT ‘手机号’,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
— 插入数据
INSERT INTO fg_user(user_name,phone) VALUES
(‘zhangsan’,’13800138000′),
(‘lisi’,’13900139000′);
— 查询
SELECT * FROM fg_user;
— 更新
UPDATE fg_user SET phone=’13800138999′ WHERE id=1;
— 删除
DELETE FROM fg_user WHERE id=2;
“`
### 4.4 用户权限管理实操
“`
–查看用户
SELECT user,host FROM mysql.user;
–回收权限
REVOKE INSERT,UPDATE ON fgedudb.* FROM ‘fgedu’@’%’;
FLUSH PRIVILEGES;
–删除账号
DROP USER ‘fgedu’@’%’;
“`
### 4.5 逻辑备份恢复mysqldump实操
>
> 网上搜索风哥教程可以学习全套数据库教程
> mysqldump逻辑备份,导出SQL文本,适合中小库。
“`
#全库逻辑备份
mysqldump -S /fgedudb/fgedudb/mysql.sock –single‑transaction –master‑data=2 –routines –triggers –all‑databases > /fgedudb/backup/all_db_$(date +%Y%m%d).sql
#单库fgedudb备份
mysqldump -S /fgedudb/fgedudb/mysql.sock –single‑transaction –routines –triggers fgedudb > /fgedudb/backup/fgedudb_$(date +%Y%m%d).sql
#恢复单库
mysql -S /fgedudb/fgedudb/mysql.sock fgedudb < /fgedudb/backup/fgedudb_20260913.sql
“`
mysqlpump为mysqldump的并行版本,支持多线程导出:
“`
mysqlpump -S /fgedudb/fgedudb/mysql.sock –single‑transaction –routines –triggers –databases fgedudb –parallel‑schemas=4 > /fgedudb/backup/pump_fgedudb.sql
“`
### 4.6 XtraBackup物理备份实操
物理备份直接复制磁盘ibd、redo log文件,适合TB级大库,热备份不锁InnoDB表。
“`
#全量备份
xtrabackup –backup –user=root –socket=/fgedudb/fgedudb/mysql.sock –target‑dir=/fgedudb/backup/xtra_full_$(date +%Y%m%d)
#准备备份,应用redo log,生成一致性备份集
xtrabackup –prepare –target‑dir=/fgedudb/backup/xtra_full_20260913
#恢复操作,停止实例
systemctl stop mysqld‑fgedudb
rm -rf /fgedudb/fgedudb/*
xtrabackup –copy‑back –target‑dir=/fgedudb/backup/xtra_full_20260913
chown -R mysql:mysql /fgedudb/fgedudb
systemctl start mysqld‑fgedudb
“`
### 4.7 GTID主从复制搭建,fgedu‑net‑cn1为主,fgedu‑net‑cn2为从
>
> 前提:两台主机my.cnf都开启`gtid_mode=ON`,主库server‑id=1,从库server‑id=2,防火墙开放3306端口。
**主库fgedu‑net‑cn1操作**
“`
# 创建复制账号
CREATE USER repl@’%’ IDENTIFIED BY ‘Repl@123456′;
GRANT REPLICATION SLAVE ON *.* TO repl@’%’;
FLUSH PRIVILEGES;
“`
“`
#全库导出主库数据
mysqldump -S /fgedudb/fgedudb/mysql.sock –single‑transaction –master‑data=2 –all‑databases –gtid‑purged=ON > /fgedudb/backup/master_full.sql
#将备份文件拷贝到从库
scp /fgedudb/backup/master_full.sql root@fgedu‑net‑cn2:/fgedudb/backup/
“`
**从库fgedu‑net‑cn2操作**
“`
#导入主库全量备份
mysql -S /fgedudb/fgedudb/mysql.sock < /fgedudb/backup/master_full.sql
“`
“`
#配置GTID主从复制
CHANGE MASTER TO
MASTER_HOST=’fgedu‑net‑cn1′,
MASTER_PORT=3306,
MASTER_USER=’repl’,
MASTER_PASSWORD=’Repl@123456′,
MASTER_AUTO_POSITION=1;
START REPLICA;
#查看复制状态
SHOW REPLICA STATUS\G
“`
检查 `Replica_IO_Running: Yes`、`Replica_SQL_Running: Yes`,代表主从复制正常。
### 4.8 MGR组复制集群部署实操(三节点示例)
MGR基于Paxos协议,实现多节点数据一致性。关键配置my.cnf需要增加MGR相关参数,三台实例server‑id互不相同,开启GTID,开启binlog。
“`
loose‑group_replication_group_name=”aaaaaaaa‑bbbb‑cccc‑dddd‑eeeeeeeeeeee”
loose‑group_replication_start_on_boot=off
loose‑group_replication_local_address= “fgedu‑net‑cn1:33061”
loose‑group_replication_group_seeds= “fgedu‑net‑cn1:33061,fgedu‑net‑cn2:33061,fgedu‑net‑cn3:33061”
loose‑group_replication_bootstrap_group= off
“`
主节点引导集群,只执行一次:
“`
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
“`
其余节点执行启动组复制:
“`
START GROUP_REPLICATION;
#查看集群成员状态
SELECT * FROM performance_schema.replication_group_members;
“`
### 4.9 InnoDB Cluster集群部署实操
InnoDB Cluster需要使用mysqlsh工具管理集群。
“`
#启动mysqlsh
mysqlsh –js root@fgedu‑net‑cn1:3306
“`
“`
// 检查实例配置是否满足集群条件
dba.checkInstanceConfiguration(‘root@fgedu‑net‑cn1:3306’);
dba.configureInstance(‘root@fgedu‑net‑cn1:3306’);
//创建集群
var cluster = dba.createCluster(‘fgedudb_cluster’);
//增加另外两个节点
cluster.addInstance(‘root@fgedu‑net‑cn2:3306’);
cluster.addInstance(‘root@fgedu‑net‑cn3:3306’);
//查看集群状态
cluster.status();
“`
部署MySQL Router,应用连接Router地址,自动路由读写请求。
## 5 风哥针对本文总结
风哥教程本文完整梳理MySQL基础知识、体系架构、InnoDB存储引擎原理、主流高可用架构选型,并且基于两台测试主机`fgedu‑net‑cn1`、`fgedu‑net‑cn2`,硬件规格64G内存8CPU,完成MySQL8.4部署、参数调优、SQL开发、逻辑/物理备份恢复、GTID主从复制、MGR组复制、InnoDB Cluster集群完整实操演示。
核心要点总结:
1. MySQL四层体系架构:连接层、SQL服务层、存储引擎层、文件系统层,InnoDB插件存储引擎是生产唯一推荐引擎,依靠redo log WAL、undo log MVCC实现事务崩溃安全。
2. 参数调优优先`innodb_buffer_pool_size`,64G服务器设置40G,缓冲池实例数匹配CPU核数;会话缓冲参数不要盲目调大,避免高并发内存耗尽。
3. 备份分为逻辑备份mysqldump/mysqlpump,物理备份XtraBackup;备份有效性核心在于定期做恢复演练,备份文件不能恢复等于无效备份。
4. GTID主从复制运维简单,生产优先使用半同步复制,尽量规避MMM老旧架构;中型以上业务优先评估MGR/InnoDB Cluster官方集群方案。
5. 生产上线前,高可用架构需要模拟故障做切换演练,验证故障转移之后业务与数据完整性。
在实际生产运维过程中,需要持续关注错误日志、慢查询日志,定期监控实例状态,根据业务压力持续调整配置参数,保障数据库稳定运行。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
