我正在为运行最新 Raspbian 的家用 Raspberry pi 设置一个“干净”映像,并且在安装 mariadb 数据库时发现一个小问题。
到目前为止,我已采取的步骤如下:
sudo apt-get install -y mariadb-server
sudo nano /etc/mysql/my.cnf
将以下行添加到 my.cnf 中:
[mysqld]
datadir=/mnt/RaspberryData/mysql
socket=/mnt/RaspberryData/mysql/mysql.sock
[client]
port=3306
socket=/mnt/RaspberryData/mysql/mysql.sock
该路径/mnt/RaspberryData/mysql
包含我之前安装的数据库信息,它是通过硬链接配置的。这可能是也可能不是问题。
然后执行:
sudo sytemctl start mariadb
journalctl -u mariadb
这是我遇到问题的时候:
Jun 22 19:18:33 raspberrypi systemd[1]: Starting MariaDB 10.3.22 database server...
Jun 22 19:18:34 raspberrypi mysqld[2623]: 2020-06-22 19:18:34 0 [Note] /usr/sbin/mysqld (mysqld 10.3.22-MariaDB-0+deb10u1) starting as process 2623 ...
Jun 22 19:18:35 raspberrypi systemd[1]: Started MariaDB 10.3.22 database server.
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: Looking for 'mysql' as: /usr/bin/mysql
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: Version check failed. Got the following error when calling the 'mysql' command line client
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: FATAL ERROR: Upgrade failed
正如您所看到的,有某种更新进程正在尝试通过位于的套接字进行连接,/var/run/mysqld/mysqld.sock
但该路径没有任何内容(只有一个mysqld.pid
文件)。
我猜测有关如何将数据从一个位置移动到另一个位置的指南省略了一些过程或诸如此类的内容,因为我实际上可以进入数据库并执行查询。那么,我在这里缺少什么?
答案1
好的,我找到了我的配置中剩下的内容。
请记住,这可能有点矫枉过正(阅读:修改比应有的文件更多的文件),但除非有更明智的人来教我,否则我会对此感到满意:
那么,让我们开始阅读该my.cnf
文件:
# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
我的问题是有一个升级过程尝试使用定义的套接字某处。显然,“某处”意味着(希望)“在配置文件中”,所以我深入研究了这些文件:
继续sudo nano
查看列出的文件(特别是下面的文件,/etc/mysql/mariadb.conf.d/*.cnf
向我显示了套接字的几个条目,这些条目保留了 /run/ 文件夹中的原始值。因此,我将其更改为新文件夹“以防万一”。事实证明列出了其中一个文件作为我应该的评论Not forget to update debian.cnf if you change the socket
。嗯,谢谢,数据库构建者先生,因为你大多给了我真正的答案,因为debian.cnf
,尽管上面有一个巨大的“请勿触摸”评论,但下面有这一部分:
[mysql_upgrade]
host = localhost
user = root
password =
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
这似乎正是崩溃的过程。
所以,tl;dr:检查列出的所有文件my.cnf
并更改套接字值以防万一。还debian.cnf
。如果你觉得足够冒险,只改变debian.cnf
并请告诉我发生了什么。
既然数据库已经工作了,我还有一大堆东西要安装。
答案2
从 Raspberry Stretch 更新到 Buster 后,我收到了同样的错误消息。不为/var/run/mysqld/mysqld.sock
空( ls -all
),但不能配置里面的数据。
我查看了所有文件 ( sudo nano
),其中一个文件解决了我的问题!幸运的是旧配置 ( /etc/mysql/mariadb.conf.d/50-server.cnf.old
) 被保存了!
- 以新名称保存新文件
50-server.cnf
,以防出现问题示例:50-server_very_old
- 使用
sudo nano
打开50-server.cnf.old
并删除old
并保存使其成为新版本50-server.cnf
。 - 重新启动系统,一切都像以前一样!