运行 `sudo /sbin/service mysqld start` 导致系统崩溃

Nat*_*man 1 centos mysql crash

操作系统:CentOS 5.10
服务:Amazon Web Services
尝试删除 MySQL 5.0 并安装 MySQL 5.6

我设置了一个服务器,打算使用 MySQL,但它是用 MySQL 5.0 设置的。由于有性能改进和其他功能添加,而且还没有任何数据或任何东西,我想安装 MySQL 5.6。

我正在按照 Oracle 发布的指南安装 RPM 以在 RHEL 5 上使用:

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

一切都很顺利,我可以在安装后立即启动服务 - 但是......

当我走到这一步时:

始终运行程序 mysql_secure_installation 以保护您的 MySQL 安装:

外壳> mysql_secure_installation

mysql_secure_installation 允许您执行重要操作,例如设置 root 密码、删除匿名用户等。该程序安全且易于使用。记住您设置的 root 密码很重要。有关详细信息,请参阅 mysql_secure_installation — 提高 MySQL 安装安全性。

我运行了 mysql_secure_installation,当它要求输入密码时,我尝试按回车键,因为我还没有为 root@localhost 设置密码。

我被告知密码不正确。

所以尝试了以前的密码是什么,并给出了一个错误,因为我是通过腻子连接的,所以我丢失了,当我失去连接时窗口关闭了。

无论如何 - 我只是再次要求输入密码,所以我尝试按回车键,然后再次输入旧密码,但都没有用。

所以我取消了这个过程,跑了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
Run Code Online (Sandbox Code Playgroud)

我试过手动运行 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
Run Code Online (Sandbox Code Playgroud)

在挂断我电话之前。

如果我移动 InnoDB 使用的那些数据库会发生什么?


按照帕特里克的说法,我检查dmesg并搜索了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
Run Code Online (Sandbox Code Playgroud)

和:

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).
Run Code Online (Sandbox Code Playgroud)

我从这里做什么?

phe*_*mer 5

dmesg您提供的输出来看,确实是 OOM 杀手导致了您的问题。
基本上发生的情况是,在启动 mysql 时,系统耗尽其所有可用内存。当这种情况发生时,内核必须杀死一些东西才能取回一些东西。它有一个复杂的算法,它用来尝试找到一些不会导致系统不稳定的东西。该算法恰好选择了您的外壳。然后在你的 shell 被杀死后,它发现这还不够并开始杀死其他东西。最终它到达mysql进程并杀死它。

dmesg输出还显示你只需要对系统内存500MB。我通常认为这足以运行 mysql 如果它很小,并且如果你不关心性能。但显然这表明情况并非如此。
使用大量内存的盒子上是否还有其他东西正在运行?该dmesg输出应该也包括进程的列表和多少内存,他们消费。

如果没有其他事情使用异常数量的内存,则有两种选择:

  1. 启用交换
  2. 添加更多内存(使用更大的实例大小)。