在Ubuntu 14.04上与MySQL一起安装后无法启动MariaDB

时间:2014-11-12 12:07:08

标签: mysql ubuntu mariadb

我按照mariadb.com中的官方说明逐行安装了MariaDB 10.0.14。

我正在运行Ubuntu 14.04(从12.04升级)并且已经安装了MySQL服务器。当我尝试运行mariadb时,我首先停止MySQL服务:

$ sudo /etc/init.d/mysql stop
$ sudo /etc/init.d/mariadb start

但没有任何反应。显然无法创建mariadb.sock:

$ mysql -e "SELECT VERSION();" --socket=/opt/mariadb-data/mariadb.sock    
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/mariadb-data/mariadb.sock' (111)


我的错误日志是:

141112 13:50:37 mysqld_safe Starting mysqld daemon with databases from /opt/mariadb-data    
141112 13:50:37 [Note] Server socket created on IP: '::'.
141112 13:50:37 [ERROR] mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 13 "Permission denied")
141112 13:50:37 [ERROR] Can't start server: can't create PID file: Permission denied
141112 13:50:37 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended


我无法理解为什么在启动服务时我被拒绝了权限。我已经创建了新的系统组和用户,都称为mariadb,应该按照说明中的说明处理这个问题。

也许我应该为我的 / opt / mariadb-data 目录授予完整的r / w权限,但我不确定这是一个好方法。我该怎么办?

2 个答案:

答案 0 :(得分:2)

即使@ hartmut-holzgraefe在他的回答中提供了一个很好的解决方案,我决定尝试不同的方法。由于它的工作非常好并独立于我的MySQL服务器,我想我也可以与所有人分享。

使用MariaDB的Docker容器(tutum/mariadb)比试图与MySQL一起安装更快,也许更干净。

步骤

通过docker运行mariadb的步骤是:

  
      
  1. 安装Docker
  2.   
  3. 从tutum-docker-mariadb(在我的情况下为10.1)中拉出你想要的任何版本的MariaDB
  4.   
  5. 构建图像并运行它以设置容器
  6.   


命令

步骤3的命令列在repo的README中。 我只会提到您可能希望明确预设机器的主机名和端口,如下所示:

# build the image
docker build -t tutum/mariadb .

# run it
docker run -d -p 127.0.0.1:3307:3306 -e MARIADB_PASS="mypass" tutum/mariadb

# connect to mariadb
mysql -uadmin -pmypass -h127.0.0.1 -P3307


  • admin 是使用初始运行时创建的默认用户 容器
  • mypass 是一个自定义传递来覆盖随机 最初生成的密码(否则您必须使用 docker登录得到它)
  • 127.0.0.1:3307:3306 意味着你绑定容器内的3306端口 您本地主机上的3307端口。

答案 1 :(得分:1)

你确定你正确地应用了/etc/init.d/mariadb的--defaults-file = / opt / mariadb-data / my.cnf修改吗?

问题是mysqld仍然尝试在/ var / run / mysql中创建.pid文件,而不是在/ opt / mariadb下创建.pid文件。 / var / run / mysql目录属于“mysql”系统用户,而不是您根据说明创建的“mariadb”用户。

并且/ var / run / mysql设置只能来自系统/etc/mysql/my.cnf文件,默认情况下由mysqld_safe / mysqld读取, UNLESS 这被覆盖了--defaults文件= ...

另请注意--defaults-file需要是第一个命令行选项