如何获取/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
相关产品推荐
相关产品推荐

