为什么在Ubuntu 14.04上安装MySQL 5.6会失败?

出于好奇,我想在Ubuntu 14.04上看看MySQL 5.6。 基于这篇文章 ,看起来安装应该简单明了。 所以我启动了运行Ubuntu 14.04(64位)的AWS EC2微服务器,登录到我的pristine实例(通过PuTTY),并发出以下命令:

$ sudo apt-get update $ sudo apt-get build-dep mysql-server-5.6 $ sudo apt-get install mysql-server-5.6 

(前两个命令是绝望的动作,因为单独运行apt-get install之前没有用过。但即使使用所有三个命令,安装步骤仍然无效。)

在我预期的基础上,根据上面引用的文章,从最终命令看到这个输出:

 mysql start/running, process 2355 Setting up libhtml-template-perl (2.95-1) ... Setting up mysql-common-5.6 (5.6.16-1~exp1) ... Processing triggers for libc-bin (2.19-0ubuntu6) ... Processing triggers for ureadahead (0.100.0-16) ... 

我得到了这个:

 start: Job failed to start invoke-rc.d: initscript mysql, action "start" failed. dpkg: error processing package mysql-server-5.6 (--configure): subprocess installed post-installation script returned error exit status 1 Setting up libhtml-template-perl (2.95-1) ... Setting up mysql-common-5.6 (5.6.16-1~exp1) ... Processing triggers for libc-bin (2.19-0ubuntu6) ... Processing triggers for ureadahead (0.100.0-16) ... Errors were encountered while processing: mysql-server-5.6 E: Sub-process /usr/bin/dpkg returned an error code (1) 

谁能看出出了什么问题?

您遇到的问题看起来与此错误报告相同。 启动失败似乎是因为默认的MySQL 5.6配置需要的内存比微实例中的内存要多。

错误的解决方案似乎是执行以下操作之一:

  • 增加EC2实例中的内存量
  • 为MySQL的max_connections变量设置一个较小的值

我在创建小型VPS时遇到了同样的问题。 问题是由小内存引起的。 因此,无需花费额外的资金来增加您不需要的内存,您只需创建交换文件即可帮助安装。 是的,交换速度很慢,但您只需完成安装即可。

在Ubuntu 14.04上,我执行以下操作来解决问题:

创建4G交换文件:

 sudo fallocate -l 4G /swapfile 

将其权限更改为只有root可以访问和更改:

 sudo chmod 600 /swapfile 

让它交换:

 sudo mkswap /swapfile 

启用:

 sudo swapon /swapfile 

现在你可以再次尝试安装mysql,这次应该会成功。 请记住在执行此操作之前删除先前不成功的安装。

我遇到了同样的问题。 虽然我有足够大的内存12Gb给我的VM,但仍然有问题失败的事情。 花了一些时间后发现默认apt get缺少一些配置翻译和工具翻译包。

MySQL apt存储库提供了一种使用apt-get使用最新软件包安装和更新MySQL产品的简单方便的方法。 以下是您必须遵循的内容:

  1. 添加MySQL APT存储库首先,将MySQL apt存储库添加到系统的软件存储库列表中。 跟着这些步骤:

    • 转到http://dev.mysql.com/downloads/repo/apt/上的MySQL apt存储库的下载页面。

    • 选择并下载发行包。

    • 使用以下命令安装下载的发行包,将version-specific-package-name替换为下载的包的名称(如果未在包所在的文件夹中运行命令,则以其路径开头):

       sudo dpkg -i /PATH/version-specific-package-name.deb 

    请注意,相同的包适用于所有受支持的Debian和Ubuntu平台。

    • 在安装软件包期间,系统会要求您选择要安装的MySQL服务器版本和其他组件(例如,MySQL Workbench)。 如果您不确定选择哪个版本,请不要更改为您选择的默认选项。 如果您不想安装特定组件,也可以选择none。 在为所有组件做出选择后,选择“确定”以完成发布包的配置和安装。

    您可以随时更改版本的选择;
    有关说明,请参阅选择主要版本。

    • 使用以下命令从MySQL APT存储库更新包信息(此步骤是必需的):

       sudo apt-get update 
  2. 使用APT安装MySQL

    • 通过以下命令安装MySQL:

       sudo apt-get install mysql-server 

这将安装MySQL服务器的包,以及客户端和数据库公共文件的包。

在安装过程中,对话框有两个请求:为root用户提供MySQL安装的密码。

  1. 启动和停止MySQL服务器

MySQL服务器在安装后自动启动。 – 您可以使用以下命令检查MySQL服务器的状态:

 sudo service mysql status 
  • 使用以下命令停止MySQL服务器:

     sudo service mysql stop 
  • 要重新启动MySQL服务器,请使用以下命令:

     sudo service mysql start 

我按照http://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/#apt-repo-fresh-install进行了操作 。 这顺利运行并下载了所有软件包并成功安装了mysql 5.6

在我的情况下,我补充说

 innodb_buffer_pool_size = 20M 

/etc/mysql/my.cnf

禁用performance_schema还可以节省大量内存。 我的空数据库在启动时从400m到40m:

 performance_schema=0 

MySQL文档: http : //dev.mysql.com/doc/refman/5.6/en/performance-schema.html

我在Ubuntu 15.10上遇到过这个问题。 对我来说这不是内存问题(我有2GB内存和18GB交换,其中总共只使用了300MB)。

在我的例子中, dpkg正在寻找/etc/mysql/conf.d ,它不存在(但/etc/mysql/mysql.conf.d没有!)。 重新安装mysql并手动创建文件夹/etc/mysql/conf.d解决了我的问题。

究竟是怎么发生的? 我不知道。 我几乎不想分享我的答案,因为我打赌这个解决方案特定于我的电脑。

我通过使用实用程序strace解决了这个问题,这对于这类事情非常棒,如果令人难以置信的那么冗长。

我用它是这样的:

  • 在通过apt-get install mysql-server中途按下ctrl c后,我不得不运行dpkg --configure -a来完成安装。

  • 我运行strace 2>/tmp/trace dpkg --configure -a 。 这使我成为/tmp/trace一个很好的strace日志。

  • 我查看了日志,特别是在底部,它失败了。

  • 我注意到它试图访问/etc/mysql/conf.d ,并得到错误代码ENOENT, 没有这样的文件或目录

对于任何想要这样做的人,请为ENOENT执行strace 2>/tmp/trace (command)和grep。 正如我所说,这个解决方案可能特定于我的计算机,但你可能想要试一试。

在我的情况下,我需要做的就是在my.cnf进行一些更改,只需删除2个名为ib_logfile0ib_logfile1日志文件,然后启动mysql

 service mysql start 

无需重新安装mysql,只需删除这2个日志文件并重启mysql服务器即可

我在my.cnf做的变化如下:

 max_connections = 1000 max_allowed_packet = 1024M wait_timeout = 7200