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

如何获取/var/lib/mysql-files目录下my_file.csv的读取权限?

问题描述

我通过cursor.execute生成my_file.csv文件并保存至/var/lib/mysql-files目录,代码如下:

import mysql.connector

connection = mysql.connector.connect(host='localhost', port='3306', database='my_db', user='my_user', password='my_pass')
cursor = connection.cursor()

cursor.execute('''select my_db.my_table.my_column '''
           '''from my_db.my_table '''
           '''into outfile '/var/lib/mysql-files/my_file.csv' '''
           '''fields optionally enclosed by '"' terminated by ',' LINES TERMINATED BY '\n' ''')

cursor.close()
connection.close()

随后尝试用pandas直接从该目录读取文件,代码如下:

import pandas as pd

file = pd.read_csv("/var/lib/mysql-files/my_file.csv")

但出现权限错误:

PermissionError: [Errno 13] Permission denied: '/var/lib/mysql-files/my_file.csv'

已尝试的操作:

  • 执行chown -R mysql:mysql /var/lib/mysql-files修改目录权限,无效
  • 在Ubuntu 24.04.1 LTS中执行sudo usermod -a -G mysql $(whoami)将当前用户加入mysql用户组,无效

核心问题:如何获取/var/lib/mysql-files/my_file.csv的读取权限?

解决方案
  • 修改目标文件的直接权限
    目录权限正确但文件本身可能仅对mysql用户开放,执行以下命令赋予其他用户读取权限:

    sudo chmod o+r /var/lib/mysql-files/my_file.csv
    

    若仅需要mysql组内用户可读,执行:

    sudo chmod g+r /var/lib/mysql-files/my_file.csv
    
  • 调整目录默认权限(解决后续文件权限问题)
    给mysql-files目录设置setgid位,让生成的文件自动继承目录的用户组,同时开放组读写权限:

    sudo chmod g+s /var/lib/mysql-files
    sudo chmod g+rwx /var/lib/mysql-files
    

    这样后续mysql生成的文件会归mysql组所有,已加入该组的用户可直接读取。

  • 刷新用户组会话
    执行usermod加入组后,当前终端会话不会立即生效,需:

    • 注销当前用户并重新登录,使组权限生效
    • 或在当前终端执行newgrp mysql临时切换到mysql组,再尝试读取文件
  • 替代方案:导出到用户可访问目录
    若不想调整系统权限,可修改导出路径到当前用户有权限的目录(如用户主目录),或用mysqldump直接导出:

    mysqldump -u my_user -p my_db my_table --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --lines-terminated-by='\n' --no-create-info > ~/my_file.csv
    

    生成的文件位于用户主目录,无需额外权限即可读取。


内容的提问来源于stack exchange,提问作者B612

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:22:47