一、数据库基础概念
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:支持=、<>、>、<、BETWEEN、IN、LIKE、IS NULLGROUP BY:分组,配合聚合函数COUNT、SUM、AVG、MAX、MINHAVING:分组后过滤ORDER BY:默认 ASC,DESC 降序LIMIT:分页,LIMIT offset, row_count
多表查询(七种)
- CROSS JOIN:笛卡尔积
- INNER JOIN:只返回匹配记录
- LEFT JOIN:左表全保留
- RIGHT JOIN:右表全保留
- FULL JOIN(MySQL 用 LEFT JOIN + UNION + RIGHT JOIN 实现)
- SELF JOIN:自连接
- 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_Running和Slave_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:停止 MHAmasterha_check_status:查看运行状态