Ayer vi el uso básico de mysqldump para hacer copias de seguridad de bases de datos MySQL. Hoy voy a ver cómo utilizar mysqldump para volcar los datos de una base de datos MySQL en CSV y archivos de texto delimitados por tabuladores, en lugar de utilizar consultas de inserción SQL que es el método de volcado por defecto.
mysqldump -u -p -T/path/to/directory
La bandera -u se utiliza para especificar el nombre de usuario utilizado para conectarse al servidor de bases de datos MySQL, y usted sustituiría la parte del ejemplo anterior con su nombre de usuario.
La bandera -p indica que se introducirá una contraseña para conectarse a la base de datos; se le pedirá una vez que el comando comience a ejecutarse.
La bandera -T seguida del nombre del directorio es donde MySQL escribirá sus archivos. Puede tener un espacio entre la -T y el comienzo del nombre del directorio o no tenerlo: depende de usted ya que cualquiera de los dos funcionará. Es importante tener en cuenta que el directorio que especifique debe poder ser escrito por el usuario con el que se ejecuta el servidor MySQL. Si no lo es, obtendrá un error como este:
mysqldump: Got error: 1: Can't create/write to file '/path/to/filename.txt' (Errcode: 13) when executing 'SELECT INTO OUTFILE'
Si su máquina Linux tiene SELinux habilitado, entonces el directorio también debe ser permitido por la configuración de SELinux para que MySQL escriba en él.
Archivos creados por mysqldump
Usando el ejemplo anterior, con una base de datos que tiene dos tablas llamadas «algo» y «algo_otro», se crearán cuatro archivos como sigue:
- algo.sql – contiene el SQL para crear la tabla. Por defecto, incluye
DROP TABLE IF EXISTS `something`;
como parte de la consulta - algo.txt – los datos de la tabla «algo» en formato delimitado por tabulaciones
- algo_otro.sql – contiene el SQL para crear la tabla. Por defecto, incluye
DROP TABLE IF EXISTS `something_else`;
como parte de la consulta - algo_otro.txt – los datos de la tabla «algo_otro» en formato delimitado por tabulaciones
Si no desea que se creen los archivos *.sql, puede añadir el indicador -t al comando mysqldump de la siguiente manera:
mysqldump -u -p -t -T/path/to/directory
Tenga en cuenta que incluso si el directorio que especifica no puede ser escrito por el servidor MySQL, los archivos *.sql serán creados; sólo los archivos de texto no pueden ser creados.
Cambiando el formato de salida
Por defecto, mysqldump con la bandera -T volcará los datos en archivos delimitados por tabulaciones. Sin embargo, es posible cambiar el delimitador, y también especificar que las comillas rodeen los valores de los campos.
Para cambiar el delimitador, utilice la bandera --fields-terminated-by=
como en el siguiente ejemplo. En este ejemplo vamos a volcar los datos en valores separados por comas o CSV:
mysqldump -u -p -t -T/path/to/directory --fields-terminated-by=,
Si además quieres poner comillas alrededor de cada campo, entonces utiliza la bandera --fields-enclosed-by=
. En el siguiente ejemplo, cada campo está rodeado de comillas. Tenga en cuenta que debemos escapar del símbolo de las comillas en la línea de comandos con una barra oblicua.
mysqldump -u -p -t -T/path/to/directory --fields-enclosed-by=" --fields-terminated-by=,
El archivo resultante sería como el siguiente ejemplo: