편집하다:

편집하다:

운영 체제: CentOS 5.10
서비스: Amazon Web Services
MySQL 5.0을 제거하고 MySQL 5.6을 설치해 보십시오.

MySQL을 사용하려고 서버를 설정했는데 MySQL 5.0을 사용하여 설정되었습니다. 성능향상이나 기타 기능들이 추가됐는데 아직 데이터나 아무것도 없어서 MySQL 5.6을 설치하려고 합니다.

Oracle에서 게시한 가이드에 따라 RHEL 5에서 사용할 RPM을 설치했습니다.

http://dev.mysql.com/doc/mysql-repo-excerpt/5.6/en/linux-installation-yum-repo.html

모든 것이 잘 진행되고 설치 후 즉시 서비스를 시작할 수 있습니다. 하지만...

이 단계에 도달하면:

MySQL 설치를 보호하려면 항상 mysql_secure_installation 프로그램을 실행하십시오.

쉘> mysql_secure_installation

mysql_secure_installation을 사용하면 루트 비밀번호 설정, 익명 사용자 제거 등과 같은 중요한 작업을 수행할 수 있습니다. 이 프로그램은 안전하고 사용하기 쉽습니다. 그러나 설정한 루트 비밀번호를 기억하는 것이 중요합니다. 자세한 내용은 mysql_secure_installation - MySQL 설치 보안 향상을 참조하세요.

mysql_secure_installation을 실행했는데 비밀번호를 묻는 메시지가 표시되면 root@localhost에 대한 비밀번호를 설정하지 않았기 때문에 Enter 키를 눌러 보았습니다.

비밀번호가 틀렸다고 들었습니다.

그래서 이전 비밀번호를 시도했지만 퍼티를 통해 연결하고 연결이 끊어지면 창이 닫히기 때문에 오류가 발생했습니다.

어쨌든 - 방금 비밀번호를 다시 물어보았기 때문에 Enter 키를 누른 다음 이전 비밀번호를 다시 사용해 보았지만 여전히 작동하지 않았습니다.

그래서 프로세스를 취소 sudo /sbin/service mysqld stop하고 실행했습니다 sudo /sbin/service mysqld start. 셸이 멈추고 잠시 멈춘 다음 창이 닫히고 연결이 이루어집니다.

SSH 연결을 다시 열려고 시도했지만 시간이 초과되었습니다. 몇 분 정도 기다린 후 SSH를 통해 서버에 다시 접속할 수 있습니다.

mysqld 서비스를 시작하려고 할 때마다 SSH 세션이 닫힙니다. 이것은 sshd도 충돌했다는 의미입니까?

로그 파일에는 /var/log/mysql.log다음 내용만 포함됩니다.

131204 23:49:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
131204 23:50:53 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
131205 00:05:12 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
131205 00:06:28 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
131205 00:08:09 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
131205 00:09:14 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
131205 00:13:54 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
131205 00:15:04 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
131205 00:25:12 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
131205 00:26:45 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

mysql을 수동으로 실행해봤는데 똑같은 일이 일어났습니다.

여기서 무엇을 해야 하나요?


편집하다:

방금 mysqld_safe를 실행하여 지금까지의 출력이 무엇인지 확인했습니다.

[user@machine mysql]$ sudo /usr/bin/mysqld_safe
131205 01:13:33 mysqld_safe Logging to '/var/log/mysqld.log'.
131205 01:13:33 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Killed

나한테 전화 끊기 전에.

InnoDB에서 사용하는 데이터베이스를 이동하면 어떻게 되나요?


dmesgPatrick 에 따르면 mysqld.

나는 다음을 발견했습니다 :

type=1400 audit(1386200078.706:1929): avc:  denied  { read } for  pid=20563 comm="nohup" path="/usr/sbin/mysqld" dev=xvda1 ino=375035 scontext=user_u:system_r:netutils_t:s0 tcontext=system_u:object_r:mysqld_exec_t:s0 tclass=file
sudo invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0

Call Trace:
 [<ffffffff802c1b64>] out_of_memory+0x8b/0x203
 [<ffffffff8020fa5d>] __alloc_pages+0x27f/0x308
 [<ffffffff802139dd>] __do_page_cache_readahead+0xc8/0x1af
 [<ffffffff8021424e>] filemap_nopage+0x14c/0x360
 [<ffffffff80208e9d>] __handle_mm_fault+0x444/0x144f
 [<ffffffff8026ea01>] monotonic_clock+0x35/0x7b
 [<ffffffff8029b54a>] attach_pid+0x7c/0xa9
 [<ffffffff80266d94>] do_page_fault+0xf72/0x131b
 [<ffffffff8024901b>] skb_dequeue+0x48/0x50
 [<ffffffff80254146>] unix_release_sock+0x19e/0x1fa
 [<ffffffff80261df5>] thread_return+0x6c/0x113
 [<ffffffff80207116>] kmem_cache_free+0x84/0xd7
 [<ffffffff80207116>] kmem_cache_free+0x84/0xd7
 [<ffffffff8025f82b>] error_exit+0x0/0x6e

