2009-10-29 4 views
61

में मैंने हाल ही में पाया है कि एक एसक्यूएल क्वेरी जो पहले ठीक चल रही थी, अब 60 सेकंड के बाद समाप्त हो रही है और एक त्रुटि फेंक रही है। क्वेरी धीमी है लेकिन रात की नौकरी के हिस्से के रूप में चलती है, इसलिए यह स्वयं में कोई समस्या नहीं है (इसलिए कृपया सुझाव न दें कि मैं इसे अनुकूलित करता हूं)।MySQL सर्वर चला गया है - बिल्कुल 60 सेकंड

मैं "एसएलईईपी (120) का चयन करके लगातार त्रुटि को पुन: पेश करने में सक्षम हूं;" जैसा कि नीचे दिखाया गया है PHP से। हालांकि, एक MySQL क्लाइंट से एक ही कथन चला रहा है सफल (रिटर्न 0)। मैंने wait_timeout को समायोजित करने का प्रयास किया है (28800 पर सेट), लेकिन कोई भाग्य नहीं है। मैंने डीबी सर्वर और मशीन दोनों को भी रीबूट किया है।

तथ्य यह है कि यह हमेशा 60 सेकंड में हमेशा बाहर निकलता है, यह मुझे बताता है कि यह एक सेटिंग होने की संभावना है और सीमित संसाधन समस्या नहीं है।

मैं चल रहा हूँ:
विंडोज सर्वर 2003
MySql 5.1.36-समुदाय
पीएचपी 5.3

नीचे अपने परीक्षण कोड, उत्पादन और शो चर से परिणाम

धन्यवाद कर रहे हैं!

कोड:

set_error_handler("sqlErrorHandler"); 
set_time_limit(12000); 


$link = mysql_connect("$MYSQL_Host","$MYSQL_User","$MYSQL_Pass"); 
mysql_select_db($MYSQL_db, $link); 

echo "mysql_ping = " . (mysql_ping($link) ? "LIVE" : "DEAD") . "<br /><br />"; 

$sql = "SELECT SLEEP(120);"; 

$start = microtime(true); 
mysql_query($sql, $link); 

echo "**query done**<br />"; 
allDone(); 

function allDone(){ 
global $start, $sql; 

$end = microtime(true); 
echo "sql : $sql<br />"; 
echo "elapsed : " . ($end - $start) . "<br />"; 
echo "<br />"; 
} 

function sqlErrorHandler($errno, $errstr, $errfile, $errline){ 
global $link; 
echo "Error : $errno<br />$errstr<br />"; 
echo "mysql_ping : " . (mysql_ping($link) ? "LIVE" : "DEAD") . "<br />"; 
echo "<br />"; 

allDone(); 
} 

उत्पादन:

mysql_ping = LIVE 

Error : 2 
mysql_query() [function.mysql-query]: MySQL server has gone away 
mysql_ping : DEAD 

sql : SELECT SLEEP(120); 
elapsed : 60.051116943359 

Error : 2 
mysql_query() [function.mysql-query]: Error reading result set's header 
mysql_ping : DEAD 

sql : SELECT SLEEP(120); 
elapsed : 60.0511469841 

**query done** 
sql : SELECT SLEEP(120); 
elapsed : 60.051155090332 

शो चर:

