Copiar y restaurar base de datos de MySQL

Lo primero que hay que hacer es hacer un backup de la base de datos, para ello usaremos el comando mysqldump.

$ mysqldump --add-drop-table -u root -p dbname >~/db_name.sql

donde…

root, es el usuario de la base de datos.

dbname, es el nombre de la base de datos que queremos usar.

y ~/db_name.sql es la ruta del fichero donde se guardará el backup.

Una vez hecho esto, podemos restaurar la base de datos, por ejemplo, en otra máquina. Para ello primero arrancamos mysql:

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 5
Server version: 5.0.45-Debian_1ubuntu3.1-log Debian etch distribution
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> create database dbname_copy
mysql> use dbname_copy

recuerda que «mysql>» es el prompt que interpreta los comando de mysql..

ahora para restaurarla usamos el siguiente código:

mysql> source  ~/db_name.sql

Y ya estaría copiada. Estos últimos pasos también se podrían haber hecho de la siguiente forma:

mysql -u root -p dbname < ~/db_name.sql

Sería muy buena idea que se hiciera un backup diario de la BBDD (Con algún cron, por ejemplo) de modo que podamos restaurar la BBDD sin perder mucho margen de datos, y teniéndo el backup automático.

Fuente: inocuo.net y ivorde.ro

You may also like

11 comments

  • Mario 26/11/2008   Reply →

    Hola yo necesito hacer eso desde java llevo semanas y no he podido ya empiezo a pensar que no se puede hasta, ahora logro exportar la base de datos desde java y me genera un archivo.sql con todas las tablas e informacion pero no logro restaurarla tambien desde java porfa si sabes hacer eso seria mi regalo de navidad

    ese codigo uso para crear el respaldo

    try {
    Runtime runtime = Runtime.getRuntime();
    File backupFile = new File(«C:\Documents and Settings\MARIO\Escritorio\copia_seguridad.sql»);
    FileWriter fw = new FileWriter(backupFile);
    Process child = runtime.exec(«C:\Archivos de programa\EasyPHP1-8\mysql\bin\mysqldump –user=root –password= –lock-all-tables –opt prueba»);
    InputStreamReader irs = new InputStreamReader(child.getInputStream());
    BufferedReader br = new BufferedReader(irs);

    String line;
    while( (line=br.readLine()) != null ) {
    fw.write(line + «n»);
    }
    fw.close();
    irs.close();
    br.close();
    } catch (IOException ex) {
    ex.printStackTrace();
    }

    gracias espero tu respuesta

  • Luis_rg 09/03/2009   Reply →

    Saludos…..
    Muchas gracias por la informacion de tu blog, me despejo de algunas dudas que tenia…..
    solo una cosa para la gente que le gusta hacer esto en modo grafico una buena manera es hacerlo con phpmyadmin con hacer click en import o export ya tienes actualizada lo que es la base pero yo prefiero hacerlo manual es mas rapido….

    para la gente que desea generar un programa en java como mario una buena manera de hacerlo es con el conector mysql-connector-java-3.1.12-bin.jar que lo descargas desde la pag de mysql para que restaure la base de datos y el codigo a seguir es el sig::

    import java.sql.*;
    Class Prueba(){
    PreparedStatement ps = null;
    Connection conn = null;

    metodo main(){

    CargarDrivers(); //Metodo que se encargar de cargar los drivers
    openConexion(); //Metodo que se encargara de abrir la conexion
    int r = 0; //variable que contiene la respuesta de la sentencia

    try{
    String sql = «source ~/db_name.sql»;
    ps = conn.PreparedStatement(sql);
    r = ps.executeUpdate;
    if(conn != null) conn.close;
    if(ps != null) ps.close;

    }catch(Exception e){
    e.printStackTrace();
    }
    }
    private void cargarDriver(){
    try{
    Class.forName(«com.mysql.jdbc.Driver»);
    System.out.println(«Drivers cargados exitosamente»);
    }catch(Exception e){
    System.out.println(«Error cargar drivers»);
    }
    }
    public void openConexion(){
    try{
    conn = DriverManager.getConnection(«jdbc:mysql://localhost:3306/», «root», «»);
    System.out.println(«Conexion abierta exitosamente»);
    }catch(Exception e){
    System.out.println(«Error al abrir conexion»);
    e.printStackTrace();

    }
    }

    }

    Bueno la verdad es que no lo he probado y solo es como podria ir el codigo, la idea queda, la verdad esq no c si funcione pero voy a implementar esto en un programa swing dado que voy a tener que estar actualizando la base de datos en dos maquinas en distinto lugar y voy a tener que estar haciendo llegar el archivo ~/db_name.sql por internet para que la otra persona solo lo actualice de forma sencilla… gracias mario por darnos la informacion de como hacer el archivo ~/db_name.sql..
    bueno saludos a todos y gracias….
    cualquier duda; dado que no puse todo el codigo nesesario para ver si se restaura la base de datos, comentarla porq me voy a estar pasando por este blog…

  • Enrique Gómez 24/03/2009   Reply →

    Muchas gracias por vuestros comentarios, es bastante interesante. Saludos 😉

  • Juan Ignacio 17/04/2011   Reply →

    Hola, a mi no me deja restaurar la BD con el comando: – mysql -u root -p «c:usersyolaBD.sql» –

    a que se puede deber, será la versión que tengo de mySql? (5.0)

    Gracias de antemano, Dios los bendiga.

    • Enrique Gómez 17/04/2011   Reply →

      Es que no parece que esté bien formado el comando. Debería de ser algo así:

      mysql -u root -p dbname < ~/db_name.sql

      Saludos.

      • Juan Ignacio 18/04/2011   Reply →

        Si, muchas gracias, pero ahora tengo otro problema…

        Desde el prompt de mysql, la instrucción anda impecable, pero desde mi código (vb.net) no.

        No estoy utilizando una API o algo así. simplemente llamo al cliente mysql.exe y le paso sus argumentos, inmediatamente se ejecuta pero como si no le hubiese pasado argumentos…mostrándome la ayuda y demás.

        Muchas gracias por tu ayuda.

  • Juan Ignacio 17/04/2011   Reply →

    PD: dice que tengo Orror ortográfico.

  • Juan Ignacio 17/04/2011   Reply →

    Sintáctico, perdón.

  • Juan Ignacio 19/04/2011   Reply →

    Yo nuevamente, vale aclarar que no puedo usar un «Restore table» de mySQL porque mi base está hecha con InnoDB y el anterior está disponible solamente para MyISAM.

    Quizá una alternativa sea mudarme al segundo motor de BD, pero el mismo MySQL dice que Inno es «mejor», porque es libre, y tiene otras cosas…y es además (InnoDB) el que se aplica por defecto desde el Administrator.

    Por descarte, es algo del Visual, pero voy a seguir experimentando, no me queda otra. a menos que pueda hacer un híbrido con python… xD …¡que no es mala idea!

  • Juan Ignacio 21/04/2011   Reply →

    Hola, quería comentar que solucioné el problema de «Restaurar Base Mysql + Windows + vb.net».

    La solución la encontré en un blog, donde daba la idea de crear un archivo ejecutable .bat de Windows, escribiendo ahí el comando de restauración. Funcionó perfectamente, y para el entorno windows es ideal, ya que la idea de hacerlo desde python, llevaría otro proceso mas largo.

    Desde vb.net NO PUDE HACERLO FUNCIONAR, así que esta es la solución más aceptable.

    Dios los bendiga. 🙂

Leave a comment