1. 程式人生 > >mysql執行大量的操作時,報無法連接數據庫的錯誤

mysql執行大量的操作時,報無法連接數據庫的錯誤

mysql執行大量的操作時 報無法連接數據庫的錯誤

問題:mysql執行大量的插敘操作時,報無法連接數據庫的錯誤,錯誤詳情如下:

Fatal error: Uncaught exception ‘PDOException‘ with message ‘SQLSTATE[HY000] [2003] Can‘t connect to MySQL server on ‘127.0.0.1‘ (99)‘ in /mnt/Change/www/html/data/conn.php:5 Stack trace: #0 /mnt/Change/www/html/data/conn.php(5): PDO->__construct(‘mysql:host=127....‘, ‘aaa‘, ‘aaa‘) #1 /mnt/Change/www/html/data/conn.php(12): conn() #2 /mnt/Change/www/html/test/ZB/addHDG.php(22): Sql_Query(‘select LoopData...‘) #3 {main} thrown in /mnt/Change/www/html/data/conn.php on line 5


運行環境:linux+Apache+php+mysql

原因:對MySQL執行操作時,需要連接數據庫,連接是需要占用端口的,大量的查詢把端口用完了,數據庫也就無法連接了

查看原因:

執行大量的mysql連接時,在linux中執行

netstat -nt

就會看到大量的連接時TIME_OUT狀態

解決辦法

第一步:優化mysql,在拿到數據之後,立刻關閉mysql連接

1pdo只需要把連接置成null即可

$pdo=new PDO("mysql:host=127.0.0.1;dbname=aaa","aaa","aaa");
//在拿到數據之後執行下面語句即可
$pdo=null;


第二步:優化linux系統

1)在/etc/sysctl.cnf中寫入下面語句

net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

解釋:

net.ipv4.tcp_tw_recycle=1就是打開快速 TIME-WAIT sockets 回收,即快速回收處於TIME-WAIT的連接,默認值是0,即關閉狀態

net.ipv4.tcp_fin_timeout :設置連接超時時間,單位是秒,默認值是60

net.ipv4.tcp_tw_reuse =1:允許重新應用處於TIME-WAIT狀態的socket用於新的TCP連接,默認值是

0,即關閉狀態

2)在linux中執行

sysctl -p

使上面的配置生效



本文出自 “技術” 博客,請務必保留此出處http://heyu1.blog.51cto.com/13158032/1956343

mysql執行大量的操作時,報無法連接數據庫的錯誤