the - mysql secure file priv directory
¿Cómo debo abordar--secure-file-priv en MySQL? (15)
@vhu
Hice el
SHOW VARIABLES LIKE "secure_file_priv";
y devolvió
C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/
así que cuando lo conecté, todavía no funcionaba.
Cuando fui directamente al archivo my.ini descubrí que la ruta tiene un formato un poco diferente:
C:/ProgramData/MySQL/MySQL Server 8.0/Uploads
Luego, cuando lo ejecuté con eso, funcionó. La única diferencia es la dirección de las barras.
Estoy aprendiendo MySQL e intenté usar una cláusula
LOAD DATA
.
Cuando lo usé como a continuación:
LOAD DATA INFILE "text.txt" INTO table mytable;
Tuve el siguiente error:
El servidor MySQL se ejecuta con la opción --secure-file-priv, por lo que no puede ejecutar esta declaración
¿Cómo abordo este error?
He comprobado otra pregunta sobre el mismo mensaje de error , pero aún no puedo encontrar una solución.
Estoy usando MySQL 5.6
Ejemplo detallado sobre cómo verificar secure_file_priv, otorgar usuario y seleccionar en outfile yippeecode.com
En Ubuntu 14 y Mysql 5.5.53, esta configuración parece estar habilitada de forma predeterminada.
Para deshabilitarlo, debe agregar
secure-file-priv = ""
a su archivo my.cnf en el grupo de configuración mysqld.
p.ej:-
[mysqld]
secure-file-priv = ""
Esto es lo que funcionó para mí en Windows 7 para deshabilitar
secure-file-priv
(Opción # 2 de
la respuesta
de
vhu
):
-
Detenga el servicio del servidor MySQL entrando en
services.msc
. -
Vaya a
C:/ProgramData/MySQL/MySQL Server 5.6
(ProgramData
era una carpeta oculta en mi caso). -
Abra el archivo
my.ini
en el Bloc de notas. - Busque ''secure-file-priv''.
-
Comente la línea agregando ''#'' al comienzo de la línea.
Para MySQL Server 5.7.16 y superior, comentar no funcionará.
Debe configurarlo en una cadena vacía como esta:
secure-file-priv=""
- Guarda el archivo.
-
Inicie el servicio del servidor MySQL yendo a
services.msc
.
Estoy trabajando en MySQL5.7.11 en Debian, el comando que me funcionó para ver el directorio es:
LOAD DATA LOCAL INFILE "text.txt" INTO table mytable;
Funciona según lo previsto.
Su servidor MySQL se ha iniciado con la
--secure-file-priv
que básicamente limita desde qué directorios puede cargar archivos usando
LOAD DATA INFILE
.
Puede usar
SHOW VARIABLES LIKE "secure_file_priv";
para ver el directorio que se ha configurado.
Tienes dos opciones:
-
Mueva su archivo al directorio especificado por
secure-file-priv
. -
Deshabilitar
secure-file-priv
. Esto debe eliminarse del inicio y no puede modificarse dinámicamente. Para hacer esto, verifique los parámetros de inicio de MySQL (dependiendo de la plataforma) y my.ini.
Lo que funcionó para mí:
-
Coloque su archivo dentro de la carpeta especificada en
secure-file-priv
.
Para encontrar ese tipo:
mysql> muestra variables como "secure_file_priv";
-
Comprueba si tienes
local_infile = 1
.
Haz eso escribiendo:
mysql> muestra variables como "local_infile";
Si lo consigues:
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" -- $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
Luego configúrelo en uno escribiendo:
mysql> set global local_infile = 1;
- Especifique la ruta completa para su archivo. En mi caso:
mysql> cargar el archivo de datos "C: / ProgramData / MySQL / MySQL Server 8.0 / Uploads / file.txt" en la prueba de tabla;
MySQL usa esta variable del sistema para controlar dónde puede importar sus archivos
mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | |
+------------------+-------+
Entonces, el problema es cómo cambiar las variables del sistema, como
secure_file_priv
.
-
apagado
mysqld
-
sudo mysqld_safe --secure_file_priv=""
ahora puedes ver así:
/var/lib/mysql-files/* rw
Para la versión mysql 8.0 puede hacer esto:
- mysql.server stop
- mysql.server start --secure-file-priv = ''''
Funcionó para mí en Mac High Sierra
Si el archivo es local para su máquina, use LOCAL en su comando
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | OFF |
+---------------+-------+
Si está ejecutando en Ubuntu, también puede necesitar configurar Apparmor para permitir que MySQL escriba en su carpeta, por ejemplo, aquí está mi configuración:
Agregue esta línea al archivo /etc/apparmor.d/usr.sbin.mysqld:
[client]
loose-local-infile = 1
[mysqld]
secure-file-priv = ""
Luego agregue estas 2 líneas de configuración a las secciones /etc/mysql/my.cnf:
select id from blahs into outfile ''/var/lib/mysql-files/blahs'';
Aquí está mi SQL:
select id from blahs into outfile ''/var/lib/mysql-files/blahs'';
A mi me funciono. ¡Buena suerte!
Tuve el mismo problema con ''secure-file-priv''. Los comentarios en el archivo .ini no funcionaron y tampoco lo hizo mover el archivo en el directorio especificado por ''secure-file-priv''.
Finalmente, como sugirió dbc, funcionó ''secure-file-priv'' igual a una cadena vacía. Entonces, si alguien está atrapado después de intentar las respuestas anteriores, espero que esto ayude.
Tuve el mismo problema.
Finalmente resolví usando la opción
LOCAL
en el comando
LOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;
Puede encontrar más información aquí http://dev.mysql.com/doc/refman/5.7/en/load-data.html
Si se especifica LOCAL, el programa del cliente lee el archivo en el host del cliente y lo envía al servidor. El archivo se puede proporcionar como un nombre de ruta completo para especificar su ubicación exacta. Si se proporciona como un nombre de ruta relativo, el nombre se interpreta en relación con el directorio en el que se inició el programa cliente.
Tuve este problema en Windows 10. "--secure-file-priv en MySQL" Para resolver esto, hice lo siguiente.
- En la búsqueda de Windows (abajo a la izquierda), escribí "powershell".
- Haz clic derecho en powershell y se ejecuta como administrador.
- Navegado al archivo bin del servidor. (C: / Archivos de programa / MySQL / MySQL Server 5.6 / bin);
- Mecanografiado ./mysqld
- Presione enter"
El servidor se inició como se esperaba.
Tuve todo tipo de problemas con esto. Estaba cambiando my.cnf y todo tipo de locuras que otras versiones de este problema intentaron mostrar.
Lo que funcionó para mí:
El error que estaba recibiendo
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Pude solucionarlo abriendo /usr/local/mysql/support-files/mysql.server y cambiando la siguiente línea:
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --secure-file-priv="" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
a
mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | NULL |
+------------------+-------+