quitar - mysql-- secure file priv error
MySQL ERROR 1290(HY000)--secure-file-priv option (7)
Estoy tratando de escribir los resultados del script MySQL en un archivo de texto usando el siguiente código en mi script.
SELECT p.title, p.content, c.name FROM post p
LEFT JOIN category c ON p.category_id=c.id
INTO OUTFILE ''D:/MySql/mysqlTest.txt'';
Sin embargo, estoy recibiendo lo siguiente
ERROR 1290 (HY000): el servidor MySQL se ejecuta con la opción --secure-file-priv por lo que no puede ejecutar esta declaración
¿Cómo puedo solucionar esto?
- Edite el (archivo /etc/my.cnf para CentOS) o (archivo my.ini para Windows)
- Agregue la línea
secure-file-priv = ""
al final - Detener el servicio mysql usando
systemctl stop mysqld
- Reinicie usando
systemctl start mysqld
Ahora le permitirá importar y exportar los datos.
En mi my.ini solo tuve
# Secure File Priv.
y traté de poner:
# Secure File Priv.
secure-file-priv = ""
y
# Secure File Priv.
secure-file-priv = NULL
sin hacer que funcione.
Finalmente borré la línea y me fui solo:
secure-file-priv = ""
Trabajando correctamente.
Este es el ejemplo de mi SQL que funcionó perfectamente en WAMP SERVER (windows):
SELECT display_name,user_email,user_registered FROM test_wp_users
ORDER BY user_registered ASC
INTO OUTFILE ''C:/wamp64/tmp/usersbyemail.csv''
FIELDS TERMINATED BY '',''
ENCLOSED BY ''"''
LINES TERMINATED BY ''/n'';
PD: Tenga en cuenta que las barras en la ruta deben ir de izquierda a derecha para funcionar perfectamente en MYSQL.
No puede exportar datos tal como están configurados en los archivos de configuración de mysql. Abra el archivo de configuración my.cnf y verifique.
Cita de MySQL doc
Esta variable se usa para limitar el efecto de las operaciones de importación y exportación de datos, como las que se realizan con las
SELECT ... INTO OUTFILE
LOAD DATA
ySELECT ... INTO OUTFILE
y la funciónLOAD_FILE()
. Estas operaciones están permitidas solo para los usuarios que tienen el privilegio deFILE
.
secure_file_priv
se puede configurar de la siguiente manera:
Si está vacío, la variable no tiene efecto.
Si se configura con el nombre de un directorio, el servidor limita las operaciones de importación y exportación para trabajar solo con los archivos en ese directorio. El directorio debe existir; El servidor no lo creará.
Si se establece en
NULL
, el servidor deshabilita las operaciones de importación y exportación. Este valor está permitido a partir de MySQL 5.7.6.
(Un valor vacío es el valor predeterminado o se puede especificar explícitamente en my.cnf como secure_file_priv=""
. Un valor NULL
se puede establecer con secure_file_priv=NULL
).
Por lo tanto, si desea exportar datos, debe comentar esta opción y reiniciar el servidor mysql. Entonces podrás exportar.
PARA MAC OS, si está instalado vía HOMEBREW:
Editar mi.cnf RUTA: /usr/local/etc/my.cnf
Copia esto:
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 0.0.0.0
secure-file-priv = ''''
SALVAR
Explicación: Secure_file_prive = NULL - Limitar mysqld no está permitido importar y exportar Secure_file_priv = ''/ tmp /'' - Limitar mysqld importar y exportar solo puede ocurrir en / tmp / directorio Secure_file_priv = '''' - no restringe la importación de mysqld
Reemplace "/"
a "/"
en su ruta de archivo.
Me gusta esto:
INTO OUTFILE ''D:/MySql/mysqlTest.txt'';
Ubuntu 16.04 (FÁCIL): Averigüe dónde se le permite escribir
mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/ |
+---------------------------+
1 row in set (0.00 sec)
Entonces, simplemente escribe allí
mysql> SELECT * FROM train INTO OUTFILE ''/var/lib/mysql-files/test.csv'' FIELDS TERMINATED BY '','';
Query OK, 992931 rows affected (1.65 sec)
mysql>
Mac OSX: Mysql instalado a través de MAMP
Averigua dónde puedes escribir
mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| NULL |
+---------------------------+
1 row in set (0.00 sec)
NULO significa que estás jodido, así que debes crear el archivo "~ / .my.cnf"
Habilite la lectura / escritura para MySQL instalado a través de MAMP (en Mac):
- abrir "MAMP" usar foco
- haga clic en "Detener servidores"
edite ~ / .my.cnf (usando vi o su editor favorito) y agregue las siguientes líneas:
$ vi ~ / .my.cnf
[mysqld_safe] [mysqld] secure_file_priv="/Users/russian_spy/"
- haga clic en "Iniciar Servidores" (en la ventana MAMP)
Ahora comprueba si funciona:
a. iniciar mysql (el usuario MAMP predeterminado es root, la contraseña también es root)
$ /Applications/MAMP/Library/bin/mysql -u root -p
segundo. en mysql mira los caminos en la lista blanca
mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| /Users/russian_spy/ |
+---------------------------+
1 row in set (0.00 sec)
do. Finalmente, pruebe exportando un train
tablas a un archivo CSV
mysql> SELECT * FROM train INTO OUTFILE ''/Users/russian_spy/test.csv'' FIELDS TERMINATED BY '','';
Query OK, 992931 rows affected (1.65 sec)
mysql>