事务与锁机制
1.1 事务控制
START TRANSACTION;
UPDATE account SET balance = balance - 500 WHERE user_id = 1001;
UPDATE account SET balance = balance + 500 WHERE user_id = 2002;
COMMIT; -- 显式提交事务
ROLLBACK; -- 异常时回滚
1.2 锁机制
- 锁类型:共享锁(SELECT ... LOCK IN SHARE MODE)与排他锁(SELECT ... FOR UPDATE)
- 死锁检测 :通过
SHOW ENGINE INNODB STATUS
查看死锁日志 - 隔离级别:重点理解REPEATABLE READ(默认)和READ COMMITTED的区别
2. 存储引擎深度优化
2.1 InnoDB核心机制
- 缓冲池(Buffer Pool) :配置
innodb_buffer_pool_size
(建议设置为物理内存的70%-80%) - Redo Log :保证事务持久性,
innodb_log_file_size
设置优化 - 行格式:COMPACT与DYNAMIC对大数据字段(如JSON、TEXT)的存储优化
2.2 大数据写入优化
-- 关闭自动提交提升批量插入性能(Python脚本常用)
SET autocommit=0;
INSERT INTO sensor_data VALUES (...),(...),(...); -- 批量插入10万+/次
COMMIT;
3. 查询性能优化
3.1 执行计划深度解读
EXPLAIN
SELECT customer_id, SUM(amount)
FROM orders
WHERE order_date > '2024-01-01'
GROUP BY customer_id
HAVING SUM(amount) > 10000;
- 关键指标 :
type
:ALL(全表扫描)→ index(索引扫描)→ range(范围索引)Extra
:Using temporary(临时表)、Using filesort(额外排序)
3.2 索引高级策略
-
覆盖索引:SELECT的字段全部包含在索引中
-
索引下推(ICP) :
WHERE
条件在存储引擎层过滤 -
全文索引:对TEXT类型字段的模糊搜索优化
ALTER TABLE articles ADD FULLTEXT INDEX ftx_content (content);
SELECT * FROM articles WHERE MATCH(content) AGAINST('大数据');
4. 分区与分表
4.1 分区表(Partitioning)
-- 按时间范围分区(适合日志类大数据表)
CREATE TABLE server_logs (
log_id INT AUTO_INCREMENT,
log_time DATETIME,
content TEXT,
PRIMARY KEY (log_id, log_time)
) PARTITION BY RANGE COLUMNS(log_time) (
PARTITION p2023Q1 VALUES LESS THAN ('2023-04-01'),
PARTITION p2023Q2 VALUES LESS THAN ('2023-07-01')
);
4.2 分库分表(Sharding)
- 垂直拆分:用户表与订单表分离到不同数据库
- 水平拆分:按用户ID哈希分片(使用ShardingSphere或MyCat中间件)
- 全局ID生成:Snowflake算法实现分布式ID
5. 存储过程与触发器
5.1 存储过程开发
DELIMITER //
CREATE PROCEDURE CalculateUserStats(IN min_age INT)
BEGIN
SELECT
COUNT(*) AS total_users,
AVG(age) AS avg_age
FROM users
WHERE age >= min_age;
END //
DELIMITER ;
CALL CalculateUserStats(18); -- 调用存储过程
5.2 触发器应用
-- 自动维护订单统计表
CREATE TRIGGER UpdateOrderStats
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
UPDATE user_stats
SET total_orders = total_orders + 1,
total_amount = total_amount + NEW.amount
WHERE user_id = NEW.user_id;
END;
6. 大数据集成方案
6.1 与Hadoop/Spark集成
-
Sqoop数据迁移:MySQL ↔ HDFS双向传输
-
Spark SQL直连:通过JDBC读取MySQL数据
PySpark示例
df = spark.read.format("jdbc")
.option("url", "jdbc:mysql://localhost:3306/bigdata")
.option("dbtable", "sales_records")
.option("user", "admin")
.option("password", "securepass")
.load()
6.2 数据仓库同步
- Binlog实时同步:使用Canal或Debezium捕获数据变更
- ETL工具:Airflow调度Kettle/Pentaho数据转换任务
7. 备份与恢复策略
7.1 大数据量备份
# mysqldump并行备份(配合压缩)
mysqldump -u root -p --single-transaction --quick bigdata_db | gzip > backup.sql.gz
# 物理备份工具:Percona XtraBackup(TB级数据热备份)
7.2 数据恢复演练
- 时间点恢复(PITR):通过Binlog实现精确到秒的数据恢复
- 云数据库方案:阿里云RDS的自动备份与克隆实例功能
学习重点提示:
- 掌握分区表的实际应用场景(时间序列数据管理)
- 理解
EXPLAIN
执行计划中的type
和Extra
关键指标 - 学会通过Binlog实现大数据生态系统的数据同步
- 重点练习Spark/Python与MySQL的集成开发
Python关联点:
-
使用
SQLAlchemy
实现ORM映射与复杂查询 -
结合
Pandas
实现高效数据批处理:import pandas as pd
from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://user:pass@localhost/bigdata')
df = pd.read_sql("SELECT * FROM sensor_data WHERE ts > '2024-01-01'", engine)
df.to_sql('backup_data', engine, if_exists='append', index=False, chunksize=10000)
进阶方向:
- 学习TiDB等分布式数据库的HTAP架构
- 掌握AWS RDS/Aurora或阿里云PolarDB的云原生数据库运维