在Ubuntu 20.04轻量服务器上部署和优化MySQL 5.7,可按以下步骤操作:
一、部署MySQL 5.7
1. 安装MySQL
# 更新系统
sudo apt update
sudo apt upgrade -y
# 安装MySQL 5.7
sudo apt install mysql-server-5.7 -y
# 启动服务
sudo systemctl start mysql
sudo systemctl enable mysql
2. 安全配置
# 运行安全脚本
sudo mysql_secure_installation
# 基本设置建议:
# - 设置root密码
# - 移除匿名用户
# - 禁止远程root登录
# - 移除测试数据库
# - 重新加载权限表
二、性能优化配置
1. 基础配置文件优化(/etc/mysql/mysql.conf.d/mysqld.cnf)
[mysqld]
# 基础设置
innodb_buffer_pool_size = 256M # 根据内存调整,建议为可用内存的50-70%
innodb_log_file_size = 64M
max_connections = 100 # 轻量服务器建议值
thread_cache_size = 8
# 查询缓存(MySQL 5.7默认关闭,建议保持关闭)
query_cache_type = 0
query_cache_size = 0
# InnoDB优化
innodb_flush_log_at_trx_commit = 2 # 平衡性能和数据安全
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_buffer_pool_instances = 1 # 小内存服务器设为1
# 连接设置
wait_timeout = 600
interactive_timeout = 600
# 日志设置
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
2. 根据服务器规格调整(示例)
1GB内存服务器:
innodb_buffer_pool_size = 512M
key_buffer_size = 16M
tmp_table_size = 32M
max_heap_table_size = 32M
2GB内存服务器:
innodb_buffer_pool_size = 1G
key_buffer_size = 32M
tmp_table_size = 64M
max_heap_table_size = 64M
三、系统级优化
1. 调整系统限制
# 编辑limits.conf
sudo nano /etc/security/limits.conf
# 添加:
mysql soft nofile 65535
mysql hard nofile 65535
# 编辑sysctl.conf
sudo nano /etc/sysctl.conf
# 添加:
vm.swappiness = 10
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 2048
2. 配置交换空间(如果内存较小)
# 创建交换文件(2GB示例)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
四、MySQL性能调优
1. 监控和诊断工具
# 安装监控工具
sudo apt install mytop -y
sudo apt install percona-toolkit -y
# 常用诊断命令
mysql -e "SHOW GLOBAL STATUS;"
mysql -e "SHOW ENGINE INNODB STATUSG"
mysql -e "SHOW PROCESSLIST;"
2. 定期优化表
-- 分析表使用情况
SELECT table_schema, table_name,
data_length/1024/1024 as data_mb,
index_length/1024/1024 as index_mb
FROM information_schema.tables
ORDER BY data_length DESC LIMIT 10;
五、安全加固
1. 网络访问限制
# 修改绑定地址(如只需本地访问)
# 在mysqld.cnf中:
bind-address = 127.0.0.1
# 或允许特定IP(如需要远程访问)
# bind-address = 0.0.0.0
# 然后配置防火墙
sudo ufw allow from 客户端IP to any port 3306
2. 创建专用用户
-- 创建应用专用用户
CREATE USER 'app_user'@'localhost' IDENTIFIED BY '强密码';
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
六、维护脚本
创建自动维护脚本 /usr/local/bin/mysql-maintenance.sh:
#!/bin/bash
# 自动优化脚本
mysqlcheck -u root -p --auto-repair --optimize --all-databases
mysql -e "FLUSH TABLES;"
mysql -e "FLUSH QUERY CACHE;"
设置定时任务:
sudo crontab -e
# 每周日凌晨3点执行
0 3 * * 0 /usr/local/bin/mysql-maintenance.sh
七、备份策略
# 创建备份脚本
sudo nano /usr/local/bin/mysql-backup.sh
# 内容:
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u root -p --all-databases | gzip > $BACKUP_DIR/full_backup_$DATE.sql.gz
# 保留最近7天备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
注意事项:
- 修改配置后重启MySQL:
sudo systemctl restart mysql - 使用
mysqltuner进行配置检查:wget mysqltuner.pl && perl mysqltuner.pl - 监控服务器资源:
htop、iotop、nmon - 定期查看慢查询日志并优化相关SQL
根据实际负载情况,可能需要进一步调整参数。建议先在测试环境验证配置,再应用到生产环境。
CLOUD技术笔记