Mostrando entradas con la etiqueta ERROR 1290 (HY000). Mostrar todas las entradas
Mostrando entradas con la etiqueta ERROR 1290 (HY000). Mostrar todas las entradas

domingo, 11 de diciembre de 2016

Configurando AppArmor y MySQL en Ubuntu 16 para exportar e importar datos desde archivos externos

Una de las opciones para importar y exportar datos de manera rápida desde MySQL son los comandos SELECT ... INTO OUTFILE Y LOAD DATA INFILE, sin embargo, configurar el sistema de manera adecuada para utilizarlos se ha convertido en algo no demasiado sencillo a partir de la versión 5.7.6 de MySQL. Como he estado pegándome bastante con el asunto ya que hasta esta versión no había tenido demasiados problemas os dejo aquí los pasos por si estáis hasta los .... de los errores de MySQL:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

Y su amigo....

ERROR 1 (HY000): Can't create/write to file '/ruta/archivo.txt' (Errcode: 13)

Vamos a ver cómo se configura...

Configurando --secure-file-priv para evitar el mensaje "ERROR 1290 (HY000) The MySQL server is running with the --secure-file-priv option so it cannot execute this statement"

--secure-file-priv es una variable de sistema de MySQL no dinámica usada para limitar el efecto de las operaciones de importación y exportación de datos, puede configurarse de tres maneras:

  1. Vacía. La variable no tiene efecto y no se considera una configuración segura. Si la estableces así tus volcados estarán en el directorio de datos de MySQL (normalmente /var/lib/mysql) o aquel apuntado en la variable de servidor datadir.
  2. Establecida a un nombre de directorio. Solo se permitirán operaciones de importación/exportación desde/hacia el directorio especificado.
  3. NULL. Las operaciones de importación y exportación quedan deshabilitadas.
Antes de la versión 5.7.6 de MySQL estaba vacía por defecto pero a partir de esa versión depende de la plataforma. Su valor es comprobado al arranque y se escribe un aviso en el log de errores del sistema si el valor no es seguro por una de las siguientes causas:
  1. Variable vacía.
  2. Ruta es la misma que el directorio de datos de MySQL o un subdirectorio.
  3. Directorio accesible a todos los usuarios
  4. Apunta a una ruta inexistente (el servidor no la creará)
¿Y porqué os cuento todo esto? pues sencillo, porque lo más normal si estáis con una versión igual o posterior a la 5.7.6 os vais a encontrar este mensaje más de una vez:


Y cómo se soluciona, pues sencillo:

1º Establecemos un directorio para los volcados

Editamos el fichero de configuración de MySQL (/etc/mysql/mysql.conf.d/mysqld.cnf) y añadimos un valor de inicio para la variable, en mi caso he añadido un directorio que he creado para ello.


2º Cambiamos el propietario de la carpeta y damos los permisos adecuados

Usando los comandos chmod y chown establecemos como propietario de la carpeta el usuario mysql del grupo mysql con permisos 750. Los comandos son:

Para el propietario de la carpeta:


Para los permisos de acceso:


Si todo es correcto el directorio debería aparecer así definido:



Ahora simplemente tenemos que reiniciar el servidor MySQL para que se apliquen los cambios del fichero de configuración y esperar que todo funcione ( o no....)


3º Y sigue sin funcionar, pero ahora el error es otro....

Pues sí, después de reiniciar el servidor e intentar la exportación de nuevo el tema parece que no acaba de funcionar...


Pero en este caso hemos cambiado el error, por lo que siendo optimistas algo hemos hecho bien.

Configurando AppArmor para evitar el mensaje "ERROR 1 (HY000): Can't create/write to file '/ruta/archivo.txt' (Errcode: 13)"

AppArmor es un sistema de control de acceso que viene instalado en Ubuntu por defecto y que controla el acceso a los recursos del sistema por parte de los programas que tenemos instalados, tiene muchas posibles configuraciones y perfiles diferentes para asignar a las aplicaciones y precisamente asigna uno a MySQL y por lo tanto, si necesitas cambiar dónde va a leer y escribir MySQL en disco te va a tocar configurarlo en AppArmor o utilizar otras opciones menos ortodoxas como deshabilitarlo, pero nosotros somos elegantes y vamos a configurarlo.

1º Editamos el fichero de configuración de AppArmor. 


El fichero de configuración se encuentra en la ruta "/etc/apparmor.d/usr.sbin.mysqld", simplemente tenemos que editarlo y dar permisos a MySQL para escribir y leer en el directorio configurado en la variable --secure-file-priv.


Como se puede ver en la imagen no me he complicado mucho, simplemente he copiado la estructura de permisos del directorio de datos de MySQL y lo he aplicado a la ruta especificada en la variable. 

2º Ahora simplemente recargamos los perfiles en AppArmor.



Y volvemos a entrar a MySQL donde veremos que ya podemos escribir en la carpeta indicada.


Y eso es todo ;-)







¿Hello World en Sonic Pi?

¿Hello World en Sonic Pi? Llevo un tiempo programando en  Sonic PI , un entorno de programación que posee un lenguaje propio orientado al...