¿Cómo Exportar/Importar una Base de Datos WordPress (MySQL) Correctamente por Línea de Comandos?
Normalmente, una base de datos MySQL puede ser exportada e importada usando estos simples comandos SSH:
Exportar:
mysqldump -u USERNAME -p DATABASE_NAME > filename.sql
Importar:
mysql -u USERNAME -p DATABASE_NAME < filename.sql
Pero no es tan simple cuando se trata de WordPress. Por lo que he visto, se necesitan mencionar parámetros adicionales, como por ejemplo --add-drop-table
.
El Codex de WordPress proporciona algo de información, pero parece desordenada y no lo suficientemente clara.
Sería genial si alguien que use la línea de comandos pudiera compartir los comandos correctos para exportar e importar una base de datos de WordPress, con alguna explicación (de los nuevos parámetros utilizados).
Además, ¿hay alguna razón por la que no sería aconsejable usar la línea de comandos cuando se trabaja con bases de datos, y en su lugar usar una interfaz gráfica como phpMyAdmin?

Es así de simple también para WordPress. Yo uso lo siguiente para hacer copias de seguridad de mis sitios WP:
mysqldump -u USUARIO -pCONTRASEÑA --quick --extended-insert NOMBRE_BD > backup.sql
El documento de mysqldump proporciona los detalles sobre todos los parámetros.
--extended-insert
es más rápido cuando se actualiza una base de datos desde un archivo de volcado y hace que el archivo de volcado sea más pequeño.
--quick
hace que la creación del volcado sea más rápida.
Realmente no necesitas usar ninguno de estos, solo hace las cosas un poco más rápidas y escribir una inserción por cada fila simplemente me hace sentir más feliz - tu sintaxis original de volcado estaría bien.
No olvides que hay entradas específicas del dominio en la base de datos, así que si estás usando este método para respaldar/restaurar, entonces estás bien, pero si quieres moverte de un.com a dos.com, necesitarás editar entradas en wp_options
después de restaurar tu volcado.

Pero ¿qué pasa con --add-drop-table
y cosas similares mencionadas en la página del codex? http://codex.wordpress.org/Backing_Up_Your_Database#Using_Straight_MySQL_Commands - ¿estás seguro de que no son necesarias?

No es necesario, con las opciones que uso los archivos de volcado tienen esto antes de crear la tabla y las inserciones posteriores:
DROP TABLE IF EXISTS <wp_tablename>
;
así que las tablas siempre se eliminan y luego se crean, después se insertan los datos en ellas

Estoy de acuerdo con Steve, tus comandos originales mysqldump -u USUARIO -p CONTRASEÑA NOMBRE_BD > archivo.sql
y
mysql -u USUARIO -p CONTRASEÑA NOMBRE_BD < archivo.sql
funcionarían perfectamente. Lo único de lo que hay que tener cuidado es de hacer reemplazos de cadenas entre la exportación e importación si se mueve entre dominios.

Como actualización sobre las opciones: esto es de la documentación de mysqldump:
Algunas opciones de mysqldump son abreviaturas para grupos de otras opciones:
El uso de --opt es lo mismo que especificar --add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick y --set-charset. Todas las opciones que representa --opt también están activadas por defecto porque --opt está activado por defecto.

Después de invertir tiempo en aprender los conceptos básicos de la línea de comandos, ahora estoy usando cada vez menos phpMyAdmin.
Sin embargo, lo encuentro más fácil cuando necesito navegar o editar una entrada (como editar las entradas de wp_options
, como menciona Steve arriba).
También solía recurrir a la interfaz gráfica cuando quería excluir una tabla particularmente grande (como los registros de un plugin) que no necesitaba respaldar. Pero he descubierto que simplemente puedes agregar
--ignore-table=my_db_name.my_table_name my_db_name

Para copiar un sitio a una nueva ubicación.
Usa --add-drop-table durante la exportación, si estás importando a una base de datos vacía. Omite --add-drop-table durante la exportación, si estás importando para fusionar la base de datos.
Recuerda actualizar wp_options después de cada importación, ya que la ruta es diferente. También actualiza el archivo .htaccess con la nueva ruta.
