无法使用 DATA DIRECTORY 子句创建外部数据库表

Cannot create external database table with the DATA DIRECTORY clause

提问人:AlexM 提问时间:11/17/2023 最后编辑:Bill KarwinAlexM 更新时间:11/18/2023 访问量:26

问:

我想在标准数据目录之外的外部文件中创建数据库表。

以下作品:

create table eh_extern (c1 integer) engine=innodb data directory = '/tmp';

我创建了我的主目录的测试子目录,并将其权限设置为 777,将其所有者设置为 mysql:mysql

目录权限包括:

drwxrwxrwx 2 mysql mysql 4096 Nov 17 09:55 test

以下方法不起作用:

create table eh_extern (c1 integer) engine=innodb data directory = '/home/tx-team/test'; 错误是:

Can't create table eheh_extern.(errno: 168 "Unknown (generic) error from engine")

syslog 中的错误如下:

'Nov 17 09:56:39 txteam-PD14RI mariadbd[1149]: 2023-11-17 9:56:39 75 [错误] InnoDB:文件操作中的操作系统错误编号 13。

11 月 17 日 09:56:39 txteam-PD14RI mariadbd[1149]: 2023-11-17 9:56:39 75 [错误] InnoDB:该错误意味着 mariadbd 没有该目录的访问权限。 `

我能做些什么来防止错误?

操作系统是:Linux 5.15.0-88-generic (Ubuntu),服务器是:10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04

权限 mariadb external-tables

评论


答:

0赞 danblack 11/18/2023 #1

Systemd 启动的服务无权访问 /home 目录。

systemctl 编辑 mariadb.service 并添加

[Service]
ProtectHome=false

参考: KB systemd

评论

0赞 AlexM 11/19/2023
谢谢你的建议。但是,在建议的编辑和重新启动服务后,错误仍然完全相同。
0赞 AlexM 11/21/2023
现在我明白了。在编辑 conf 文件时,我刚刚更改了 ProtectHome 指令,而不是将其添加到文件顶部。现在,将指令放在正确的位置后,它被复制到 override.conf 中并按预期工作。谢谢。
0赞 danblack 11/21/2023
可以手动更改文件,只需要重新读取即可。但是,这是确保存在最小更改集的好方法,并且可以使用下一个包更新服务,并满足每个人的意图。systemctl daemon-reloadsystemctl edit