สอบถามผู้เชี่ยวชาญ MySQL server has gone away ครับ

เริ่มโดย iCeEffecT, 28 มีนาคม 2012, 18:28:58

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

iCeEffecT

สอบถามความเข้าใจครับ เท่าที่ผมค้นหาดูปัญหานี้มันมาจากการหลุด connection วิธีแก้มี 2 แบบคือ ตั้งค่า wait_timeout ใหม่ หรือ ตั้งค่า max_allowed_packet แต่ที่ผมไม่เข้าใจคือ
ทำไมเค้าบอกว่า wait_timeout มี default value เป็น 28800 Sec (8 ชั่วโมง) ในเมื่อค่า default นานขนาดนี้แล้วทำไมจึงต้องปรับค่าใหม่ให้สั้นลงด้วยครับ ผู้เชี่ยวชาญช่วยอธิบายทีครับ

อ้างอิง
http://bogdan.org.ua/2008/12/25/how-to-fix-mysql-server-has-gone-away-error-2006.html
http://paepae.exteen.com/20071002/mysql-server-has-gone-away-mysql-5-0
http://linux.sothorn.org/node/925
http://stackoverflow.com/questions/243644/how-to-setup-a-connection-timeout-depending-of-the-user-login-in-mysql
ขอบคุณครับ  :wanwan012:

Positron

ปรกติแล้ว การทำงานที่มีการทำงานหรือประมวลผลนานๆ ควรจะสั่ง close db ก่อนนะครับ
เมื่อ ประมวลผลหรือทำงานเสร็จ ค่อยสั่ง connect db ใหม่

เพราะการติดต่อ db นานๆ นอกจะเกิด timeout แล้ว ยังทำให้ connection ของ db เต็มด้วย

ส่วน default นั้นไม่น่าจะนานขนาดนั้น เพราะในความเป็นจริงคือ ติดต่อdbให้น้อย ให้เร็วที่สุดเท่าไหร่ได้ยิ่งดี

iCeEffecT

งงครับ ขอที่มาหรืออ้างอิงได้มั๊ยอ่าครับ รบกวนผู้เชี่ยวชาญด้านนี้ช่วยอธิบายด้วยครับ เพราะ default ที่เห็นนี้ผมมีอ้างอิงอยู่หลายเว็บนะครับซึ่งเป็นแบบนี้จริงๆ ลอง ดูที่ค่า default ที่ตั้งไว้ใน db มันก็เป็นค่านี้ครับ ลอง SHOW VARIABLES LIKE 'wait_timeout'; ดูครับ

Ashi

ท่่านใดทราบ.... ตอบให้ด้วยนะครับผม

:wanwan017: :wanwan017: :wanwan017:

WebSnow

#4
mysql has gone away เกิดจากหลายอย่าง เช่น

1.Wait_timeout expired เช่นตั้งไว้ 30 วินาที แต่ connection เกินเวลา...โดยมากจะไม่ค่อยเกิดจากตัวนี้เนื่องจาก default อยุ่ที่ 8 ชั่วโมง
2.ใช้ connection ระยะเวลายาวกว่า connection_timeout
3.user client ไม่มี permission ต่อ เข้า mysql host นี้
4.Host name lookups fail
5.มีการเรียกใช้งาน mysql แล้วเกิด connections มากกว่า max_connections
6.max_allowed_packet packet ใหญ่เกินไป process ไม่ทันเวลา



จากคำถามว่าทำไม set เวลาสั้นลงกว่า 8 ชั่วโมงแล้วแก้ไขได้ ?

คำตอบสืบเนื่องมาจากข้อ 5 อ่านต่อด้านล่าง
set ให้เวลา wait_timeout สั้นลงเพื่อไม่ให้เกิด connection จำนวณมากเกิน connection_max


เมื่อ set wait_timeout มี default value เป็น 28800 Sec (8 ชั่วโมง)

1)ถ้าเกิดว่า มี connection ใหม่ แล้วไม่ถูกปิด connection ลง เมื่อรายที่ 2 3  4 ใช้ mysql connection มันจะเพิ่มขึ้น
2)ถ้ามีการใช้งานใน mysql แล้วยังไม่สิ้นสุดจะมี connection อยู่
3)ถ้าเกิดว่ามีคนเข้าเว็บมากๆ connection ก็จะเพิ่มขึ้น

กรณี set 8 ชั่วโมง จะส่วนให้ทำให้ มี connection เพิ่มขึ้น

ถ้าท่าน set ใน /my.cnf
max_connections =50

จากถ้าเกิดว่า มี connection มากกว่า 50 ตัว ก็จะเกิด mysql has gone away

เลยจำเป็นต้อง set wait_timeout ให้สั้นลงมา เพื่อปิด connection
จะทำให้เกิด connection ไม่มาก

-----------



[direct=http://wpseohost.com/price-plans/]WpSeoHost.com ให้บริการ WP Blog Network 600 C Class IPs /Domains [/direct]

[direct=http://seoalienhost.com]SeoAlienHost.com ให้บริการ SEO Hosting Multiple Class C IPs จาก 18 ประเทศ [/direct]

WebSnow

วิธีแก้ไขอีกอย่างและเพิ่ม speed ขึ้นนิดนึงคือ

/etc/mysql.cnf


[mysqld]
skip-name-resolv  #เพื่อไม่ให้เช็ค resolve
wait_timeout = 3600 #ปรับลงมา 1 ชั่วโมง เพื่อไม่ให้ connection มีมาก และประหยัดทรัพยากร
connect_timeout =120 #ตั้งค่านี้สำหรับกรณีต้อง processs งานใหญ่ๆใช้นานๆ  ค่า default จะ 60

[direct=http://wpseohost.com/price-plans/]WpSeoHost.com ให้บริการ WP Blog Network 600 C Class IPs /Domains [/direct]

[direct=http://seoalienhost.com]SeoAlienHost.com ให้บริการ SEO Hosting Multiple Class C IPs จาก 18 ประเทศ [/direct]