跳转至

第八章:最佳实践

设计原则

范式与反范式

范式设计:
- 减少数据冗余
- 保证数据一致性
- 查询可能需要多表连接

反范式设计:
- 适度冗余
- 提高查询性能
- 适合读多写少场景

字段类型选择

-- 整数类型
TINYINT    -- 1字节,-128~127
SMALLINT   -- 2字节
INT        -- 4字节
BIGINT     -- 8字节

-- 字符串类型
CHAR(n)    -- 定长,最大255
VARCHAR(n) -- 变长,最大65535
TEXT       -- 长文本

-- 时间类型
DATETIME   -- 8字节,范围广
TIMESTAMP  -- 4字节,自动更新

安全实践

防止 SQL 注入

# 使用参数化查询
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))

# ORM 方式
user = session.query(User).filter(User.id == user_id).first()

权限管理

-- 创建只读用户
CREATE USER 'readonly'@'%' IDENTIFIED BY 'password';
GRANT SELECT ON mydb.* TO 'readonly'@'%';

-- 创建应用用户
CREATE USER 'appuser'@'%' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'%';

备份策略

mysqldump

# 全库备份
mysqldump -u root -p --all-databases > all_backup.sql

# 单库备份
mysqldump -u root -p mydb > mydb_backup.sql

# 单表备份
mysqldump -u root -p mydb users > users_backup.sql

# 恢复
mysql -u root -p mydb < mydb_backup.sql

主从复制

-- 主库配置
[mysqld]
server-id = 1
log-bin = mysql-bin

-- 从库配置
[mysqld]
server-id = 2
relay-log = relay-bin

小结

最佳实践要点:

  • 设计原则:范式与反范式平衡
  • 字段类型:选择合适的类型
  • 安全实践:防注入、权限管理
  • 备份策略:mysqldump、主从复制

完成本教程后,你应该能够设计和管理高性能 MySQL 数据库。