在Ubuntu上优化PHP与数据库(如MySQL)的连接,可以通过以下几个方面来实现:
持久连接可以减少每次请求时建立和关闭连接的开销。
// 使用持久连接
$mysqli = new mysqli('p:localhost', 'user', 'password', 'database');
编辑MySQL配置文件(通常是/etc/mysql/my.cnf
或/etc/mysql/mysql.conf.d/mysqld.cnf
),进行以下优化:
[mysqld]
# 增加连接数限制
max_connections = 500
# 调整连接超时时间
wait_timeout = 300
interactive_timeout = 300
# 启用查询缓存(适用于读密集型应用)
query_cache_size = 64M
query_cache_type = 1
# 调整缓冲区大小
innodb_buffer_pool_size = 1G # 根据服务器内存调整
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
连接池可以管理一组数据库连接,减少连接的创建和销毁开销。
$dsn = 'mysql:host=localhost;dbname=database;charset=utf8';
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$pdo = new PDO($dsn, 'user', 'password', $options);
例如,使用Amphp/MySQL
库:
use Amp\Loop;
use Amp\MySQL;
Loop::run(function () use ($dsn, $user, $password) {
$connection = new MySQL\Connection($dsn, $user, $password);
$result = $connection->query('SELECT * FROM table');
$rows = $result->fetchAll();
print_r($rows);
});
mysqli_close($mysqli);
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
使用缓存系统(如Redis、Memcached)来缓存频繁访问的数据,减少数据库负载。
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('key', 'value');
$value = $redis->get('key');
通过以上方法,可以显著提高PHP在Ubuntu上与数据库连接的性能和效率。