解決mysql 1040錯(cuò)誤Too many connections的方法
mysql官方告訴我們需要修改max_connections的值,那么我們?cè)趺慈バ薷哪??有兩種方法
1、修改配置文件文件
修改/etc/my.cnf這個(gè)文件,在[mysqld]中新增max_connections=N,如果你沒有這個(gè)文件請(qǐng)從編譯源碼中的support-files文件夾中復(fù)制你所需要的*.cnf文件為到/etc/my.cnf。我使用的是my-medium.cnf,中型服務(wù)器配置。例如我的[mysqld]的內(nèi)容如下
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 160M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections=1000
由于對(duì)mysql還不是很熟悉,所以很多參數(shù)沒有修改。哈哈。。
2、非使用mysqld腳本自動(dòng)啟動(dòng)的用戶。
修改$MYSQL_HOME/bin/mysqld_safe文件
例如:/usr/local/mysql/bin/mysqld_safe這個(gè)文件
grep -n 'max_connection' $MYSQL_HOME/bin/mysqld_safe
修改對(duì)應(yīng)行號(hào)的max_connections參數(shù)值
以上方法為參考網(wǎng)上的做法寫的。
方法二:
在PHP手冊(cè)里面找關(guān)于mysql_connect和mysql_pconnect的資料,下面是在php手冊(cè)中對(duì)這兩個(gè)函數(shù)的描述:
mysql_connect 函數(shù)原型:
resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]])
返回:
如果成功則返回一個(gè)MySQL 連接標(biāo)識(shí),失敗則返回FALSE。
描述:
mysql_connect() 建立一個(gè)到MySQL 服務(wù)器的連接。當(dāng)沒有提供可選參數(shù)時(shí)使用以下默認(rèn)值:server = 'localhost:3306',username =
服務(wù)器進(jìn)程所有者的用戶名,password = 空密碼。
如果用同樣的參數(shù)第二次調(diào)用mysql_connect(),將不會(huì)建立新連接,而將返回已經(jīng)打開的連接標(biāo)識(shí)。參數(shù)new_link 改變此行為并使
mysql_connect() 總是打開新的連接,甚至當(dāng)mysql_connect() 曾在前面被用同樣的參數(shù)調(diào)用過。參數(shù)client_flags 可以是以下常量的組合
:MYSQL_CLIENT_COMPRESS,MYSQL_CLIENT_IGNORE_SPACE 或者M(jìn)YSQL_CLIENT_INTERACTIVE。
注: new_link 參數(shù)自PHP 4.2.0 起可用。
client_flags 參數(shù)自PHP 4.3.0 起可用。
一旦腳本結(jié)束,到服務(wù)器的連接就會(huì)被關(guān)閉。除非之前已經(jīng)調(diào)用了mysql_close() 來關(guān)閉它。
mysql_pconnect :
函數(shù)原型:
resource mysql_pconnect ( [string server [, string username [, string password [, int client_flags]]]])
返回:
如果成功則返回一個(gè)正的MySQL 持久連接標(biāo)識(shí)符,出錯(cuò)則返回FALSE。
描述:
mysql_pconnect() 建立一個(gè)到MySQL 服務(wù)器的連接。如果沒有提供可選參數(shù),則使用如下默認(rèn)值:server = 'localhost:3306',
username = 服務(wù)器進(jìn)程所有者的用戶名,password = 空密碼。client_flags 參數(shù)可以是以下常量的組合:MYSQL_CLIENT_COMPRESS,
MYSQL_CLIENT_IGNORE_SPACE 或者M(jìn)YSQL_CLIENT_INTERACTIVE。
server 參數(shù)也可以包括端口號(hào),例如"hostname:port",或者是本機(jī)套接字的的路徑,例如":/path/to/socket"。
注: 對(duì)":port" 的支持是3.0B4 版添加的。
對(duì)":/path/to/socket" 的支持是3.0.10 版添加的。 兩者之間的區(qū)別 :
mysql_pconnect() 和mysql_connect() 非常相似,但有兩個(gè)主要區(qū)別。
首先,當(dāng)連接的時(shí)候本函數(shù)將先嘗試尋找一個(gè)在同一個(gè)主機(jī)上用同樣的用戶名和密碼已經(jīng)打開的(持久)連接,如果找到,則返回此連接標(biāo)識(shí)而不打開新連接。
其次,當(dāng)腳本執(zhí)行完畢后到SQL 服務(wù)器的連接不會(huì)被關(guān)閉,此連接將保持打開以備以后使用(mysql_close() 不會(huì)關(guān)閉由mysql_pconnect() 建立的連接)。
可選參數(shù)client_flags 自PHP 4.3.0 版起可用。此種連接稱為"持久的"。
小結(jié)一下,要保證你的系統(tǒng)不會(huì)出現(xiàn)Too many connections 錯(cuò)誤,需要注意兩點(diǎn):
1.保證你的apache的最大進(jìn)程數(shù)不超過mysql的最大連接數(shù);
2.不要在程序里面用過多mysql_pconnect連接到同一個(gè)數(shù)據(jù)庫服務(wù)器(一個(gè)就夠了).這需要好的編碼習(xí)慣和規(guī)范.特別是不斷的給系統(tǒng)增加
新的功能,如果不注重系統(tǒng)架構(gòu)和編碼規(guī)范,當(dāng)系統(tǒng)的復(fù)雜度到了一定的程度,整個(gè)系統(tǒng)就變得無法維護(hù)了.出現(xiàn)問題的時(shí)候解決起來就很麻煩了.
解決方法是修改/etc/mysql/my.cnf,添加以下一行:
set-variable = max_connections=500
或在啟動(dòng)命令中加上參數(shù)max_connections=500
就是修改最大連接數(shù),然后重啟mysql.默認(rèn)的連接數(shù)是100,太少了,所以容易出現(xiàn)如題錯(cuò)誤
以上摘自 宋利興的專欄 以下為補(bǔ)充:
1.可能是mysql的max connections設(shè)置的問題
2.可能是多次insert,update操作沒有關(guān)閉session,需要在spring里配置transaction支持。
解決:
1.修改tomcat里的session 的time-out時(shí)間減少為20,(不是必改項(xiàng))
2.對(duì)處理量大的對(duì)數(shù)據(jù)庫insert或update的操作提供transaction支持.
=======================================
下面的是解決辦法:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
原因:
因?yàn)槟愕膍ysql安裝目錄下的my.ini中設(shè)定的并發(fā)連接數(shù)太少或者系統(tǒng)繁忙導(dǎo)致連接數(shù)被占滿
解決方式:
打開MYSQL安裝目錄打開MY.INI找到max_connections(在大約第93行)默認(rèn)是100 一般設(shè)置到500~1000比較合適,重啟mysql,這樣1040錯(cuò)誤就解決啦。
max_connections=1000
一定要重新啟動(dòng)MYSQL才能生效
CMD->
net stop mysql
net start mysql
關(guān)于改變innodb_log_file_size后無法啟動(dòng)mysql的問題
innodb_buffer_pool_size=768M
innodb_log_file_size=256M
innodb_log_buffer_size=8M
innodb_additional_mem_pool_size=4M
innodb_flush_log_at_trx_commit=0
innodb_thread_concurrency=20
以上是對(duì)innodb引擎的初步優(yōu)化, 發(fā)現(xiàn)是更新innodb_log_file_size=256M時(shí)候出現(xiàn)了問題,只要加上這個(gè)就無法啟動(dòng),
后來才知道原來要STOP服務(wù)先,然后再刪除原來的文件………
打開/MySQL Server 5.5/data
刪除ib_logfile0, ib_logfile1........ib_logfilen
再開啟選項(xiàng),成功啟動(dòng)。
相關(guān)文章
MySQL開啟慢查詢?nèi)罩緇og-slow-queries的方法
MySQL中提供了一個(gè)慢查詢的日志記錄功能,可以把查詢SQL語句時(shí)間大于多少秒的語句寫入慢查詢?nèi)罩?,日常維護(hù)中可以通過慢查詢?nèi)罩镜挠涗浶畔⒖焖贉?zhǔn)確地判斷問題所在2016-05-05MySQL數(shù)據(jù)庫的觸發(fā)器和事務(wù)
這篇文章主要介紹了MySQL數(shù)據(jù)庫的觸發(fā)器和事務(wù),觸發(fā)器是SQL?server提供給程序員和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過程,是由事件來觸發(fā)2022-08-08Myeclipse連接mysql數(shù)據(jù)庫心得體會(huì)
這篇文章主要為大家詳細(xì)介紹了MyEclipse連接MySQL數(shù)據(jù)庫圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10如何使用mysqladmin獲取一個(gè)mysql實(shí)例當(dāng)前的TPS和QPS
這篇文章主要介紹了如何使用mysqladmin這個(gè)工具來獲取一個(gè)mysql實(shí)例當(dāng)前的TPS和QPS,幫助大家更好的管理數(shù)據(jù)庫,感興趣的朋友可以了解下2020-11-11MySQL數(shù)據(jù)庫數(shù)據(jù)視圖
這篇文章主要介紹了MySQL數(shù)據(jù)庫數(shù)據(jù)視圖,視圖是原始數(shù)據(jù)庫數(shù)據(jù)的一種變換,是查看表中數(shù)據(jù)的另外一種方式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08mysql學(xué)習(xí)筆記之完整的select語句用法實(shí)例詳解
這篇文章主要介紹了mysql學(xué)習(xí)筆記之完整的select語句用法,結(jié)合實(shí)例形式詳細(xì)分析了mysql select語句各種常見參數(shù)、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04mysql 截取指定的兩個(gè)字符串之間的內(nèi)容
今天我同事在用mysql的時(shí)候,需要對(duì)一個(gè)字符串中的指定內(nèi)容進(jìn)行截取2009-07-07