【发布时间】:2015-02-26 21:12:02
【问题描述】:
我有两台服务器,一台是运行 apache 和 php 的网络服务器,另一台是使用 MySQL 的数据库服务器。第一个使用第二个的数据库,每天24小时,每周7天。
问题是最近开始有时每天都会出错,PHP 应用程序显示以下消息:
Can't connect to MySQL server on 'IP_DO_BANCO_DE_DADOS' (4)
我们的网络服务器中有一些 PHP 应用程序。这些应用程序之一(旧版)不使用任何框架,并且本机使用 PHP 连接到 MySQL:
function AbreBD($mysqli = false) {
global $conexao, $selecao, $conexao_mysqli;
$servidor = '192.168.101.20:3306';
$usuarioBD = 'user';
$senhaBD = 'user';
$conexao = mysql_connect($servidor, $usuarioBD, $senhaBD);
$selecao = mysql_select_db("bioextratus", $conexao);
if ($mysqli) {
$conexao_mysqli = new mysqli($servidor, $usuarioBD, $senhaBD, "bioextratus");
}
}
请记住,上面的代码是针对遗留应用程序的,并且仍然使用 mysql 驱动程序而不是 mysqli。即使在我们最现代的带有 codeigniter 框架的应用程序中,也会出现这个问题。
我相信问题是 MySQL 配置或网络问题,尽管 MySQL 服务始终可用,以及两台服务器之间的通信。
MySQL服务器的my.cnf文件内容为(无cmets):
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
explicit_defaults_for_timestamp = false
open_files_limit = 102400
bind-address = 0.0.0.0
key_buffer = 16M
key_buffer_size = 512M
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 8M
max_allowed_packet = 16M
thread_stack = 196K
thread_cache_size = 8
myisam-recover-options = BACKUP
query_cache_limit = 64M
query_cache_type = 1
query_cache_size = 256M
max_connections = 1024
max_user_connections = 0
sort_buffer_size = 2M
join_buffer_size = 1M
tmp_table_size = 64M
max_heap_table_size = 18M
log_error = /var/log/mysql/error.log
expire_logs_days = 10
max_binlog_size = 100M
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[isamchk]
key_buffer = 12M
【问题讨论】:
-
您似乎遇到了两个问题之一(或可能两者都有)。您的数据库服务器太忙,或者您的 Web 服务器和数据库服务器之间的网络连接太忙。无论哪种方式,这里都没有足够的数据来诊断问题。如果这可以通过编程来解决,那么这里没有任何东西可以让我们提供帮助。您需要分析您的系统并确定瓶颈。只有你能做到。
-
您最近是否更改了配置?还是问题开始时没有变化?服务器是否在同一个局域网中,或者您是否有其他由托管服务提供商引入的未知变量?我们需要更多信息。
标签: php mysql codeigniter mysqli