2011-06-08 19 views
10

¿Cuál es la forma más fácil de mover esquemas mysql (tablas, datos, todo) de un servidor a otro?MySQL - Mueva todo a un nuevo servidor

¿Hay un método fácil de mover todo esto de un servidor que ejecuta mysql a otro que ya está ejecutando mysql?

+0

Exportar y importar? –

+0

¿están estos comandos incorporados? Soy nuevo en esto. – FozzieBeer

+0

Si tiene algún tipo de panel de control como CPanel, Plesk, etc., en los servidores que está utilizando, es probable que tenga acceso a phpMyAdmin que tiene funciones de exportación e importación. –

Respuesta

6

Vuelque la base de datos utilizando mysqldump o si está utilizando PHPMyAdmin y luego exporte la estructura y los datos.

Para mysqldump va a requerir la consola y use el siguiente comando:

mysqldump -u <user> -p -h <host> <dbname> > /path/to/dump.sql

Luego, en el otro servidor:

mysql -u <user> -p <dbname> < /path/to/dump.sql

+0

gracias, voy a google mysqldump – FozzieBeer

+0

he agregado la sintaxis anterior para usted - Voy a comprobar que ahora – lethalMango

+0

gracias, tengo acceso de shell. – FozzieBeer

4

Si usted se está moviendo desde la misma arquitectura a la misma arquitectura (x86-> x86, x86_64 -> x86_64), simplemente puede sincronizar su datadir MySQL de un servidor a otro. Obviamente, no deberías ejecutar esto mientras tu viejo daemon MySQL se está ejecutando.

Si sus bases de datos están basadas en InnoDB, entonces querrá asegurarse de que sus archivos de registro InnoDB se hayan purgado y sus contenidos se hayan fusionado en el disco antes de copiar los archivos. Puede hacer esto configurando innodb_fast_shutdown en 0 (el valor predeterminado es 1, que será no vaciará los registros en el disco), lo que causará que el archivo de registro se vacíe en el siguiente apagado del servidor. Puede hacerlo ingresando a MySQL como root, y en la cáscara de MySQL, hacer:

SET GLOBAL innodb_fast_shutdown=0

o estableciendo la opción en su my.cnf y reiniciar el servidor para tirar en el cambio, entonces cerrando para vaciar el registro.

hacer algo como:

#On old server (notice the ending slash and lack thereof, it's very important) 
rsync -vrplogDtH /var/mysql [email protected]:/var/mysql/ 
#Get your my.cnf 
scp /etc/my.cnf [email protected]:/etc/my.cnf 

Después de que es posible que desee ejecutar mysql_upgrade [-p your_root_password] para asegurarse de que las bases de datos estén al día.

Diré que me funcionó en el (muy reciente) pasado (pasando de un servidor antiguo a uno nuevo, ambos ejecutando FreeBSD 8.x), pero YMMV según la cantidad de versiones que tengas en el pasado.

+0

Hago esto, hay muchas pequeñas cosas que pueden salir mal, especialmente si hay tablas InnoDB. Sugiero usar [xtrabackup de Percona] (http://www.percona.com/docs/wiki/percona-xtrabackup:start) para una tarea como esa. – Wrikken

+0

Lamentablemente, la arquitectura es diferente, aunque estoy seguro de que otros apreciarán este consejo. – FozzieBeer

+0

@Wrikken ¿Conoce alguna documentación sobre ** qué * podría salir mal con este método? Te creo (hay muchas cosas pequeñas que podrían salir mal), pero me preguntaba si había una lista definitiva sobre por qué no hacerlo así. – bhamby

10

Si está utilizando claves SSH:

$ mysqldump --all-databases -u[user] -p[pwd] | ssh [host/IP] mysql -u[user] -p[pwd] 

Si no está utilizando claves SSH:

$ mysqldump --all-databases -u[user] -p[pwd] | ssh [email protected][host/IP] mysql -u[user] -p[pwd] 

ADVERTENCIA: Usted querrá borrar el historial después de esto para evitar que alguien encontrar su contraseñas

$ history -c 
+0

Esto funcionó como un encanto para mí, copié todas las bases de datos muy rápidamente a mi nuevo sistema !! –

+0

¿Cómo se correlaciona agregar "usuario @" al uso de claves ssh? Sólo curioso. – Equidamoid

Cuestiones relacionadas