You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

指定自定义目录创建InnoDB外部表报错(errno:168)的解决咨询

问题解决步骤

1. 检查父目录权限

虽然/home/tx-team/test的权限已配置正确,但父目录/home/tx-team可能未授予mysql用户进入的权限:

  • 执行命令查看父目录权限:
    ls -ld /home/tx-team
    
  • 如果输出类似drwx------,说明仅属主可访问,需添加其他用户的执行权限:
    sudo chmod o+x /home/tx-team
    
    若tx-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:46:27