CentOS 6上的MySQL 5.6默默无法启动

我正在进行一个全新的CentOS 6.5安装,并尝试运行一个MySQL 5.6服务器守护进程。 服务器是DigitalOcean基础设施上的新鲜水滴。 512 MB大小。 我使用MySQL Yum版本库中的MySQL版本 。 当我尝试启动它时,它神秘地崩溃,没有任何迹象显示出了什么问题。 这里有一些细节:

首先,我的/etc/my.cnf:

[mysqld] innodb_buffer_pool_size = 5M datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES explicit_defaults_for_timestamp = TRUE [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 

当我运行service mysqld start ,我得到这个:

 [root@myserver ~]# service mysqld start MySQL Daemon failed to start. Starting mysqld: [FAILED] 

input该命令后,这里是/var/log/mysqld.log的完整内容:

 140104 22:53:41 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 2014-01-04 22:53:42 8177 [Note] Plugin 'FEDERATED' is disabled. 2014-01-04 22:53:42 8177 [Note] InnoDB: The InnoDB memory heap is disabled 2014-01-04 22:53:42 8177 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 2014-01-04 22:53:42 8177 [Note] InnoDB: Compressed tables use zlib 1.2.3 2014-01-04 22:53:42 8177 [Note] InnoDB: Using Linux native AIO 2014-01-04 22:53:42 8177 [Note] InnoDB: Not using CPU crc32 instructions 2014-01-04 22:53:42 8177 [Note] InnoDB: Initializing buffer pool, size = 5.0M 2014-01-04 22:53:42 8177 [Note] InnoDB: Completed initialization of buffer pool 2014-01-04 22:53:42 8177 [Note] InnoDB: Highest supported file format is Barracuda. 140104 22:53:43 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 

没有错误,没有警告,没有任何东西。 而当我运行service mysqld status ,它说mysqld dead but subsys locked

有任何想法吗?

更新:我进入/etc/init.d/mysqld并添加了一行来回显它正在使用的确切的启动命令到控制台。 然后我运行该命令(但没有将任何输出redirect到/ dev / null或背景进程)。 这是什么变成了:

 [root@myserver ~]# /usr/bin/mysqld_safe --datadir="/var/lib/mysql" --socket="/var/lib/mysql/mysql.sock" --pid-file="/var/run/mysqld/mysqld.pid" --basedir=/usr --user=mysql 140105 08:04:35 mysqld_safe Logging to '/var/log/mysqld.log'. 140105 08:04:35 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql /usr/bin/mysqld_safe: line 166: 10966 Killed nohup /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock < /dev/null >> /var/log/mysqld.log 2>&1 140105 08:04:36 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 

它看起来像一些外部服务或看门狗一旦试图启动就杀死MySQL。 但是,这可以做什么? SELinux似乎没有安装。 我不知道还有什么…?

这绝对是一个记忆问题。 一旦我查看/var/log/messages这就变得明显了。 我试图运行Nginx,PHP-FPM和MySQL的最新版本,所有这三个的默认configuration对我的只有512 MB内存和交换空间的小滴来说太多了。

我调整了我的/etc/my.cnf和PHP-FPMconfiguration,一切正常。 以下是我的新my.cnf供参考:

 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES explicit_defaults_for_timestamp = TRUE key_buffer=16K table_open_cache=4 query_cache_limit=256K query_cache_size=4M max_allowed_packet=1M sort_buffer_size=64K read_buffer_size=256K thread_stack=64K innodb_buffer_pool_size = 56M innodb_flush_neighbors=0 innodb_flush_log_at_trx_commit=2 character-set-server=utf8 collation-server=utf8_general_ci [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 

我添加的各种参数是从各种博客和教程网站拼凑在一起,专注于低内存mysqld部署,如这里和这里 。

我要在这里检查的第一件事是SELinux。 首先将其设置为Permissive模式

 setenforce 0 

然后尝试启动MySQL。 如果开始,那么我们肯定知道SELinux是罪魁祸首。 如果是这种情况,那么/var/log/audit/audit.log将包含与MySQL相关的AVC拒绝消息,这将有助于您进一步诊断问题。

不要忘记可重用的SELinux强制模式。

 setenforce 1