MySQL은 대략 25일마다 OS에 의해 종료됩니다.

MySQL은 대략 25일마다 OS에 의해 종료됩니다.

약 4개월 전에 우리는MS SQL 서버에게MySQL 5.5. 그 이후로 CentOS의 메모리가 부족하여 결과적으로 MySQL이 종료되는 문제가 약 25일에 한 번씩 발생했습니다. MySQL은 mysql을 다시 시작하므로 데이터베이스는 1~2분 동안만 완전히 다운되지만 CentOS가 mysqld 스레드를 종료하기 전에 몇 시간 동안 성능 및 연결 손실이 발생할 수 있습니다.

일반적으로 오전 1시부터 오전 5시까지 문제가 발생합니다., 하지만 교통량이 가장 많은 낮에는 절대 그렇지 않습니다. 이는 이 상황에 대해 정말 당혹스러운 것입니다. 일반적으로 오전 1시부터 오전 5시까지 연결 및 성능 문제가 발생함에도 불구하고 mysql 서버는 일반적으로 mysqldump가 실행되는 것과 거의 같은 오전 4시 또는 오전 5시에 종료됩니다.

우리는 mysqldump범인일지도 모른다고 생각했습니다. 그러나 매일 오전 4시에 시작되지만 일부 밤에는 오전 1시에 문제가 발생하는 경우도 있습니다. 또한 스위치 mysqldump와 함께 실행되므로 --opt덤프 프로세스 중에 많은 데이터를 버퍼링해서는 안 됩니다.

또한 덤프 파일을 가져와서 테이프에 백업하는 데 사용하고 있는 백업 앱도 고려했습니다. 실행 시간을 오전 6시로 변경했는데 문제는 변경되지 않았습니다.

밤새 주기적으로 실행되는 작업이 여러 개 있지만 리소스를 많이 사용하지 않고 실행하는 데 시간이 오래 걸리지 않습니다.

다음은 우리가 작업 중인 내용과 파일의 현재 항목에 대한 몇 가지 통계입니다 my.cnf. 우리가 시도할 수 있는 것에 대한 도움이나 제안은 대단히 감사하겠습니다.

서버 통계:

  • 인텔(R) 제온(R) CPU E5530 @ 2.40GHz
  • CPU 코어: 4
  • 메모리: 12293480(12GB)

OS:

  • 센트OS 5.5
  • Linux 2.6.18-274.12.1.el5 #1 SMP Tue Nov 29 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

답변1

  1. MySQL 오류 로그를 확인해야 합니다.

  2. ulimit -a이 값이 의 열린 파일 과 동일한지 확인하십시오 .

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

답변2

구성에 버그가 있습니다.

여기 이것을 사용하십시오도구. 사용자 정의 구성에 필요한 메모리 RAM의 양을 알려줍니다.

언급한 현재 RAM은 500개의 활성 MySQL 연결이 12GB필요합니다 .31.6GB

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

관련 정보