MySQL bị hệ điều hành giết chết cứ sau 25 ngày hoặc lâu hơn


9

Khoảng 4 tháng trước, chúng tôi đã chuyển từ MS SQL Server sang MySQL 5.5 . Kể từ đó, chúng tôi đã gặp phải sự cố một lần trong khoảng 25 ngày kể từ khi CentOS hết bộ nhớ và kết quả là nó giết chết MySQL. MySQL an toàn khởi động lại mysql để cơ sở dữ liệu chỉ bị hỏng hoàn toàn trong một hoặc hai phút, nhưng chúng ta có thể bị mất hiệu năng và mất kết nối trong nhiều giờ trước khi CentOS giết chết luồng mysqld.

Chúng ta thường thấy các vấn đề từ 1 giờ sáng đến 5 giờ sáng , nhưng không bao giờ trong ngày khi lưu lượng truy cập cao nhất, đó là điều thực sự gây trở ngại cho tình huống này. Mặc dù thường thấy các vấn đề về kết nối và hiệu suất từ ​​1 giờ sáng đến 5 giờ sáng, máy chủ mysql thường bị giết vào khoảng 4 giờ sáng hoặc 5 giờ sáng, cùng khoảng thời gian mysqldump chạy.

Chúng tôi nghĩ mysqldumpcó thể là thủ phạm. Tuy nhiên, nó bắt đầu lúc 4 giờ sáng hàng ngày, nhưng chúng tôi thấy có vấn đề sớm nhất là 1 giờ sáng vào một số đêm. Cũng mysqldumpđang chạy với công --opttắc, vì vậy nó không nên đệm nhiều dữ liệu trong quá trình kết xuất.

Chúng tôi cũng đã xem xét ứng dụng sao lưu mà chúng tôi đang sử dụng để lấy các tệp kết xuất và sao lưu chúng thành băng. Chúng tôi đã thay đổi thời gian chạy đến 6 giờ sáng và vấn đề không thay đổi.

Chúng tôi có một số công việc chạy định kỳ suốt đêm, nhưng không có công việc nào rất tốn tài nguyên và không mất nhiều thời gian để chạy.

Dưới đây là một số thống kê cho những gì chúng tôi đang làm việc và các mục hiện tại trong my.cnftệp. Bất kỳ trợ giúp hoặc đề xuất cho những thứ mà chúng tôi có thể thử sẽ được đánh giá rất cao.

TRẠM MÁY CHỦ :

  • CPU (R) Xeon (R) Intel E5530 @ 2.40GHz
  • lõi cpu: 4
  • Bộ nhớ: 12293480 (12 hợp đồng biểu diễn)

HĐH :

  • CentOS 5.5
  • Linux 2.6.18-274.12.1.el5 # 1 SMP Thứ ba ngày 29 tháng 11 13:37:46 EST 2011 x86_64 x86_64 x86_64 GNU / Linux

MY.CNF:

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock

skip-name-resolve

ssl-ca=<file location>
ssl-cert=<file location>
ssl-key=<file location>

back_log = 50
max_connections = 500
table_open_cache = 2048
table_definition_cache = 9000
max_allowed_packet = 16M
binlog_cache_size = 1M
max_heap_table_size = 64M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
thread_cache_size = 130
thread_concurrency = 16
query_cache_size = 64M
query_cache_limit = 1M
ft_min_word_len = 4
default-storage-engine=INNODB
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin=/log/mysql/mysql-bin
expire_logs_days=7
binlog_format=mixed
key_buffer_size = 32M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 7G
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 70
innodb_lock_wait_timeout = 120

[mysql]
no-auto-rehash

[mysqld_safe]
open-files-limit = 8192

Định cấu hình nhật ký lỗi dev.mysql.com/doc/refman/5.5/en/error-log.html và kiểm tra xem có gì đó được đăng ký khi sự cố xảy ra không

Tôi đã sử dụng trang web này omh.cc/mycnf và xác định rằng vấn đề rất có thể xảy ra với chính cấu hình. Tôi sẽ điều chỉnh rất nhiều nhóm kết nối liên quan đến myisam và xem điều đó có giúp tiêu thụ bộ nhớ không.

2
CentOS 5.5 không phải là hiện tại. 5,8 là (nếu bạn quan tâm đến bảo mật hệ điều hành)
Nils

1
Giải pháp sẽ rất thú vị. Bạn có thể gửi nó như là câu trả lời cho câu hỏi của riêng bạn?
Nils

bài viết trùng lặp trong chủ đề reddit nơi nó đã được giải quyết. nó cũng đã được đăng trên diễn đàn của MySQL
Mark McKinstry

Câu trả lời:


2
  1. Bạn nên kiểm tra nhật ký lỗi MySQL

  2. Kiểm tra xem giá trị này có giống với ulimit -acác tệp đang mở không:

    int my.cnf 
    [mysqld_safe]
    open-files-limit = 8192
    

0

Cấu hình của bạn là lỗi.

Ở đây sử dụng công cụ này . Nó cho bạn biết bạn cần bao nhiêu bộ nhớ RAM cho cấu hình tùy chỉnh của mình?

RAM hiện tại của bạn như bạn đã đề cập là 12GBnhưng bạn cần 31.6GBcho 500 kết nối MySQL hoạt động.

Session variables
max_allowed_packet 16.0 MB
sort_buffer_size 8.0 MB
net_buffer_length 16.0 KB
thread_stack 192.0 KB
read_rnd_buffer_size 16.0 MB
read_buffer_size 2.0 MBSession variables
max_allowed_packet 16.0 MB
sort_buffer_size 8.0 MB
net_buffer_length 16.0 KB
thread_stack 192.0 KB
read_rnd_buffer_size 16.0 MB
read_buffer_size 2.0 MB
join_buffer_size 8.0 MB
Total (per session)50.2 MB
Global variables
innodb_log_buffer_size 1.0 MB
query_cache_size 64.0 MB
innodb_buffer_pool_size 7.0 GB
innodb_additional_mem_pool_size 16.0 MB
key_buffer_size 32.0 MB
Total 7.1 GB
Total memory needed (for 500 connections): 31.6 GB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.