指定自定义目录创建InnoDB外部表报错(errno:168)的解决咨询
问题解决步骤
1. 检查父目录权限
虽然/home/tx-team/test的权限已配置正确,但父目录/home/tx-team可能未授予mysql用户进入的权限:
- 执行命令查看父目录权限:
ls -ld /home/tx-team - 如果输出类似
drwx------,说明仅属主可访问,需添加其他用户的执行权限:
若sudo chmod o+x /home/tx-teamtx-team组包含mysql用户,也可添加组执行权限:sudo chmod g+x /home/tx-team
2. 处理AppArmor访问限制(Ubuntu 22.04默认启用)
Ubuntu的AppArmor会强制限制MariaDB的文件访问路径,即使目录权限正确也会被拦截:
查看当前MariaDB的AppArmor状态:
sudo aa-status确认
usr.sbin.mariadbd或usr.sbin.mysqld处于enforced模式(complain模式仅记录日志不阻止操作)。编辑AppArmor配置文件:
sudo nano /etc/apparmor.d/usr.sbin.mariadbd找到包含数据库默认数据目录的规则段(例如
/var/lib/mysql/ r,),添加以下两行规则:/home/tx-team/test/ r, /home/tx-team/test/** rwk,保存并退出编辑器。
重新加载AppArmor配置:
sudo systemctl reload apparmor或直接重新解析配置文件:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mariadbd
3. 验证解决方案
重新执行创建表的SQL语句:
create table eh_extern (c1 integer) engine=innodb data directory = '/home/tx-team/test';
内容的提问来源于stack exchange,提问作者AlexM
相关产品推荐
相关产品推荐