Variable_name=Value 
auto_increment_increment=1 
auto_increment_offset=1 
autocommit=ON 
automatic_sp_privileges=ON 
back_log=50 
basedir=C:\\Program Files\\MySQL\\MySQL Server 5.1\\ 
big_tables=OFF 
binlog_cache_size=32768 
binlog_format=STATEMENT 
bulk_insert_buffer_size=8388608 
character_set_client=utf8 
character_set_connection=utf8 
character_set_database=latin1 
character_set_filesystem=binary 
character_set_results=utf8 
character_set_server=latin1 
character_set_system=utf8 
character_sets_dir=C:\\Program Files\\MySQL\\MySQL Server 5.1\\share\\charsets\\ 
collation_connection=utf8_general_ci 
collation_database=latin1_swedish_ci 
collation_server=latin1_swedish_ci 
completion_type=0 
concurrent_insert=1 
connect_timeout=10 
datadir=C:\\Documents and Settings\\All Users\\Application Data\\MySQL\\MySQL Server 5.1\\Data\\ 
date_format=%Y-%m-%d 
datetime_format=%Y-%m-%d %H:%i:%s 
default_week_format=0 
delay_key_write=ON 
delayed_insert_limit=100 
delayed_insert_timeout=300 
delayed_queue_size=1000 
div_precision_increment=4 
engine_condition_pushdown=ON 
error_count=0 
event_scheduler=OFF 
expire_logs_days=0 
flush=OFF 
flush_time=1800 
foreign_key_checks=ON 
ft_boolean_syntax=+ -><()~*:""&| 
ft_max_word_len=84 
ft_min_word_len=4 
ft_query_expansion_limit=20 
ft_stopword_file=(built-in) 
general_log=OFF 
general_log_file=C:\\Documents and Settings\\All Users\\Application Data\\MySQL\\MySQL Server 5.1\\Data\\p1.log 
group_concat_max_len=1024 
have_community_features=YES 
have_compress=YES 
have_crypt=NO 
have_csv=YES 
have_dynamic_loading=YES 
have_geometry=YES 
have_innodb=YES 
have_ndbcluster=NO 
have_openssl=DISABLED 
have_partitioning=YES 
have_query_cache=YES 
have_rtree_keys=YES 
have_ssl=DISABLED 
have_symlink=YES 
identity=0 
ignore_builtin_innodb=OFF 
init_connect= 
init_file= 
init_slave= 
innodb_adaptive_hash_index=ON 
innodb_additional_mem_pool_size=2097152 
innodb_autoextend_increment=8 
innodb_autoinc_lock_mode=1 
innodb_buffer_pool_size=96468992 
innodb_checksums=ON 
innodb_commit_concurrency=0 
innodb_concurrency_tickets=500 
innodb_data_file_path=ibdata1:10M:autoextend 
innodb_data_home_dir=D:\\MySQL Datafiles\\ 
innodb_doublewrite=ON 
innodb_fast_shutdown=1 
innodb_file_io_threads=4 
innodb_file_per_table=OFF 
innodb_flush_log_at_trx_commit=1 
innodb_flush_method= 
innodb_force_recovery=0 
innodb_lock_wait_timeout=50 
innodb_locks_unsafe_for_binlog=OFF 
innodb_log_buffer_size=1048576 
innodb_log_file_size=19922944 
innodb_log_files_in_group=2 
innodb_log_group_home_dir=.\\ 
innodb_max_dirty_pages_pct=90 
innodb_max_purge_lag=0 
innodb_mirrored_log_groups=1 
innodb_open_files=300 
innodb_rollback_on_timeout=OFF 
innodb_stats_on_metadata=ON 
innodb_support_xa=ON 
innodb_sync_spin_loops=20 
innodb_table_locks=ON 
innodb_thread_concurrency=8 
innodb_thread_sleep_delay=10000 
innodb_use_legacy_cardinality_algorithm=ON 
insert_id=0 
interactive_timeout=28800 
join_buffer_size=131072 
keep_files_on_create=OFF 
key_buffer_size=50331648 
key_cache_age_threshold=300 
key_cache_block_size=1024 
key_cache_division_limit=100 
language=C:\\Program Files\\MySQL\\MySQL Server 5.1\\share\\english\\ 
large_files_support=ON 
large_page_size=0 
large_pages=OFF 
last_insert_id=0 
lc_time_names=en_US 
license=GPL 
local_infile=ON 
log=OFF 
log_bin=OFF 
log_bin_trust_function_creators=OFF 
log_bin_trust_routine_creators=OFF 
log_error=C:\\Documents and Settings\\All Users\\Application Data\\MySQL\\MySQL Server 5.1\\Data\\p1.err 
log_output=FILE 
log_queries_not_using_indexes=OFF 
log_slave_updates=OFF 
log_slow_queries=OFF 
log_warnings=1 
long_query_time=10.000000 
low_priority_updates=OFF 
lower_case_file_system=ON 
lower_case_table_names=1 
max_allowed_packet=1048576 
max_binlog_cache_size=4294963200 
max_binlog_size=1073741824 
max_connect_errors=10 
max_connections=800 
max_delayed_threads=20 
max_error_count=64 
max_heap_table_size=16777216 
max_insert_delayed_threads=20 
max_join_size=18446744073709551615 
max_length_for_sort_data=1024 
max_prepared_stmt_count=16382 
max_relay_log_size=0 
max_seeks_for_key=4294967295 
max_sort_length=1024 
max_sp_recursion_depth=0 
max_tmp_tables=32 
max_user_connections=0 
max_write_lock_count=4294967295 
min_examined_row_limit=0 
multi_range_count=256 
myisam_data_pointer_size=6 
myisam_max_sort_file_size=107374182400 
myisam_recover_options=OFF 
myisam_repair_threads=1 
myisam_sort_buffer_size=12582912 
myisam_stats_method=nulls_unequal 
myisam_use_mmap=OFF 
named_pipe=OFF 
net_buffer_length=16384 
net_read_timeout=30 
net_retry_count=10 
net_write_timeout=80 
new=OFF 
old=OFF 
old_alter_table=OFF 
old_passwords=OFF 
open_files_limit=2048 
optimizer_prune_level=1 
optimizer_search_depth=62 
optimizer_switch=index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on 
pid_file=C:\\Documents and Settings\\All Users\\Application Data\\MySQL\\MySQL Server 5.1\\Data\\p1.pid 
plugin_dir=C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib/plugin 
port=3306 
preload_buffer_size=32768 
profiling=OFF 
profiling_history_size=15 
protocol_version=10 
pseudo_thread_id=3230 
query_alloc_block_size=8192 
query_cache_limit=1048576 
query_cache_min_res_unit=4096 
query_cache_size=33554432 
query_cache_type=ON 
query_cache_wlock_invalidate=OFF 
query_prealloc_size=8192 
rand_seed1= 
rand_seed2= 
range_alloc_block_size=4096 
read_buffer_size=65536 
read_only=OFF 
read_rnd_buffer_size=262144 
relay_log= 
relay_log_index= 
relay_log_info_file=relay-log.info 
relay_log_purge=ON 
relay_log_space_limit=0 
report_host= 
report_password= 
report_port=3306 
report_user= 
rpl_recovery_rank=0 
secure_auth=OFF 
secure_file_priv= 
server_id=0 
shared_memory=OFF 
shared_memory_base_name=MYSQL 
skip_external_locking=ON 
skip_networking=OFF 
skip_show_database=OFF 
slave_compressed_protocol=OFF 
slave_exec_mode=STRICT 
slave_load_tmpdir=C:\\WINDOWS\\TEMP 
slave_net_timeout=3600 
slave_skip_errors=OFF 
slave_transaction_retries=10 
slow_launch_time=2 
slow_query_log=OFF 
slow_query_log_file=C:\\Documents and Settings\\All Users\\Application Data\\MySQL\\MySQL Server 5.1\\Data\\p1-slow.log 
sort_buffer_size=262144 
sql_auto_is_null=ON 
sql_big_selects=ON 
sql_big_tables=OFF 
sql_buffer_result=OFF 
sql_log_bin=ON 
sql_log_off=OFF 
sql_log_update=ON 
sql_low_priority_updates=OFF 
sql_max_join_size=18446744073709551615 
sql_mode= 
sql_notes=ON 
sql_quote_show_create=ON 
sql_safe_updates=OFF 
sql_select_limit=18446744073709551615 
sql_slave_skip_counter= 
sql_warnings=OFF 
ssl_ca= 
ssl_capath= 
ssl_cert= 
ssl_cipher= 
ssl_key= 
storage_engine=InnoDB 
sync_binlog=0 
sync_frm=ON 
system_time_zone=Eastern Daylight Time 
table_definition_cache=256 
table_lock_wait_timeout=50 
table_open_cache=619 
table_type=InnoDB 
thread_cache_size=38 
thread_handling=one-thread-per-connection 
thread_stack=196608 
time_format=%H:%i:%s 
time_zone=SYSTEM 
timed_mutexes=OFF 
timestamp=1256827484 
tmp_table_size=16777216 
tmpdir=C:\\WINDOWS\\TEMP 
transaction_alloc_block_size=8192 
transaction_prealloc_size=4096 
tx_isolation=REPEATABLE-READ 
unique_checks=ON 
updatable_views_with_limit=YES 
version=5.1.36-community 
version_comment=MySQL Community Server (GPL) 
version_compile_machine=ia32 
version_compile_os=Win32 
wait_timeout=28800 
warning_count=0 
+0

