El otro día necesitaba realizar una copia de unsa base de datos por el simple echo de tener que poner la base de datos de 'develop' a producción. Por SQL no encontré nada, pero encontré este comando que hacia exactamente lo que queria, realizar una copia de la base de datos.
Lo primero que se debe hacer es entrar en mysql y crear la base de datos nueva en caso de no tenerla creada.
create database nueva_base_de_datos
Una vez creada tenemos dos opciones, o copiarla con los datos o solo con la estructura. Si queremos copiar la estructura de las tablas y los datos que contienen, al comando mysqldump le quitaremos la opción -d. Si queremos solo la estructura le anyadimos la opción -d.
Comando con copiado solo de estructura:
mysqldump -u usuario -pcontrasenya -d base_de_datos_original | mysql -u usuario -pcontrasenya -D nueva_base_de_datos
Comando con copiado de datos y estructura:
mysqldump -u usuario -pcontrasenya base_de_datos_original | mysql -u usuario -pcontrasenya -D nueva_base_de_datos
Es bastante sencillo, hace un dump de la base de datos a copiar y luego realiza una tuberia hacia una consola de mysql creando la base de datos con el nombre que queramos y los datos de la base de datos original.
Es importante poner la contrasenya en el comando 'mysqldump' ya que no podrás ponerla manualmente. En el otro comando si puedes ponerla manualmente. Si te da cosa ponerlo en el comando porque podrá salir cuando listes los procesos no te preocupes porque bash cambiará por asteriscos los carácteres de tu contrasenya.
Si quisieramos hacer lo mismo, pero copiando la base de datos remotamente, es decir , en otro servidor y además no queremos o podemos configurar la 'bind address' para que mysql permita conexiones externas tenemos una opción, que es realizar un tunel ssh para pasar los datos de un msyql a otro.
mysqldump -u usuario -pcontrasenya -d base_de_datos_original | ssh usuario@servidor_externo.com mysql -u usuario -pcontrasenya -D nueva_base_de_datos
Con este comando pasa lo mismo que con el anterior, hay que poner las contraseñas en el mismo comando, y en el caso de la contrasenya ssh se puede poner en el comando o manual. También se peude configurar las claves rsa.
Si eres un poco paranoico como yo y no quieres dejar tu contraseña en el bash history ejecuta este comando y limpiará tu historial de esa sesión
history -c