在CentOS或Ubuntu轻量云服务器上部署MySQL+Redis生产环境,以下是我推荐的配置方案:
一、系统选择建议
推荐Ubuntu LTS版本(20.04/22.04):
- 软件包更新及时,社区支持好
- 内存占用相对较少
- 更适合轻量级服务器
二、MySQL配置推荐
1. 安装选择
# Ubuntu
sudo apt install mysql-server-8.0
# CentOS
sudo yum install mysql-server
2. 关键配置优化(my.cnf)
[mysqld]
# 基础配置
bind-address = 0.0.0.0
port = 3306
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
# 内存优化(针对1-2GB内存服务器)
innodb_buffer_pool_size = 256M # 调整为物理内存的50-70%
key_buffer_size = 32M
max_connections = 100 # 根据实际需求调整
thread_cache_size = 8
# 性能优化
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
# 查询缓存(MySQL 8.0已移除,5.7可配置)
# query_cache_type = 0
# 日志配置
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
3. 安全配置
# 运行安全脚本
sudo mysql_secure_installation
# 创建专用用户
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%';
FLUSH PRIVILEGES;
三、Redis配置推荐
1. 安装
# Ubuntu
sudo apt install redis-server
# CentOS
sudo yum install redis
2. 关键配置优化(redis.conf)
# 基础配置
bind 0.0.0.0
port 6379
daemonize yes
pidfile /var/run/redis/redis-server.pid
logfile /var/log/redis/redis-server.log
dir /var/lib/redis
# 内存管理(针对1-2GB服务器)
maxmemory 512mb # 不超过物理内存的60%
maxmemory-policy allkeys-lru # 内存满时的淘汰策略
maxmemory-samples 5
# 持久化配置(根据需求选择)
# RDB快照
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
# AOF追加(数据安全要求高时启用)
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 性能优化
tcp-backlog 511
timeout 0
tcp-keepalive 300
loglevel notice
databases 16
# 安全配置
requirepass "YourStrongRedisPassword123!"
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command CONFIG ""
3. 系统优化
# 调整内核参数
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
echo 'net.core.somaxconn = 1024' >> /etc/sysctl.conf
sysctl -p
# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
四、安全加固措施
1. 防火墙配置
# Ubuntu使用ufw
sudo ufw allow 22/tcp
sudo ufw allow 3306/tcp # MySQL
sudo ufw allow 6379/tcp # Redis
sudo ufw enable
# CentOS使用firewalld
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --reload
2. SSH安全
# 修改SSH端口
Port 2222
# 禁用root登录
PermitRootLogin no
# 使用密钥认证
PasswordAuthentication no
3. 服务限制
# 创建专用用户组
sudo groupadd dba
sudo useradd -r -g dba -s /bin/false mysqluser
sudo useradd -r -g dba -s /bin/false redisuser
# 修改文件权限
sudo chown -R mysqluser:dba /var/lib/mysql
sudo chown -R redisuser:dba /var/lib/redis
五、监控与维护
1. 基础监控脚本
#!/bin/bash
# check_services.sh
echo "=== MySQL Status ==="
systemctl status mysql --no-pager | grep Active
mysqladmin -u root -p ping
echo -e "n=== Redis Status ==="
systemctl status redis --no-pager | grep Active
redis-cli -a 'password' ping
echo -e "n=== Memory Usage ==="
free -h
echo -e "n=== Disk Usage ==="
df -h
2. 日志轮转
# 配置logrotate
sudo nano /etc/logrotate.d/mysql-redis
# 内容示例
/var/log/mysql/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 mysql adm
postrotate
test -x /usr/bin/mysqladmin || exit 0
mysqladmin flush-logs
endscript
}
/var/log/redis/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 redis redis
}
六、备份策略
1. MySQL备份
#!/bin/bash
# mysql_backup.sh
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="your_database"
mysqldump -u root -p'password' --single-transaction
--routines --triggers $DB_NAME | gzip > $BACKUP_DIR/$DB_NAME_$DATE.sql.gz
# 保留最近7天备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
2. Redis备份
#!/bin/bash
# redis_backup.sh
BACKUP_DIR="/backup/redis"
DATE=$(date +%Y%m%d)
# RDB备份
cp /var/lib/redis/dump.rdb $BACKUP_DIR/dump_$DATE.rdb
# AOF备份(如果启用)
cp /var/lib/redis/appendonly.aof $BACKUP_DIR/appendonly_$DATE.aof
# 保留最近7天备份
find $BACKUP_DIR -name "*.rdb" -mtime +7 -delete
find $BACKUP_DIR -name "*.aof" -mtime +7 -delete
七、性能调优建议
-
根据服务器规格调整:
- 1GB内存:MySQL缓冲池256M,Redis最大内存512M
- 2GB内存:MySQL缓冲池1G,Redis最大内存1G
-
连接数优化:
-- 监控连接数 SHOW STATUS LIKE 'Threads_connected'; SHOW VARIABLES LIKE 'max_connections'; -
定期维护:
-- MySQL优化表 OPTIMIZE TABLE important_table; -- Redis内存碎片整理 redis-cli -a 'password' MEMORY PURGE
注意事项
- 测试环境验证:所有配置先在测试环境验证
- 逐步调整:监控系统资源使用情况,逐步优化参数
- 文档记录:记录所有配置变更
- 定期更新:保持系统和软件的安全更新
- 监控告警:设置关键指标监控和告警
这些配置针对轻量级云服务器进行了优化,平衡了性能、稳定性和资源使用。根据实际业务负载情况,可能需要进一步调整特定参数。
CLOUD技术笔记