यदि आप एक php स्क्रिप्ट के माध्यम से SHOW VARIABLES क्वेरी चलाते हैं तो क्या होता है। क्या टाइमआउट मान बदलते हैं? –

+0

मैंने PHP से SHAR VARIABLES चलाया और टाइमआउट सेटिंग्स समान हैं – Bill

+0

क्या ऐसा होता है जब MySQL लॉग में कुछ भी दिखाई देता है? –

उत्तर

65

php विकल्प mysql.connect_timeout इस का कारण है। यह न केवल कनेक्ट टाइमआउट के लिए उपयोग किया जाता है, बल्कि साथ ही सर्वर से पहले उत्तर की प्रतीक्षा भी करता है। आप इसे इस तरह बढ़ा सकते हैं:

ini_set('mysql.connect_timeout', 300); 
ini_set('default_socket_timeout', 300); 
+1

मैंने सोचा कि काम करने जा रहा था, लेकिन यह कुछ भी नहीं बदला। – Bill

+0

क्या आपने इसे जोड़ने या बाद में सेट किया था? –

+0

पहले। स्क्रिप्ट – Bill

6

चीजों का एक पूरा समूह है जो इसका कारण बन सकता है। मैं इन के माध्यम से पढ़ सकते हैं और उनमें से प्रत्येक की कोशिश करता हूँ

