MySQL 8.0.26 DEB Bundle安装后,别忘了做这几件事(Ubuntu 18.04安全与性能调优)
MySQL 8.0.26 DEB Bundle安装后的关键配置指南Ubuntu 18.04安全与性能调优当你通过DEB Bundle方式在Ubuntu 18.04上成功安装MySQL 8.0.26后真正的挑战才刚刚开始。许多开发者误以为安装完成就意味着可以立即投入使用但实际上默认配置既不符合生产环境的安全要求也无法发挥MySQL的最佳性能。本文将带你完成从能用到好用的关键转变。1. 安全加固从默认安装到生产就绪MySQL的默认安装配置为了方便初次使用者牺牲了部分安全性。在生产环境中我们需要主动加固这些薄弱环节。1.1 修改root账户安全策略安装完成后第一件事就是处理root账户。运行以下命令进入MySQL交互界面mysql -u root -p然后执行这些关键操作-- 修改root密码即使安装时已设置也建议重置 ALTER USER rootlocalhost IDENTIFIED BY 你的新复杂密码; -- 禁止root账户远程登录 DELETE FROM mysql.user WHERE Userroot AND Host NOT IN (localhost, 127.0.0.1); -- 重命名root账户可选但推荐 RENAME USER rootlocalhost TO adminlocalhost;注意密码策略要求至少12个字符包含大小写字母、数字和特殊符号。避免使用字典单词或简单序列。1.2 创建专用应用账户永远不要使用root账户运行应用程序。为每个应用创建独立账户CREATE USER app_user% IDENTIFIED BY 强密码; GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO app_user%; FLUSH PRIVILEGES;账户权限分配原则权限类型生产环境建议开发环境建议SELECTINSERTUPDATEDELETECREATEDROPGRANT1.3 配置UFW防火墙规则即使MySQL配置了绑定地址系统防火墙也不可忽视sudo ufw allow from 192.168.1.0/24 to any port 3306 # 只允许内网访问 sudo ufw enable sudo ufw status verbose # 验证规则2. 性能调优基础参数调整MySQL 8.0的默认配置偏保守需要根据服务器资源进行调整。2.1 内存相关参数编辑/etc/mysql/my.cnf文件在[mysqld]段添加innodb_buffer_pool_size 4G # 建议为物理内存的50-70% innodb_buffer_pool_instances 4 # 每个实例至少1GB innodb_log_file_size 512M key_buffer_size 256M计算innodb_buffer_pool_size的推荐值# 获取系统内存(MB) free -m | awk /Mem:/ {print $2}2.2 连接与线程配置max_connections 200 thread_cache_size 50 table_open_cache 4000监控连接使用情况SHOW STATUS LIKE Threads_connected; SHOW VARIABLES LIKE max_connections;2.3 存储引擎优化innodb_flush_method O_DIRECT innodb_file_per_table ON innodb_flush_neighbors 0 # SSD建议关闭 innodb_io_capacity 2000 # SSD建议20003. 运维必备监控与维护设置3.1 启用性能监控-- 启用性能schema UPDATE performance_schema.setup_instruments SET ENABLED YES; UPDATE performance_schema.setup_consumers SET ENABLED YES; -- 创建监控专用账户 CREATE USER monitorlocalhost IDENTIFIED BY 监控密码; GRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO monitorlocalhost;3.2 配置自动备份创建备份脚本/usr/local/bin/mysql_backup.sh#!/bin/bash DATE$(date %Y%m%d) BACKUP_DIR/var/backups/mysql MYSQL_USERbackup_user MYSQL_PASSWORD备份密码 mkdir -p $BACKUP_DIR mysqldump --all-databases --single-transaction \ -u$MYSQL_USER -p$MYSQL_PASSWORD | gzip $BACKUP_DIR/full_$DATE.sql.gz # 保留最近7天备份 find $BACKUP_DIR -type f -name *.sql.gz -mtime 7 -delete设置定时任务sudo chmod x /usr/local/bin/mysql_backup.sh sudo crontab -e # 添加以下内容 0 2 * * * /usr/local/bin/mysql_backup.sh4. 高级配置为特定场景优化4.1 针对Web应用的优化# 在my.cnf中添加 query_cache_type 0 # MySQL 8.0已弃用保持关闭 tmp_table_size 64M max_heap_table_size 64M join_buffer_size 4M sort_buffer_size 4M4.2 事务隔离级别调整查看当前隔离级别SELECT transaction_isolation;建议大多数Web应用使用SET GLOBAL transaction_isolation READ-COMMITTED;4.3 配置连接池参数如果使用连接池如HikariCP需要调整wait_timeout 300 interactive_timeout 300验证连接状态SHOW VARIABLES LIKE %timeout%;