2010-02-15 23 views
5

Estoy experimentando algunos problemas de permisos con mi declaración SELECT ... INTO OUTFILE.Crear/escribir permisos en MySQL

Cuando registro en mi base de datos y hacer un simple comando de exportación, por ejemplo:

mysql> select * from XYZ into outfile '/home/mropa/Photos/Desktop/TEST.txt'; 

tengo la responden:

ERROR 1 (HY000): 
Can't create/write to file '/home/mropa/Photos/Desktop/TEST.txt' 
(Errcode: 13) 

Sin embargo, cuando yo simplemente escribo:

mysql> select * from XYZ into outfile 'TEST.txt'; 
Query OK, 8287 rows affected (0.73 sec) 

El archivo está escrito en el directorio /var/lib/mysql/XYZ. Busqué en el archivo /etc/apparmor.d/usr.sbin.mysqld donde mysql parece definir los permisos de lectura y escritura, pero realmente no sé cómo modificarlo.

¿Cómo puedo darme permiso para exportar una tabla mysql a cualquier directorio que me guste?

Respuesta

4

El problema es con permisos de directorio. mysqld no se ejecuta como usuario_actual. Agregue el usuario de mysqld al grupo que tiene permisos de escritura en sus directorios de destino (conveniente, pero no tan seguro) o recuerde cambiar los permisos de su directorio de destino antes y después de escribir el archivo de salida.

+0

@dnagirl por lo general comienzo mysql con el comando 'mysql -u mropa -p' entonces el usuario es 'mropa' que debería tener permisos de escritura. ¿Puedes elaborar tu respuesta un poco más, no la comprendo totalmente? Gracias. – mropa

+1

@mropa: no estás iniciando el proceso mysqld cuando haces 'mysql -u mropa -p'. Solo estás iniciando sesión en él. Cuando escribe en archivo externo, no es su usuario de inicio de sesión el que está escribiendo, sino el proceso mysqld. Imagine que inicia sesión en su shell como mropa y luego inicia sesión en mysql como mydb_user. Ni mropa ni mydb_user escriben en el archivo de mysql. El escritor es el dueño del proceso mysqld. – dnagirl

+0

que fue útil, gracias! – mropa

1

Parece que no tiene acceso a esa carpeta en particular. Debe agregar mysql al propietario del grupo de esa ubicación en particular.

No sé bajo qué usuario está ejecutando MySQL bajo, sin embargo,

chown MySQL: MySQL en/home/mropa/Fotos/Desktop/logs significaría que el grupo de usuarios de MySQL y MySQL es el dueño así que tiene permiso. Luego debe asegurarse de que los permisos incluyan escritura, pero eso debería ser suficiente.

Chown Command

2

puede crear un directorio que puede ser escrito por el usuario que ejecuta mysqld (por lo general "mysql") y escribir el archivo allí. Para intance:

chmod a+w /home/mropa/mysql 
1

Ver https://wiki.ubuntu.com/DebuggingApparmor para obtener información sobre la depuración/desactivación de perfiles de AppArmor.

Puede que no sea un problema de aparición en particular. El usuario que mysqld está ejecutando puede no tener permisos para escribir en la carpeta que especificó. Verifique el permiso en el directorio/archivo de destino.

0

mysql generalmente se ejecuta en el usuario mysqld. los permisos se pueden resolver directamente con apparmor. ver this answer