Ubuntu 20.04在轻量服务器上部署MySQL 5.7并优化性能的方法?

在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

注意事项:

  1. 修改配置后重启MySQL:sudo systemctl restart mysql
  2. 使用mysqltuner进行配置检查:wget mysqltuner.pl && perl mysqltuner.pl
  3. 监控服务器资源:htopiotopnmon
  4. 定期查看慢查询日志并优化相关SQL

根据实际负载情况,可能需要进一步调整参数。建议先在测试环境验证配置,再应用到生产环境。

云服务器