그리고:

mysqld invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0

Call Trace:
 [<ffffffff802c1b64>] out_of_memory+0x8b/0x203
 [<ffffffff8020fa5d>] __alloc_pages+0x27f/0x308
 [<ffffffff802139dd>] __do_page_cache_readahead+0xc8/0x1af
 [<ffffffff8021424e>] filemap_nopage+0x14c/0x360
 [<ffffffff80208e9d>] __handle_mm_fault+0x444/0x144f
 [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
 [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
 [<ffffffff80266d94>] do_page_fault+0xf72/0x131b
 [<ffffffff80236fd3>] __vm_enough_memory+0xee/0xfc
 [<ffffffff8020e472>] do_mmap_pgoff+0x35e/0x74a
 [<ffffffff80236fd3>] __vm_enough_memory+0xee/0xfc
 [<ffffffff80263929>] _spin_lock_irqsave+0x9/0x14
 [<ffffffff802313f1>] __up_write+0x27/0xf2
 [<ffffffff8025f82b>] error_exit+0x0/0x6e

Mem-info:
DMA per-cpu:
cpu 0 hot: high 0, batch 1 used:0
cpu 0 cold: high 0, batch 1 used:0
DMA32 per-cpu:
cpu 0 hot: high 186, batch 31 used:79
cpu 0 cold: high 62, batch 15 used:58
Normal per-cpu: empty
HighMem per-cpu: empty
Free pages:        4780kB (0kB HighMem)
Active:114881 inactive:1 dirty:1 writeback:0 unstable:0 free:1195 slab:5226 mapped-file:541 mapped-anon:114329 pagetables:1094
DMA free:2004kB min:48kB low:60kB high:72kB active:540kB inactive:0kB present:9076kB pages_scanned:1381592 all_unreclaimable? yes
lowmem_reserve[]: 0 489 489 489
DMA32 free:2776kB min:2804kB low:3504kB high:4204kB active:458984kB inactive:4kB present:500960kB pages_scanned:10643850 all_unreclaimable? yes
lowmem_reserve[]: 0 0 0 0
Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA: 1*4kB 0*8kB 1*16kB 0*32kB 1*64kB 1*128kB 1*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 2004kB
DMA32: 28*4kB 1*8kB 0*16kB 1*32kB 1*64kB 0*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 0*4096kB = 2776kB
Normal: empty
HighMem: empty
585 pagecache pages
Swap cache: add 0, delete 0, find 0/0, race 0+0
Free swap  = 0kB
Total swap = 0kB
Free swap:            0kB
131072 pages of RAM
5993 reserved pages
4445 pages shared
0 pages swap cached
Out of memory: Killed process 20563, UID 0, (mysqld).

여기서 무엇을 해야 하나요?

답변1

dmesg귀하가 제공한 출력 에 따르면 실제로 문제를 일으키는 것은 OOM 킬러입니다.
기본적으로 mysql을 시작한 후 시스템은 사용 가능한 모든 메모리를 사용합니다. 이런 일이 발생하면 커널은 무언가를 복원하기 위해 무언가를 종료해야 합니다. 시스템을 불안정하게 만들지 않고 죽일 것을 찾기 위한 복잡한 알고리즘이 있습니다. 알고리즘은 쉘을 정확하게 선택합니다. 그런 다음 쉘이 죽으면 그것만으로는 충분하지 않다는 것을 파악하고 다른 것을 죽이기 시작합니다. 결국에는 mysql 프로세스에 도달하여 종료됩니다.

또한 출력에는 dmesg시스템에 약 500MB의 메모리만 있는 것으로 표시됩니다. 나는 일반적으로 이것이 mysql을 실행하기에 충분하다고 생각합니다(작고 성능에 관심이 없다면). 그러나 분명히 이것은 그렇지 않다는 것을 암시합니다.
많은 메모리를 사용하는 다른 프로그램이 상자에 있습니까? 출력에는 dmesg프로세스 목록과 이들이 소비하는 메모리 양도 포함되어야 합니다.

비정상적으로 많은 양의 메모리를 사용해야 하는 다른 이유가 없는 경우 다음 두 가지 옵션이 있습니다.

  1. 스왑 활성화
  2. 더 많은 메모리를 추가합니다(더 큰 인스턴스 크기 사용).

답변2

기존 mysql 설치의 이전 데이터베이스 파일이 아직 남아 있는 것 같습니다. 보관해야 할 데이터가 있는 경우 mysql_upgrade 명령을 실행합니다. 기존 데이터가 필요하지 않은 경우 /var/lib/mysql을 지우고 mysql_secure_installation 스크립트를 다시 실행하십시오.

관련 정보