Mariadb

centos容器,安裝mariadb伺服器

  • September 9, 2017

我正在嘗試在 docker 映像(CentOS Linux 版本 7.3.1611(核心))上執行 mariadb 伺服器。

我使用命令 yum install mysql 安裝 mariadb。安裝完成後,我嘗試執行命令 mysql 但出現此錯誤:

ERROR 2002 (HY000): 無法通過套接字 ‘/var/lib/mysql/mysql.sock’ 連接到本地 MySQL 伺服器 (2)

/var/lib/mysql 中的目錄為空

/etc 中的 my.conf 文件包含:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

使用執行命令systemctl start mariadb我收到此錯誤:

獲取 D-Bus 連接失敗:不允許操作

我犯了什麼錯誤嗎?

聽起來你是 Docker 新手。您可能需要花一些時間閱讀文件和範例,以更好地了解事物的工作原理。

首先,簡單地安裝軟體並不一定能讓它執行,CentOS 和其他 Red Hat 變體當然就是這種情況。在裸機主機上,您只需執行systemctl start mariadb以啟動它,但這僅適用於正常系統,/sbin/initsystemd 的組件是作為引導過程的一部分啟動的。

在 docker 容器內,預設情況下*沒有執行任何內容。*例如,如果您要ps -fe在主機上執行,您可能會看到數百個正在執行的程序。

如果您要執行:

docker run centos ps -fe

你會看到:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 11:12 ?        00:00:00 ps -fe

因此,您無法使用正常機制啟動服務。相反,您需要 (a) 手動啟動服務並 (b) 確保您已啟動它以使其保持在前台(因為 Docker 容器在前台程序退出或將其自身置於後台時退出)。

如果你看一下官方的 mariadb 鏡像,你會發現它最終只是呼叫mysqld 來啟動服務

聽起來您想在容器內啟動 mariadb,然後嘗試在同一個容器內進行互動。雖然這不是使用 docker 的正常方式,但您可以…

$ docker run -it centos bash
[root@c1d6adf5c8bb /]# yum -y install mariadb-server
[root@c1d6adf5c8bb /]# /usr/libexec/mariadb-prepare-db-dir mariadb.service
[root@c1d6adf5c8bb /]# /usr/bin/mysqld_safe --basedir=/usr & 
[root@c1d6adf5c8bb /]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

更典型的是,您將使用 aDockerfile建構一個 mariadb 映像(或僅使用官方映像),啟動它,然後mysql在您的主機或另一個容器中使用以與該 mariadb 實例互動。

引用自:https://dba.stackexchange.com/questions/185498