1.
环境准备与基础安全
- 步骤1:登录与更新系统:SSH 登录台湾机房的 VPS/托管主机,执行:
sudo apt update && sudo apt upgrade -y
- 步骤2:创建运维账号并配置 sudo:
sudo adduser deploy && sudo usermod -aG sudo deploy
- 步骤3:防火墙与端口策略(以 UFW 为例):只开放 22(SSH)、80/443;数据库仅本地或指定内网访问:
sudo ufw allow OpenSSH; sudo ufw allow 80; sudo ufw allow 443; sudo ufw enable
- 小贴士:将数据库绑定到 127.0.0.1(或内网 IP),避免直接暴露到公网。
2.
MySQL / MariaDB 安装与基本配置
- 安装:sudo apt install mariadb-server -y
- 初始化与安全脚本:sudo mysql_secure_installation,逐项启用强密码、移除匿名用户、禁止远程 root。
- 配置文件调整(/etc/mysql/my.cnf 或 /etc/mysql/mariadb.conf.d/50-server.cnf):
[mysqld]
bind-address = 127.0.0.1
innodb_buffer_pool_size = 1G # 根据内存调整为总内存的60%-70%
max_connections = 200 # 根据并发调整
innodb_log_file_size = 512M # 写入量大的站点可增大
- 重启并验证:sudo systemctl restart mariadb && mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
3.
查询缓冲与慢查询优化
- 启用慢查询日志并设置阈值(my.cnf):slow_query_log = 1; slow_query_log_file = /var/log/mysql/slow.log; long_query_time = 1
- 使用 pt-query-digest 或 mysqldumpslow 分析慢查询,定位索引不足或不合理的 JOIN,针对性添加索引/重写 SQL。
- 定期统计表和优化表:mysqlcheck -o --all-databases 或使用 OPTIMIZE TABLE。
4.
连接池与中间件(减少并发压力)
- 对 MySQL:部署 ProxySQL(推荐)或 ProxySQL + Galera,能做读写分离、连接复用。快速安装:
sudo apt install proxysql -y,编辑 /etc/proxysql.cnf,配置 mysql_servers 与 mysql_users,然后 systemctl restart proxysql。
- 对 PostgreSQL 可选 pgbouncer,设置 pool_mode=transaction,连接数控制。
5.
Redis 与 Memcached 的安装及适用场景
- Redis 安装:sudo apt install redis-server -y,编辑 /etc/redis/redis.conf:bind 127.0.0.1;requirepass yourstrongpass;maxmemory 1G;maxmemory-policy allkeys-lru;appendonly yes(需要持久化时)。重启并测试:redis-cli -a yourstrongpass ping。
- Memcached 安装:sudo apt install memcached -y,通常用于简单对象缓存,配置 /etc/memcached.conf:-m 512(MB)-p 11211 -l 127.0.0.1。
- 选择建议:需要复杂数据结构或持久化选 Redis;只需快速对象缓存用 Memcached。
6.
PHP-FPM 与 OpCache 配置(虚拟主机常见)
- 编辑 /etc/php/7.x/fpm/php.ini 与 /etc/php/7.x/fpm/pool.d/www.conf:
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
pm = dynamic
pm.max_children = 30 # 根据内存与平均每进程占用估算:总内存/(每进程内存) 取整
- 重启 PHP-FPM:sudo systemctl restart php7.x-fpm。测试 PHP-FPM 性能并观察 slow log。
7.
Nginx 反向代理与缓存设置实操
- 在 /etc/nginx/nginx.conf 定义 fastcgi_cache_path:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYCACHE:100m inactive=60m max_size=1g;
- 在站点配置中启用:
fastcgi_cache MYCACHE;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 404 1m;
add_header X-Cache $upstream_cache_status;
- 清理缓存:sudo rm -rf /var/cache/nginx/* 或使用自定义 purge 脚本(推荐结合缓存键管理)。
8.
备份与恢复流程(务必可自动化)
- MySQL 逻辑备份(每日):mysqldump -u root -p --single-transaction --quick --routines --triggers dbname > /backup/dbname_$(date +%F).sql
- 增量/物理备份:使用 Percona XtraBackup 进行热备份或启用 binlog 进行二进制恢复。
- Redis:使用 BGSAVE 触发快照并 rsync 到备份服务器;若启用 AOF,定期备份 appendonly.aof。
- 建议:配置异地备份(台湾机房到其他可用区),并用 cron + 保留策略自动化。
9.
监控、压测与调优闭环
- 部署监控:Prometheus + Grafana 或 Zabbix,监控指标包含:DB QPS、慢查询、inno_buffer_pool 使用率、Redis hit/miss、PHP-FPM 用量、Nginx 上游状态。
- 压测工具:mysqlslap、sysbench、ab、wrk、redis-benchmark,根据真实流量模拟并观察瓶颈位置。
- 调优流程:监控发现瓶颈 -> 确认是 CPU/IO/内存/网络 -> 针对性调参(如 innodb_buffer_pool_size、maxmemory)-> 重测 -> 写入变更控制清单并回滚策略。
10.
Q1:在台湾托管环境,数据库最常见的部署错误是什么?
- A1:常见错误包括:数据库直接开放公网端口、未设置连接池导致并发瞬时撑爆、innodb_buffer_pool_size 配置过小或过大、没有启用慢查询日志和定期备份。解决办法参照本文步骤:绑定本地/内网、部署 ProxySQL/pgbouncer、按内存比例设置 buffer、开启慢查询与自动备份。
11.
Q2:如何在虚拟主机上同时使用 Redis 与文件缓存以取得最佳效果?
- A2:将短期热数据和会话放 Redis(设置 maxmemory-policy 为 allkeys-lru),较大并且不常更新的静态渲染结果可使用 Nginx fastcgi_cache 或文件缓存降低内存占用。应用层:先查 Redis,未命中再读取后端并写入 Redis 与文件缓存,设置不同 TTL 并定期清理。
12.
Q3:如果修改了数据库参数后出问题,如何快速回滚?
- A3:在生产修改前先在测试环境跑压测并保存原始 my.cnf/redis.conf 备份(cp 到 /root/config.backup),使用版本控制。若出问题立刻替换回备份并重启服务:sudo cp /root/config.backup/my.cnf /etc/mysql/my.cnf && sudo systemctl restart mariadb。同时查看 slow log 与监控确认恢复。
来源:台湾服务器托管虚拟主机 数据库与缓存配置的实战建议