优化 CentOS 上的 LNMP(Linux, Nginx, MySQL/MariaDB, PHP)环境中的数据库连接,可以从多个方面入手,包括配置优化、性能调优、硬件资源管理等。以下是一些详细的优化建议:
my.cnf
或 my.ini
配置文件编辑 /etc/my.cnf
或 /etc/mysql/my.cnf
文件,根据服务器的硬件和应用需求进行调整。
[mysqld]
# 基本设置
bind-address = 0.0.0.0 # 允许远程连接
port = 3306
socket = /var/lib/mysql/mysql.sock
# 连接数设置
max_connections = 500
thread_cache_size = 50
table_open_cache = 2000
table_definition_cache = 1000
# 查询缓存
query_cache_size = 64M
query_cache_type = 1
# 缓冲区和缓存
innodb_buffer_pool_size = 70% of total RAM
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
# 日志设置
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-queries.log
long_query_time = 2
# 其他优化
skip-name-resolve # 如果不需要DNS解析,可以跳过
sudo systemctl restart mysqld
nginx.conf
配置文件编辑 /etc/nginx/nginx.conf
文件,确保连接数和缓冲区大小适当。
events {
worker_connections 1024; # 根据服务器性能调整
}
http {
...
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
...
}
sudo systemctl restart nginx
php.ini
配置文件编辑 /etc/php.ini
文件,调整与数据库连接相关的参数。
max_execution_time = 30
memory_limit = 128M
post_max_size = 8M
upload_max_filesize = 2M
; PDO 设置
pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
sudo systemctl restart php-fpm
对于高并发应用,使用数据库连接池可以有效减少连接开销。例如,使用 mysqli
或 PDO
的持久连接功能。
$mysqli = new mysqli('localhost', 'user', 'password', 'database', 3306, '/var/run/mysqld/mysqld.sock');
使用工具如 mysqltuner.pl
或 pt-query-digest
来分析和优化数据库性能。
wget http://mysqltuner.pl/mysqltuner.pl -O mysqltuner.pl
perl mysqltuner.pl
确保服务器有足够的内存、CPU 和磁盘I/O 资源。考虑使用 SSD 硬盘以提高数据库读写速度。
定期备份数据库,并确保数据库连接的安全性,例如使用 SSL 加密连接。
通过以上步骤,可以显著优化 CentOS 上的 LNMP 环境中的数据库连接性能。根据具体应用的需求和服务器的硬件配置,可能需要进一步调整和优化。