http://dev.mysql.com/doc/refman/5.1/en/gone-away.html

मैं वर्षों में कई वेब होस्टिंग कंपनियों के लिए काम किया है और आम तौर पर जब मैं यह देख, यह सर्वर अंत हालांकि यह नहीं करता है पर wait_timeout है यहां मामला नहीं दिखता है।

यदि आपको समाधान मिल जाए, तो मुझे उम्मीद है कि आप इसे पोस्ट करेंगे। मैं जानना चाहता हूं।

+1

मैं यहां पोस्ट करने से पहले कुछ बार उस पृष्ठ पर गया था। कुछ भी काम नहीं करता है। धन्यवाद हालांकि – Bill

0

मैंने शायद कुछ प्रासंगिक देखा।

मेरे पास दो स्क्रिप्ट चल रही थीं, दोनों धीमी क्वेरी कर रही थीं। उनमें से एक ने एक टेबल बंद कर दिया और दूसरे को इंतजार करना पड़ा। जो प्रतीक्षा कर रहा था वह default_socket_timeout = 300 था। आखिरकार यह "MySQL सर्वर चला गया" से बाहर निकला। हालांकि, MySQL प्रक्रिया सूची दोनों क्वेरी को जारी रखती रही, धीमी गति से चलने वाला और दूसरा लॉक और प्रतीक्षा कर रहा था।

इसलिए मुझे नहीं लगता कि mysqld अपराधी है। Php mysql क्लाइंट में कुछ बदल गया है। काफी संभवतः default_socket_timeout जिसे मैं अब -1 पर सेट करूँगा यह देखने के लिए कि क्या कुछ भी बदलता है या नहीं।

2

मेरा मामला mysql में मूल रूप से 5.0.x से 5.1.x में मिसाइल में डीबी के साथ मामूली अपग्रेड के बाद डेटाबेस भ्रष्टाचार था। क्वेरी पर उसी तर्ज: MySQL सर्वर दूर चला गया है पढ़ने में त्रुटि परिणाम सेट के हेडर

& मरम्मत mysqlcheck साथ अनुकूलन के बाद, यह सॉकेट समयबाह्य बदलने के लिए आवश्यकता के बिना सामान्य करने के लिए लौट आए,।

-3

कृपया यह लिंक देखें http://bugs.php.net/bug.php?id=45150 ऐसा लगता है कि वे PHP5.3 में देशी MYSQL समर्थन में स्थानांतरित हुए हैं और इसमें आईपीवी 6 के साथ काम करने में कुछ परेशानी है। "लोकलहोस्ट" के बजाय "127.0.0.1" का उपयोग करने का प्रयास करें

+1

-1 क्या के लिए? एक अलग दृश्य बिंदु प्रस्तुत करने के लिए? मुझे एसओ – rjha94

+3

से प्यार है मैं सहमत हूं कि -2 थोड़ा कठोर है लेकिन ओपी ने यह कहा था: "क्वेरी धीमी है लेकिन रात की नौकरी के हिस्से के रूप में चलती है, इसलिए यह स्वयं में कोई समस्या नहीं है (इसलिए कृपया सुझाव न दें कि मैं इसे अनुकूलित करता हूं) । " – alexg

4

यह कुछ है जो मैं करता हूं, (लेकिन आमतौर पर MySQLi वर्ग के साथ)।

$link = mysql_connect("$MYSQL_Host","$MYSQL_User","$MYSQL_Pass"); 
mysql_select_db($MYSQL_db, $link); 

// RUN REALLY LONG QUERY HERE 

// Reconnect if needed 

if(!mysql_ping($link)) $link = mysql_connect("$MYSQL_Host","$MYSQL_User","$MYSQL_Pass", true); 

// RUN ANOTHER QUERY 
+1

यह उत्तर मेरे लिए काम करता है लेकिन "अगर" खंड में हमें फिर से mysql_select_db डालना होगा क्योंकि दूसरी तरफ एक mysql त्रुटि है जिसे कोई डीबी चुना नहीं गया है। –

2

मैं जब मैं इस समस्या में पड़ गए

