MySQL 从入门到高可用架构实战精要

一、数据库基础概念

1. 数据分类

  • 结构化数据:二维表表示,固定格式,如关系型数据库
  • 半结构化数据:自描述结构,如 JSON、XML
  • 非结构化数据:无固定格式,如音视频、二进制文件

2. 数据管理发展三阶段

  • 人工管理 → 文件系统 → 数据库系统

3. 数据库管理系统(DBMS)

  • 核心功能:数据定义(DDL)、数据操作(DML)、数据组织存储、运行管理、维护、保护、通信
  • 三大模型:层次模型、网状模型、关系模型
  • 关系型数据库(RDBMS):二维表组织数据,支持 SQL

4. 关系型数据库核心术语

  • 表、行(记录)、列(字段)、主键、外键、索引、视图、存储过程、触发器

5. E-R 模型

  • 实体(矩形)、属性(椭圆)、联系(菱形)
  • 联系类型:1:1、1:n、m:n

6. 数据库范式

  • 1NF:原子性,列不可再分
  • 2NF:消除部分依赖,非主键完全依赖主键(针对复合主键)
  • 3NF:消除传递依赖,非主键之间不相互依赖

7. SQL 分类

  • DDL(数据定义)、DML(数据操作)、DQL(数据查询)、DCL(数据控制)、TCL(事务控制)

二、MySQL 安装与基本使用

1. MySQL 历史与分支

  • 创始人 Monty Widenius → MySQL AB → Sun → Oracle
  • 分支:MariaDB、Percona Server

2. MySQL 多实例

  • 一台服务器运行多个 mysqld 进程,不同端口(如 3306,3307)
  • 优点:节约硬件、便于对比、便于管理
  • 缺点:资源抢占、单点风险

