【问题标题】:Cannot start MariaDB after installing alongside MySQL on Ubuntu 14.04在 Ubuntu 14.04 上与 MySQL 一起安装后无法启动 MariaDB
【发布时间】:2015-01-09 06:51:07
【问题描述】:

我已经按照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 权限,但我不确定这是一个好方法。我该怎么办?

【问题讨论】:

    标签: mysql ubuntu mariadb


    【解决方案1】:

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

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

    而/var/run/mysql的设置只能来自系统的/etc/mysql/my.cnf文件,默认由mysqld_safe/mysqld读取,UNLESS这个被覆盖--defaults-file=...

    还要注意 --defaults-file 必须是第一个命令行选项

    【讨论】:

    • 你说得对,好像我错过了 --defaults-file 添加到我的 /etc/init.d/mariadb 服务。该行应该看起来像$print_defaults --defaults-file=/opt/mariadb-data/my.cnf $extra_args mysqld server mysql_server mysql.server 但是我决定采用另一种方法并通过 Docker 安装 MariaDB github.com/tutumcloud/tutum-docker-mariadb
    【解决方案2】:

    尽管@hartmut-holzgraefe 在他的回答中提供了一个很好的解决方案,但我还是决定尝试不同的方法。由于它运行良好且独立于我的 MySQL 服务器,我想我也可以与大家分享它。

    使用用于 MariaDB 的 Docker 容器 (tutum/mariadb) 比尝试将其与 MySQL 一起安装是一种更快且可能更清洁的解决方案。

    步骤

    通过docker运行mariadb的步骤是:

    1. 安装Docker
    2. 从 tutum-docker-mariadb 中提取您想要的任何版本的 MariaDB(在我的情况下为 10.1)
    3. 构建映像并运行它以设置容器


    命令

    第 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 是一个自定义 pass 来覆盖随机 最初生成的密码(否则您必须使用 docker logs 来获取它)
    • 127.0.0.1:3307:3306 表示您正在将容器内的 3306 端口与 本地主机上的 3307 端口。

    【讨论】:

      猜你喜欢
      • 2015-09-23
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 2016-03-24
      • 2016-02-16
      相关资源
      最近更新 更多