Mysql

datadir 更改後啟動 mysql/mariaDB 服務

  • November 1, 2021

我安裝了 mariadb 伺服器並使用密碼創建了一個 root 使用者

sudo apt install mariadb-server
sudo mysql_secure_installation

由於我使用 Rasperri Pi,因此我想將 DB 交換到外部硬碟。為此,我採取了本教程

在我更改了 cnf 文件(都在 /etc/mysql/mariadb.conf/ 下以及 /etc/mysql 下的 debian.cnf 文件)之後,啟動 mysql 服務失敗:

$ sudo service mysql start
Job for mariadb.service failed because the control process exited with error code.
See "systemctl status mariadb.service" and "journalctl -xe" for details.

日誌說無法創建測試文件:

$systemctl status mariadb.service
Okt 30 22:56:31 raspberrypitouch systemd[1]: Starting MariaDB 10.3.31 database server...
Okt 30 22:56:31 raspberrypitouch mysqld[4694]: 2021-10-30 22:56:31 0 [Note] /usr/sbin/mysqld (mysqld 10.3.31-MariaDB-0+deb10u1) starting as process 4694 ...
Okt 30 22:56:31 raspberrypitouch mysqld[4694]: 2021-10-30 22:56:31 0 [Warning] Can't create test file /media/pi/DBDRIVE/MariaDB/raspberrypitouch.lower-test
Okt 30 22:56:31 raspberrypitouch mysqld[4694]: [101B blob data]
Okt 30 22:56:31 raspberrypitouch mysqld[4694]: 2021-10-30 22:56:31 0 [ERROR] Aborting
Okt 30 22:56:31 raspberrypitouch systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
Okt 30 22:56:31 raspberrypitouch systemd[1]: mariadb.service: Failed with result 'exit-code'.
Okt 30 22:56:31 raspberrypitouch systemd[1]: Failed to start MariaDB 10.3.31 database server.

經過廣泛搜尋,我發現並排除了以下可能的原因:

  1. apparmourSELinux正在阻止對新目錄的訪問 -> 它們未安裝
getenforce
-bash: getenforce: command not found

aa-status

-bash: aa-status: command not found
  1. 錯字

我已經複製了所有路徑,一個錯字將是忙碌兩天的一個非常糟糕的理由 3. 缺少 權限

我已經複製了這個,所以權限應該是正確的:cp -R -p /var/lib/mysql/* /media/pi/DBDRIVE/MariaDB/

父文件夾

/media/pi/DBDRIVE $ ls -l
total 20
drwx------ 2 mysql mysql 16384 Oct 29 12:25 lost+found
drwxrwxrwx 6 mysql mysql  4096 Oct 30 23:07 MariaDB

db 文件夾本身

/media/pi/DBDRIVE/MariaDB $ ls -l

total 110632

-rw-rw---- 1 mysql mysql    16384 Oct 30 15:30 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Oct 30 15:30 aria_log_control
-rw-r--r-- 1 root  root         0 Oct 30 13:02 debian-10.3.flag
-rw-rw---- 1 mysql mysql      976 Oct 30 15:30 ib_buffer_pool
-rw-rw---- 1 mysql mysql 12582912 Oct 30 15:30 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Oct 30 15:30 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Oct 30 13:02 ib_logfile1
-rw-rw---- 1 mysql mysql        0 Oct 30 13:02 multi-master.info
drwx------ 2 mysql mysql     4096 Oct 30 13:02 mysql
drwxrwxrwx 2 mysql mysql     4096 Oct 30 17:50 mysqld
drwx------ 2 mysql mysql     4096 Oct 30 13:02 performance_schema
drwx------ 2 mysql mysql     4096 Oct 30 15:12 testDB

驅動器

/media/pi/DBDRIVE $ ls -l
total 20
drwx------ 2 mysql mysql 16384 Oct 29 12:25 lost+found
drwxrwxrwx 7 mysql mysql  4096 Oct 30 23:58 MariaDB

圓周率

/media/pi $ ls -l
total 4
drwxr-xr-x 4 mysql mysql 4096 Oct 30 16:53 DBDRIVE

媒體

/media $ ls -l
total 4
drwxr-x---+ 3 root root 4096 Oct 31 01:42 pi
  1. 外部驅動器格式錯誤
df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on

/dev/root      ext4       29G  3.8G   25G  14% /
devtmpfs       devtmpfs  776M     0  776M   0% /dev
tmpfs          tmpfs     937M     0  937M   0% /dev/shm
tmpfs          tmpfs     937M  8.6M  928M   1% /run
tmpfs          tmpfs     5.0M  4.0K  5.0M   1% /run/lock
tmpfs          tmpfs     937M     0  937M   0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat      253M   49M  204M  20% /boot
tmpfs          tmpfs     188M  4.0K  188M   1% /run/user/1000
/dev/sda       ext4      916G  186M  870G   1% /media/pi/DBDRIVE
  1. cnf 文件中的 錯誤

這里基本上是相同的情況,但解決方案對我不起作用

正確方向的每一個提示都值得讚賞

為什麼我無法啟動服務?

如評論中所述,該問題可以通過執行手動重現sudo -u mysql touch /media/pi/DBDRIVE/MariaDB/raspberrypitouch.lower-test。這導致了“權限被拒絕”錯誤。

由於問題顯示“MariaDB”目錄完全歸“mysql”使用者所有,因此問題很可能出在父目錄之一——“/media”、“/media/pi”和“/media/” pi/數據庫驅動器’。這些目錄至少需要執行權限(對於所有使用者),以便“mysql”使用者可以訪問“/media/pi/DBDRIVE/MariaDB/”目錄。

OP 已確認 /media 目錄缺少所需的權限,並且添加它們可以解決問題。

MariaDB 知識庫中的相關說明:https ://mariadb.com/kb/en/what-to-do-if-mariadb-doesnt-start/#cant-create-test-file

引用自:https://unix.stackexchange.com/questions/675467