3. MySQL 组成

  • 服务端:mysqld、mysqld_safe、mysqld_multi
  • 客户端:mysql、mysqldump、mysqladmin、mysqlimport
  • 配置文件:/etc/my.cnf 及 /etc/my.cnf.d/*.cnf

4. mysql 客户端常用选项

  • -u, -p, -h, -P, -S, -D, -e, -H, -X, -E, --prompt

5. mysqladmin 常用命令

  • status, ping, processlist, shutdown, create/drop database, password, flush-*

6. mycli 工具

  • 基于 Python 的 MySQL 命令行工具,支持自动补全和语法高亮

三、SQL 语言详解

1. 字符集与排序规则

  • MySQL 8.0 默认字符集 utf8mb4,排序规则 utf8mb4_0900_ai_ci
  • 查看字符集:SHOW CHARSET;,查看排序规则:SHOW COLLATION;

2. 数据库操作(DDL)

  • 创建:CREATE DATABASE [IF NOT EXISTS] db_name;
  • 修改:ALTER DATABASE db_name ...;
  • 删除:DROP DATABASE [IF EXISTS] db_name;

3. 数据类型

  • 数值型:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL
  • 日期时间型:DATE, TIME, YEAR, DATETIME, TIMESTAMP
  • 字符串型:CHAR, VARCHAR, TEXT, BLOB, ENUM, SET
  • 常用属性:NOT NULL, DEFAULT, PRIMARY KEY, AUTO_INCREMENT, UNSIGNED

4. 表操作(DDL)

  • 创建:CREATE TABLE [IF NOT EXISTS] 表名 (列定义) [ENGINE=...] [CHARSET=...];
  • 复制表结构:CREATE TABLE 新表 LIKE 原表;
  • 复制数据+结构:CREATE TABLE 新表 SELECT ... FROM 原表;
  • 查看表结构:DESC 表名;SHOW CREATE TABLE 表名;
  • 修改表:ALTER TABLE 表名 ADD/MODIFY/CHANGE/DROP/RENAME ...
  • 删除表:DROP TABLE 表名;

5. 数据操作(DML)

  • 插入:INSERT INTO 表名 (列...) VALUES (值...);
  • 插入多条:VALUES (..),(..);
  • 存在则更新:ON DUPLICATE KEY UPDATE ...
  • 更新:UPDATE 表名 SET 列=值 WHERE 条件;(务必加条件)
  • 删除:DELETE FROM 表名 WHERE 条件;(逻辑删除优于物理删除)
  • 清空表:TRUNCATE TABLE 表名;(DDL,不可回滚,效率高)

6. 数据查询(DQL)

基础查询
  • SELECT 列1,列2 FROM 表名 WHERE 条件 GROUP BY 列 HAVING 条件 ORDER BY 列 LIMIT n;
常用子句
  • WHERE:支持 =<>><BETWEENINLIKEIS NULL
  • GROUP BY:分组,配合聚合函数 COUNTSUMAVGMAXMIN
  • HAVING:分组后过滤
  • ORDER BY:默认 ASC,DESC 降序
  • LIMIT:分页,LIMIT offset, row_count
多表查询(七种)
  1. CROSS JOIN:笛卡尔积
  2. INNER JOIN:只返回匹配记录
  3. LEFT JOIN:左表全保留
  4. RIGHT JOIN:右表全保留
  5. FULL JOIN(MySQL 用 LEFT JOIN + UNION + RIGHT JOIN 实现)
  6. SELF JOIN:自连接
  7. UNION / UNION ALL:合并结果集

7. 用户管理(DCL)

  • 用户由 用户名@主机 唯一标识,支持通配符 %
  • 创建:CREATE USER 'name'@'host' IDENTIFIED BY 'pwd';
  • 重命名:RENAME USER ... TO ...;
  • 删除:DROP USER 'name'@'host';
  • 修改密码:ALTER USER ... IDENTIFIED BY '...';SET PASSWORD
  • 忘记密码:skip-grant-tables 跳过授权表启动,然后修改

8. 权限管理

  • 授权:GRANT 权限 ON 对象 TO 'user'@'host' [WITH GRANT OPTION];
  • 撤销:REVOKE 权限 ON 对象 FROM 'user'@'host';
  • 查看权限:SHOW GRANTS FOR 'user'@'host';
  • 刷新权限:FLUSH PRIVILEGES;
  • 常见权限:ALL, SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE USER 等

四、MySQL 备份与恢复

1. 备份分类

  • 物理备份(冷备、热备、温备)
  • 逻辑备份(mysqldump)

2. 物理冷备

bash 复制代码
systemctl stop mysqld
tar czf /backup/mysql-backup-$(date +%F).tar.gz /var/lib/mysql
systemctl start mysqld

3. 逻辑备份(mysqldump)

  • 备份单个数据库:mysqldump -u root -p dbname > backup.sql
  • 备份多库:--databases db1 db2
  • 备份所有库:--all-databases
  • 备份表:mysqldump -u root -p dbname tablename
  • 恢复:mysql -u root -p dbname < backup.sql 或登录后 source backup.sql

4. 增量备份(基于二进制日志)

  • 启用 binlog:log-bin=mysql-bin
  • 刷新日志:mysqladmin flush-logs
  • 查看 binlog:mysqlbinlog binlog-file
  • 恢复:mysqlbinlog binlog-file | mysql -u root -p

五、主从复制与读写分离

1. 主从复制原理

  • 主库将更改记录到 二进制日志(binlog)
  • 从库 I/O 线程 拉取 binlog 写入 中继日志(relay log)
  • 从库 SQL 线程 重放 relay log,保持数据一致

2. 主从配置步骤

  • 主库:开启 binlog,设置 server-id,授权复制用户
  • 从库 :设置 server-id,CHANGE MASTER TO 指定主库信息,START SLAVE
  • 检查状态:SHOW SLAVE STATUS\G,确保 Slave_IO_RunningSlave_SQL_Running 为 Yes

3. 读写分离(Amoeba)

  • 应用 → Amoeba 代理(端口 8066)→ MySQL 主从集群
  • 写操作(INSERT/UPDATE/DELETE)转发到主库池(writePool)
  • 读操作(SELECT)转发到从库池(readPool),支持负载均衡
  • 配置文件:amoeba.xml(路由规则)、dbServers.xml(后端节点定义)

六、MHA 高可用

1. MHA 概述

  • Master High Availability,解决 MySQL 主库单点故障
  • 自动故障转移(0-30 秒),最大程度保证数据不丢失
  • 组成:Manager(管理节点) + Node(数据节点)

2. 故障切换流程

  • Manager 检测到主库不可用
  • 从从库中选举新主库(基于数据最新性,或候选主库权重)
  • 应用差异二进制日志,提升新主库
  • 其他从库指向新主库
  • 可选调用脚本(如 VIP 漂移)

3. 关键配置参数

  • candidate_master=1:优先作为新主库
  • check_repl_delay=0:忽略复制延迟
  • 虚拟 IP(VIP)管理脚本:master_ip_failover

4. 常用管理命令

  • masterha_check_ssh:检查 SSH 连通性
  • masterha_check_repl:检查复制健康状态
  • masterha_manager:启动 MHA 监控
  • masterha_stop:停止 MHA
  • masterha_check_status:查看运行状态
相关推荐
跨境数据猎手2 小时前
大数据在电商行业的应用
大数据·运维·爬虫
cfm_29142 小时前
Redis五大基本数据结构底层了解
数据结构·数据库·redis
真实的菜2 小时前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
linyanRPA3 小时前
影刀RPA店群自动化实战:多店铺活动自动报名与促销管理架构设计
运维·自动化·办公自动化·rpa·python脚本·爬虫自动化·店群自动化
你想考研啊3 小时前
mysql数据库导出导入
数据库·mysql·oracle
会Tk矩阵群控的小木3 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发
十年编程老舅4 小时前
Linux DRM:底层逻辑与实践架构
数据库·mysql
佛山个人技术开发4 小时前
GitCode SSH连接配置教程
运维·ssh·gitcode
The Sheep 20234 小时前
Vue复习
linux·服务器·数据库