Part01-基础概念与理论知识
良好的数据库 schema 设计是MySQL性能优化的基础,合理的表结构可以显著提升查询效率。更多学习教程www.fgedu.net.cn
1.1 表结构设计
表结构设计应遵循以下原则:
# 正确示例:使用 INT 存储整数,VARCHAR 存储可变长度字符串
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at DATETIME NOT NULL
);
# 错误示例:使用过大的数据类型
CREATE TABLE bad_users (
id BIGINT PRIMARY KEY AUTO_INCREMENT, — 不必要的大类型
username CHAR(255) NOT NULL, — 固定长度,浪费空间
email TEXT NOT NULL, — 不必要的大类型
created_at TIMESTAMP NOT NULL
);
# 2. 合理使用 NOT NULL
# 正确示例:明确指定 NOT NULL 约束
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL,
stock INT NOT NULL DEFAULT 0
);
# 3. 避免使用 TEXT/BLOB 类型
# 正确示例:将大字段分离到单独的表
CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
summary VARCHAR(500) NOT NULL,
created_at DATETIME NOT NULL
);
CREATE TABLE article_contents (
article_id INT PRIMARY KEY,
content TEXT NOT NULL,
FOREIGN KEY (article_id) REFERENCES articles(id) ON DELETE CASCADE
);
1.2 范式与反范式
合理平衡范式与反范式设计:
# 正确示例:分离相关数据到不同表
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT NOT NULL,
order_date DATETIME NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
# 2. 适当反范式提高性能
# 正确示例:添加冗余字段减少 JOIN
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT NOT NULL,
customer_name VARCHAR(100) NOT NULL, — 冗余字段
order_date DATETIME NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
1.3 分区表设计
对于大表,合理使用分区提高查询性能:
CREATE TABLE logs (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
action VARCHAR(50) NOT NULL,
created_at DATETIME NOT NULL
) PARTITION BY RANGE (TO_DAYS(created_at)) (
PARTITION p202601 VALUES LESS THAN (TO_DAYS(‘2026-02-01’)),
PARTITION p202602 VALUES LESS THAN (TO_DAYS(‘2026-03-01’)),
PARTITION p202603 VALUES LESS THAN (TO_DAYS(‘2026-04-01’)),
PARTITION p202604 VALUES LESS THAN (TO_DAYS(‘2026-05-01’)),
PARTITION p202605 VALUES LESS THAN (TO_DAYS(‘2026-06-01’)),
PARTITION p202606 VALUES LESS THAN (TO_DAYS(‘2026-07-01’)),
PARTITION p202607 VALUES LESS THAN (TO_DAYS(‘2026-08-01’)),
PARTITION p202608 VALUES LESS THAN (TO_DAYS(‘2026-09-01’)),
PARTITION p202609 VALUES LESS THAN (TO_DAYS(‘2026-10-01’)),
PARTITION p202610 VALUES LESS THAN (TO_DAYS(‘2026-11-01’)),
PARTITION p202611 VALUES LESS THAN (TO_DAYS(‘2026-12-01’)),
PARTITION p202612 VALUES LESS THAN (TO_DAYS(‘2027-01-01’)),
PARTITION p_max VALUES LESS THAN MAXVALUE
);
Part02-生产环境规划与建议
索引是提高MySQL查询性能的关键,合理的索引设计可以显著减少查询时间。学习交流加群风哥微信: itpux-com
2.1 索引类型选择
根据查询需求选择合适的索引类型:
# 适用于等值查询、范围查询
CREATE INDEX idx_username ON users(username);
# 2. 唯一索引
# 确保列值唯一
CREATE UNIQUE INDEX idx_email ON users(email);
# 3. 复合索引
# 适用于多列查询
CREATE INDEX idx_category_price ON products(category_id, price);
# 4. 前缀索引
# 适用于长字符串
CREATE INDEX idx_title ON articles(title(50));
# 5. 全文索引
# 适用于文本搜索
CREATE FULLTEXT INDEX idx_content ON article_contents(content);
2.2 索引设计原则
遵循以下索引设计原则:
# 正确示例:选择唯一值多的列
CREATE INDEX idx_email ON users(email); — 高选择性
# 错误示例:选择唯一值少的列
CREATE INDEX idx_gender ON users(gender); — 低选择性
# 2. 复合索引的列顺序
# 正确示例:将选择性高的列放在前面
CREATE INDEX idx_customer_date ON orders(customer_id, order_date);
# 3. 避免过度索引
# 正确示例:只创建必要的索引
CREATE INDEX idx_product_id ON order_items(product_id);
CREATE INDEX idx_order_id ON order_items(order_id);
# 4. 考虑覆盖索引
# 正确示例:包含查询所需的所有列
CREATE INDEX idx_name_email ON users(name, email);
# 查询可以使用覆盖索引
SELECT name, email FROM users WHERE name = ‘张三’;
2.3 索引维护
定期维护索引以保持性能:
SHOW INDEX FROM users;
# 2. 分析表以更新统计信息
ANALYZE TABLE users;
# 3. 重建索引
ALTER TABLE users ENGINE=InnoDB; — 重建所有索引
# 4. 删除未使用的索引
DROP INDEX idx_unused ON users;
Part03-生产环境项目实施方案
优化SQL查询是提高MySQL性能的直接方法,合理的查询语句可以显著减少执行时间。
3.1 SELECT 语句优化
优化SELECT语句的关键原则:
# 正确示例:明确指定列名
SELECT id, name, email FROM users WHERE id = 1;
# 错误示例:使用 SELECT *
SELECT * FROM users WHERE id = 1;
# 2. 使用 LIMIT 限制结果集
# 正确示例:限制返回行数
SELECT id, name FROM users ORDER BY created_at DESC LIMIT 10;
# 3. 避免在 WHERE 子句中使用函数
# 正确示例:直接比较
SELECT * FROM users WHERE created_at >= ‘2026-01-01’;
# 错误示例:使用函数
SELECT * FROM users WHERE YEAR(created_at) = 2026;
# 4. 合理使用 JOIN
# 正确示例:使用 INNER JOIN
SELECT u.name, o.total_amount
FROM users u
INNER JOIN orders o ON u.id = o.customer_id
WHERE u.id = 1;
# 5. 使用子查询优化
# 正确示例:使用 EXISTS 代替 IN
SELECT * FROM users
WHERE EXISTS (SELECT 1 FROM orders WHERE customer_id = users.id);
3.2 INSERT 语句优化
优化INSERT语句以提高写入性能:
# 正确示例:一次插入多条记录
INSERT INTO users (name, email) VALUES
(‘张三’, ‘zhangsan@example.com’),
(‘李四’, ‘lisi@example.com’),
(‘王五’, ‘wangwu@example.com’);
# 错误示例:多次单条插入
INSERT INTO users (name, email) VALUES (‘张三’, ‘zhangsan@example.com’);
INSERT INTO users (name, email) VALUES (‘李四’, ‘lisi@example.com’);
INSERT INTO users (name, email) VALUES (‘王五’, ‘wangwu@example.com’);
# 2. 禁用索引(临时)
# 对于大量插入,可临时禁用索引
ALTER TABLE users DISABLE KEYS;
INSERT INTO users (name, email) VALUES (…);
ALTER TABLE users ENABLE KEYS;
# 3. 使用 LOAD DATA INFILE
# 对于大量数据导入,使用 LOAD DATA INFILE
LOAD DATA INFILE ‘/path/to/users.csv’ INTO TABLE users
FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘”‘
LINES TERMINATED BY ‘\n’
IGNORE 1 ROWS;
3.3 UPDATE 和 DELETE 语句优化
优化UPDATE和DELETE语句以减少锁竞争:
# 正确示例:使用 LIMIT 限制更新行数
UPDATE users SET status = ‘inactive’ WHERE last_login < '2026-01-01' LIMIT 1000; # 2. 使用索引条件 # 正确示例:使用索引列作为条件 UPDATE users SET email = 'new@example.com' WHERE id = 1; -- 使用主键索引 # 错误示例:使用非索引列 UPDATE users SET email = 'new@example.com' WHERE name = '张三'; -- 无索引 # 3. 避免全表删除 # 正确示例:使用条件删除 DELETE FROM logs WHERE created_at < '2026-01-01'; # 错误示例:删除所有数据 DELETE FROM logs; -- 考虑使用 TRUNCATE
Part04-生产案例与实战讲解
合理的MySQL配置可以显著提升数据库性能,根据服务器硬件和工作负载进行优化。
4.1 内存配置
内存是MySQL性能的关键因素,合理配置内存参数:
# 建议设置为物理内存的 50%-80%
innodb_buffer_pool_size = 4G
# 2. 缓冲池实例数
# 对于大内存服务器,增加实例数
innodb_buffer_pool_instances = 8
# 3. 键缓冲区大小
# 用于 MyISAM 表索引缓存
key_buffer_size = 256M
# 4. 查询缓存(8.0版本已废弃)
# 对于频繁重复查询的场景
query_cache_size = 0
query_cache_type = 0
4.2 连接配置
合理配置连接参数以支持并发访问:
# 根据服务器能力和应用需求设置
max_connections = 500
# 2. 连接超时
# 避免连接占用时间过长
wait_timeout = 60
interactive_timeout = 60
# 3. 线程缓存
# 减少线程创建开销
thread_cache_size = 100
# 4. 网络缓冲区
# 根据网络环境调整
net_buffer_length = 16384
max_allowed_packet = 64M
4.3 InnoDB 配置
优化InnoDB存储引擎配置:
# 建议设置为 256M-1G
innodb_log_file_size = 512M
# 2. 日志缓冲区
innodb_log_buffer_size = 16M
# 3. 刷新方法
# 对于 SSD,使用 O_DIRECT
innodb_flush_method = O_DIRECT
# 4. IO 容量
# 根据存储设备性能设置
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
# 5. 并发控制
innodb_thread_concurrency = 0 # 0 表示自动
innodb_read_io_threads = 16
innodb_write_io_threads = 16
4.4 其他配置
其他重要的配置参数:
# 用于复制和恢复
binlog_format = ROW
sync_binlog = 1
# 2. 慢查询日志
# 用于性能分析
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow-query.log
long_query_time = 1
# 3. 临时表
# 调整临时表大小
tmp_table_size = 64M
max_heap_table_size = 64M
# 4. 排序缓冲区
sort_buffer_size = 2M
Part05-风哥经验总结与分享
选择合适的存储引擎对MySQL性能至关重要,不同的存储引擎有不同的特点和适用场景。
5.1 存储引擎比较
主要存储引擎的特点对比:
# 特点:支持事务、行级锁、外键、MVCC
# 适用场景:OLTP应用、需要事务支持的场景
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
) ENGINE=InnoDB;
# 2. MyISAM
# 特点:不支持事务、表级锁、全文索引
# 适用场景:只读应用、报表系统
CREATE TABLE logs (
id INT PRIMARY KEY AUTO_INCREMENT,
message TEXT NOT NULL
) ENGINE=MyISAM;
# 3. MEMORY
# 特点:数据存储在内存中、速度快
# 适用场景:临时表、缓存
CREATE TABLE session_data (
session_id VARCHAR(32) PRIMARY KEY,
data TEXT NOT NULL
) ENGINE=MEMORY;
# 4. ARCHIVE
# 特点:高压缩比、只支持插入和查询
# 适用场景:归档数据、日志存储
CREATE TABLE archive_logs (
id INT PRIMARY KEY AUTO_INCREMENT,
log TEXT NOT NULL
) ENGINE=ARCHIVE;
5.2 存储引擎选择原则
根据应用需求选择合适的存储引擎:
# 例如:订单表、用户表
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
status VARCHAR(20) NOT NULL,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL
) ENGINE=InnoDB;
# 2. 只读或读多写少:选择 MyISAM
# 例如:静态数据、配置表
CREATE TABLE countries (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
code VARCHAR(2) NOT NULL
) ENGINE=MyISAM;
# 3. 临时数据:选择 MEMORY
# 例如:会话数据、临时计算
CREATE TABLE temp_results (
id INT PRIMARY KEY AUTO_INCREMENT,
result DECIMAL(10,2) NOT NULL
) ENGINE=MEMORY;
# 4. 归档数据:选择 ARCHIVE
# 例如:历史日志、备份数据
CREATE TABLE old_logs (
id INT PRIMARY KEY AUTO_INCREMENT,
log_date DATETIME NOT NULL,
message TEXT NOT NULL
) ENGINE=ARCHIVE;
6. 硬件配置最佳实践
硬件是MySQL性能的基础,合理的硬件配置可以显著提升数据库性能。
6.1 CPU 配置
选择合适的CPU:
# 对于并发查询多的场景,选择更多核心
# 例如:16核或32核CPU
# 2. 时钟频率
# 对于单查询性能要求高的场景,选择高主频CPU
# 例如:3.5GHz以上
# 3. 缓存
# 选择大缓存的CPU
# 例如:L3缓存16MB以上
6.2 内存配置
内存是MySQL性能的关键:
# 建议至少 16GB,生产环境推荐 32GB 以上
# 计算公式:innodb_buffer_pool_size = 物理内存 * 70%
# 2. 内存类型
# 选择高频率、低延迟的内存
# 例如:DDR4 3200MHz
# 3. 内存通道
# 启用多通道内存
# 例如:4通道或8通道
6.3 存储配置
存储系统对MySQL性能影响巨大:
# 推荐使用 SSD
# 例如:NVMe SSD
# 2. RAID 配置
# 对于数据安全,使用 RAID 10
# 对于性能,使用 RAID 0
# 3. 存储控制器
# 选择带有缓存的存储控制器
# 例如:1GB 缓存
# 4. 文件系统
# 推荐使用 ext4 或 XFS
# 例如:
# mkfs.xfs -f /dev/sdb1
# mount -t xfs /dev/sdb1 /var/lib/mysql
6.4 网络配置
网络配置对分布式环境至关重要:
# 推荐使用千兆或万兆网络
# 例如:10Gbps 网络
# 2. 网络延迟
# 减少网络延迟
# 例如:使用专用网络
# 3. 网络拓扑
# 合理设计网络拓扑
# 例如:主从复制使用单独的网络
7. 性能监控最佳实践
定期监控MySQL性能是保持系统稳定运行的关键,及时发现并解决性能问题。
7.1 监控工具
使用合适的监控工具:
# 查看系统状态
SHOW GLOBAL STATUS;
# 查看系统变量
SHOW GLOBAL VARIABLES;
# 查看进程列表
SHOW PROCESSLIST;
# 2. 第三方工具
# Percona Monitoring and Management (PMM)
# 安装 PMM
# wget https://www.percona.com/downloads/pmm2/2.37.0/binary/tarball/pmm2-client-2.37.0.tar.gz
# tar -xzf pmm2-client-2.37.0.tar.gz
# cd pmm2-client-2.37.0
# ./install.sh
# 注册客户端
# pmm-admin config –server-insecure-tls –server-url=https://admin:admin@192.168.1.10:443
# 添加MySQL实例
# pmm-admin add mysql –username=root –password=password –host=localhost –port=3306
# 3. 系统工具
# 监控系统资源
# top -c
# vmstat 1
# iostat -x 1
7.2 关键监控指标
监控以下关键指标:
# 慢查询数量
SHOW GLOBAL STATUS LIKE ‘Slow_queries’;
# 查询执行时间
# 通过慢查询日志分析
# 2. 连接状态
# 当前连接数
SHOW GLOBAL STATUS LIKE ‘Threads_connected’;
# 连接错误
SHOW GLOBAL STATUS LIKE ‘Connection_errors%’;
# 3. 缓冲池状态
# 缓冲池命中率
SHOW GLOBAL STATUS LIKE ‘Innodb_buffer_pool_read%’;
# 缓冲池使用情况
SHOW GLOBAL STATUS LIKE ‘Innodb_buffer_pool_pages%’;
# 4. I/O 性能
# I/O 等待
SHOW GLOBAL STATUS LIKE ‘Innodb_data_read%’;
SHOW GLOBAL STATUS LIKE ‘Innodb_data_written%’;
# 5. 锁状态
# 锁等待
SHOW GLOBAL STATUS LIKE ‘Innodb_row_lock%’;
# 死锁
SHOW GLOBAL STATUS LIKE ‘Innodb_deadlocks’;
7.3 监控告警
设置合理的监控告警:
# 当慢查询数量超过阈值时告警
# 2. 连接数告警
# 当连接数超过最大连接数的80%时告警
# 3. 缓冲池使用率告警
# 当缓冲池使用率超过90%时告警
# 4. I/O 性能告警
# 当I/O等待时间过长时告警
# 5. 复制延迟告警
# 当主从复制延迟超过阈值时告警
8. 数据库维护最佳实践
定期维护数据库是保持MySQL性能的重要措施,包括备份、优化和修复等操作。
8.1 定期备份
制定合理的备份策略:
# 使用 xtrabackup
# 安装 xtrabackup
# yum install percona-xtrabackup-80
# 全量备份
# xtrabackup –backup –target-dir=/backup/full
# 增量备份
# xtrabackup –backup –target-dir=/backup/inc1 –incremental-basedir=/backup/full
# 2. 逻辑备份
# 使用 mysqldump
# 全库备份
# mysqldump –all-databases –single-transaction –quick –lock-tables=false > all_databases.sql
# 单库备份
# mysqldump –databases mydb –single-transaction –quick > mydb.sql
# 3. 备份验证
# 定期验证备份文件
# mysqladmin ping
# mysql < backup.sql
# 4. 备份策略
# 例如:
# - 每天一次全量备份
# - 每小时一次增量备份
# - 备份文件保留7天
8.2 表优化
定期优化表结构和索引:
# 更新表统计信息
ANALYZE TABLE users;
# 2. 优化表
# 重建表和索引
OPTIMIZE TABLE users;
# 3. 检查表
# 检查表结构
CHECK TABLE users;
# 4. 修复表
# 修复损坏的表
REPAIR TABLE users;
8.3 日志管理
合理管理MySQL日志:
# 配置错误日志
# vi /etc/my.cnf
# log_error = /var/log/mysql/error.log
# 2. 二进制日志
# 配置二进制日志
# vi /etc/my.cnf
# log_bin = /var/lib/mysql/binlog
# expire_logs_days = 7
# 3. 慢查询日志
# 配置慢查询日志
# vi /etc/my.cnf
# slow_query_log = 1
# slow_query_log_file = /var/lib/mysql/slow-query.log
# long_query_time = 1
# 4. 清理日志
# 清理二进制日志
PURGE BINARY LOGS BEFORE ‘2026-04-01 00:00:00’;
# 清理慢查询日志
# > /var/lib/mysql/slow-query.log
8.4 定期维护计划
制定定期维护计划:
# – 检查慢查询日志
# – 监控系统状态
# – 备份验证
# 2. 每周维护
# – 全量备份
# – 优化表
# – 分析索引使用情况
# 3. 每月维护
# – 系统补丁更新
# – 硬件检查
# – 性能评估
# 4. 维护脚本示例
# 每周维护脚本
#!/bin/bash
# 备份数据库
mysqldump –all-databases –single-transaction > /backup/$(date +%Y%m%d).sql
# 优化表
mysql -e “SHOW TABLES IN mydb” | tail -n +2 | while read table; do
mysql -e “OPTIMIZE TABLE mydb.$table”
done
# 分析表
mysql -e “SHOW TABLES IN mydb” | tail -n +2 | while read table; do
mysql -e “ANALYZE TABLE mydb.$table”
done
9. 数据库扩展最佳实践
随着业务增长,MySQL数据库需要进行扩展以满足性能需求,包括垂直扩展和水平扩展。
9.1 垂直扩展
垂直扩展是通过增加服务器资源来提升性能:
# 例如:从 16GB 增加到 64GB
# 2. 升级CPU
# 例如:从 8核升级到 32核
# 3. 使用更快的存储
# 例如:从 HDD 升级到 NVMe SSD
# 4. 优化配置
# 根据新硬件调整配置
# innodb_buffer_pool_size = 48G
# innodb_io_capacity = 4000
9.2 水平扩展
水平扩展是通过增加服务器数量来提升性能:
# 主库负责写操作,从库负责读操作
# 配置主从复制
# 主库 my.cnf
# log_bin = /var/lib/mysql/binlog
# server_id = 1
# 从库 my.cnf
# server_id = 2
# relay_log = /var/lib/mysql/relay-bin
# read_only = 1
# 从库连接主库
# CHANGE MASTER TO
# MASTER_HOST=’192.168.1.10′,
# MASTER_USER=’repl’,
# MASTER_PASSWORD=’password’,
# MASTER_LOG_FILE=’binlog.000001′,
# MASTER_LOG_POS=123456;
# START SLAVE;
# 2. 分库分表
# 根据业务逻辑进行分库分表
# 水平分表
# 例如:按用户ID分表
CREATE TABLE users_0 (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
CREATE TABLE users_1 (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
# 3. 集群
# 使用 MySQL InnoDB Cluster
# 安装 MySQL Shell
# wget https://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell-8.0.33-linux-glibc2.12-x86-64bit.tar.gz
# 配置 InnoDB Cluster
# mysqlsh
# var cluster = dba.createCluster(‘mycluster’);
# cluster.addInstance(‘root@192.168.1.11:3306’);
# cluster.addInstance(‘root@192.168.1.12:3306’);
9.3 缓存层
使用缓存层减轻数据库压力:
# 使用 Redis 作为缓存
# 安装 Redis
# yum install redis
# systemctl start redis
# 缓存示例(Python)
# import redis
# r = redis.Redis(host=’localhost’, port=6379, db=0)
#
# def get_user(id):
# key = f”user:{id}”
# user = r.get(key)
# if user:
# return json.loads(user)
# user = db.query(f”SELECT * FROM users WHERE id = {id}”)
# r.set(key, json.dumps(user), ex=3600)
# return user
# 2. 查询缓存
# 使用 MySQL 查询缓存(8.0版本已废弃)
# query_cache_size = 16M
# query_cache_type = 1
# 3. 反向代理缓存
# 使用 Nginx 作为反向代理缓存
# location /api {
# proxy_cache my_cache;
# proxy_pass http://backend;
# }
10. 性能与安全平衡最佳实践
在优化MySQL性能的同时,必须兼顾安全性,确保数据安全和系统稳定。
10.1 安全配置
合理配置MySQL安全参数:
# 配置强密码策略
# vi /etc/my.cnf
# validate_password_policy = STRONG
# validate_password_length = 12
# 2. 访问控制
# 创建最小权限用户
CREATE USER ‘app’@’192.168.1.%’ IDENTIFIED BY ‘password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO ‘app’@’192.168.1.%’;
# 3. 网络安全
# 限制绑定地址
# vi /etc/my.cnf
# bind-address = 192.168.1.10
# 4. SSL 加密
# 配置 SSL
# vi /etc/my.cnf
# ssl-ca = /etc/mysql/ssl/ca.pem
# ssl-cert = /etc/mysql/ssl/server-cert.pem
# ssl-key = /etc/mysql/ssl/server-key.pem
# 5. 审计
# 启用审计日志
# vi /etc/my.cnf
# general_log = 1
# general_log_file = /var/lib/mysql/general.log
10.2 性能与安全平衡
在性能优化和安全之间取得平衡:
# 合理配置密码验证插件
# 例如:使用 caching_sha2_password
# 2. 访问控制与性能
# 最小权限原则
# 避免过度授权
# 3. 加密与性能
# 选择性加密
# 例如:只加密敏感数据
# 4. 审计与性能
# 合理配置审计级别
# 例如:只审计关键操作
# 5. 备份与性能
# 合理安排备份时间
# 例如:在低峰期进行备份
10.3 安全最佳实践
遵循以下安全最佳实践:
# 及时更新 MySQL 版本
# 修复安全漏洞
# 2. 漏洞扫描
# 定期进行安全扫描
# 例如:使用 OpenVAS
# 3. 入侵检测
# 部署入侵检测系统
# 例如:使用 OSSEC
# 4. 灾难恢复
# 制定灾难恢复计划
# 定期演练
# 5. 安全审计
# 定期进行安全审计
# 检查权限设置
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