if(!mysql_ping($link)) $link = mysql_connect("$MYSQL_Host","$MYSQL_User","$MYSQL_Pass", true); 
+1

क्या आप वास्तव में * सुनिश्चित हैं कि आपको सही समस्या हो रही है ओपी पूछता है? क्या आप अपने समाधान के दोष (विपक्ष) का नाम भी दे सकते हैं? – hakre

6

साथ इस समस्या का समाधान है, यह wait_timeout की वजह से नहीं किया गया था (जो कि डिफ़ॉल्ट करने के लिए 8 घंटे स्थापित किया गया था), लेकिन एक बड़ी सम्मिलित करें के साथ max_allowed_packet द्वारा बयान। PHP से max_allowed_packet को बदलने से कोई प्रभाव नहीं पड़ा, लेकिन जब मैंने इसे /etc/my.cnf के mysqld सेक्शन में बदल दिया और MySQL सर्वर को पुनरारंभ किया, तो समस्या गायब हो गई।

0

मुझे mysqldumper (php प्रोग्राम) का उपयोग कर डेटाबेस पुनर्स्थापन पर परेशानी हो रही थी। मैं php.ini में "mssql.timeout" सेटिंग को बदलकर इसे काम करने में सक्षम था। इसे 60 तक डिफॉल्ट किया गया था और मैंने इसे 300 तक बदल दिया।

0

अपने अनुभवों से जब यह प्रकाश प्रश्नों पर होता है वहाँ समस्या को हल करने के लिए एक रास्ता है। ऐसा लगता है जब आप mysqlapache के बाद प्रारंभ या पुनरारंभ करते हैं, तो यह समस्या प्रकट होने लगती है और समस्या का स्रोत php प्रक्रिया में खुले सॉकेट को भ्रमित कर देता है। इसे हल करने के लिए:

  1. पहले पुनः आरंभ mysql सेवा

  2. फिर अपाचे सेवा

3

पुनः आरंभ बढ़ाने से एसक्यूएल-रुको-समय समाप्त इस मामले में मेरे लिए काम किया, इस प्रयास करें:

mysql_query("SET @@session.wait_timeout=900", $link); 

आपके पहले "सामान्य" SQL क्वेरी से पहले।

+1

इस उत्तर को पसंद किया। बस सोच रहा हूं कि मैं इसे वैश्विक WP क्वेरी में कैसे जोड़ सकता हूं: $ posts = $ wpdb-> get_results ("चयन आईडी, ब्लाह, ब्लाह, ब्लाह .. क्या इसे $ wpdb या $ link/$ conn में जोड़ना संभव है ? आप किसी के लिए अग्रिम में बहुत बहुत धन्यवाद जो इस अधिक स्पष्ट कर सकते हैं .. – Amit

+0

मुझे लगता है कि 'on_connect' कमांड के लिए कोई विशेष config है। लेकिन cou बस एक स्वयं कनेक्शन समारोह लिख सकते हैं, क्या बुनियादी कनेक्शन बनाने और अपने भेज रहा है कनेक्शन सेटिंग्स में परिवर्तन। – Radon8472

0

हमारे मामले में, अपराधी वैश्विक (नहीं "स्थानीय") MySQL चर " wait_timeout" था।

निम्नलिखित प्रश्नों के परिणामों की तुलना करें:

SHOW VARIABLES LIKE '%wait%'; 

SHOW GLOBAL VARIABLES WHERE Variable_name LIKE '%wait%'; 

हमारे मामले में करने के लिए पहली क्वेरी एक wait_timeout 28800 के से पता चला है, लेकिन 2 क्वेरी 10 के एक मूल्य से पता चला (सेकंड)।

हमने सत्यापित किया है कि वैश्विक चर बदलने से समस्या ठीक हो गई है। यहाँ एक सरल PHP स्क्रिप्ट है कि हमारे हालत reproduced है: जैसे ही सोने का समय पार हो गई वैश्विक wait_timeout मूल्य के रूप में

<?php  
$db = mysqli_connect('host', 'user', 'password', 'database'); 

sleep(10); // number of seconds to sleep 

// MySQL server has gone away? 
$obj = mysqli_query($db, 'SELECT * FROM some_table'); 

$results = mysqli_fetch_object($obj); 

print_r($results); 

, हम त्रुटि मिलती हैं: "चेतावनी: mysqli_query(): MySQL सर्वर दूर चला गया है"।

मान बदलने के लिए, हम अपने अमेज़न आरडीएस डैशबोर्ड में सेटिंग संपादित करने के लिए किया था।