2012-02-28 10 views
6

Hola tengo para mover la base de datos MySQL a otro servidor,Cómo mover la base de datos mysql de la manera más fácil y rápida?

es casi 5 gb

puedo tener acceso root en ambos servidores?

+0

Creo que este tipo de preguntas pertenecen en http://dba.stackexchange.com/ me mudaría a migrar, pero que no tienen la Rep: p O tal http://www.Superuser.com pero sospecho que el primero ya que es específico de la base de datos. – Jordan

Respuesta

22

lo general, se ejecuta mysqldump para crear una copia de base de datos y copias de seguridad de la siguiente manera:

$ mysqldump -u user -p db-name > db-name.out 

Copiar archivo db-name.out utilizando SFTP/SSH al servidor remoto MySQL:

$ scp db-name.out [email protected]:/backup 

Restaurar la base de datos en servidor remoto (login a través de SSH):

$ mysql -u user -p db-name < db-name.out 

O

$ mysql -u user -p 'password' db-name < db-name.out 

¿Cómo copio una base de datos MySQL de una computadora/servidor a otra?

La respuesta breve es que puede copiar la base de datos de una computadora/servidor a otra utilizando el cliente ssh o mysql.

Puede ejecutar todos los 3 comandos anteriores en una sola pasada usando mysqldump y los comandos de MySQL (método inseguro, use sólo si está utilizando VPN o confía en su red):

$ mysqldump db-name | mysql -h remote.box.com db-name 

utilizar SSH si no' t tiene acceso directo al servidor remoto MySQL (método seguro):

$ mysqldump db-name | ssh [email protected] mysql db-name 

O

$ mysqldump -u username -p'password' db-name | ssh [email protected] mysql -u username -p'password db-name 

Haces c un simplemente copia tabla llamada foo a base de datos remota (y remote.box.com servidor MySQL remoto) llamados bar usando misma sintaxis:

$ mysqldump db-name foo | ssh [email protected] mysql bar 

O

$ mysqldump -u user -p'password' db-name foo | ssh [email protected] mysql -u user -p'password' db-name foo 

Casi todos los comandos se puede ejecutar mediante tuberías bajo OSES de UNIX/Linux.

Más de Reference

Saludos,

+3

Asegúrate de utilizar la opción de insertos extendidos en tu volcado (creo que podría estar activado de manera predeterminada, pero no positiva) o la velocidad de restauración sufrirá significativamente. –

+2

* tomado de aquí: http://www.cyberciti.biz/tips/howto-copy-mysql-database-remote-server.html –

13

Si tiene raíz, puede que le resulte más rápido para evitar mysqldump. Puede crear la base de datos en el servidor de destino y copiar los archivos de la base de datos directamente. Suponiendo user tiene acceso al directorio de MySQL del servidor de destino:

cosas
[[email protected]]# /etc/init.d/mysqld stop 
[[email protected]]# cd /var/lib/mysql/[databasename] 
[[email protected]]# scp * [email protected]:/var/lib/mysql/[databasename] 
[[email protected]]# /etc/init.d/mysqld start 

importantes aquí son: Detener mysqld en ambos servidores antes de copiar los archivos de base de datos, asegúrese de que la propiedad de los archivos y los permisos son correctos en el destino antes de iniciar mysqld en el servidor de destino

[[email protected]]# chown mysql:mysql /var/lib/mysql/[databasename]/* 
[[email protected]]# chmod 660 /var/lib/mysql/[databasename]/* 
[[email protected]]# /etc/init.d/mysqld start 

Con el tiempo ser su prioridad en este caso, el uso de la compresión dependerá de si la pérdida de tiempo de espera para la compresión/descompresión (con algo como gzip) será mayor que la pérdida de tiempo la transmisión de datos sin comprimir; es decir, la velocidad de tu conexión.

+0

Este es de lejos el método más fácil. No estoy seguro de por qué esto no está más arriba. El servidor MySQL es entonces una copia del original. Acabo de clonar todo un servidor web en un servidor único en aproximadamente 5 minutos. – David

+0

Hice los pasos anteriores, pero obtengo "ERROR 1146 (42S02): la tabla 'sample.user' no existe", cuando trato de imprimir la tabla de usuarios. Alguna idea ?? – Bathakarai

+0

Ideas: archivos para la tabla de usuarios en la ruta incorrecta, permisos de archivos incorrectos o servidores configurados de manera diferente. – Umbrella

2

Para una forma automatizada de copia de seguridad de su base de datos MySQL:

Los requisitos previos para hacer cualquier tipo de copia de seguridad es encontrar el momento ideal del día para completar la tarea sin obstaculizar el desempeño de los sistemas que ejecutan o interferir con los usuarios. En ese sentido, el tamaño de la base de datos debe tenerse en cuenta junto con la velocidad de E/S de las unidades: esto se vuelve exponencialmente más importante a medida que la base de datos crece (otro factor que viene a la mente es el número de unidades, como tener la unidad alternativa donde la base de datos no está almacenada aumentaría la velocidad debido a que los cabezales no realizarían tanto lecturas como escrituras). Por el motivo de mantener esto legible, supongo que la base de datos es de un tamaño manejable (100 MB) y el trabajo El entorno es un trabajo de 9 a.m.-5 p.m. sin estrés real u otros sistemas en funcionamiento fuera de horario.

El primer paso sería iniciar sesión en su equipo local con privilegios de administrador. Una vez en el shell raíz, un usuario de MySQL deberá crearse con privilegios de solo lectura. Para ello, introduzca la cáscara de MySQL con el comando:

mysql -uroot -ppassword 

A continuación, tendrá que ser creada con privilegios de solo lectura a la base de datos que necesita ser respaldado un usuario. En este caso, no es necesario asignar una base de datos específica a un usuario en caso de que la secuencia de comandos o el proceso se utilicen más adelante. Para crear un usuario con privilegios de acceso completo de lectura, introducir estos comandos en el shell de MySQL:

grant SELECT on *.* TO [email protected] IDENTIFIED BY ' backuppassword'; 
FLUSH PRIVILEGES; 

Con el usuario MySQL creada, es seguro para salir de la cáscara de MySQL y colocar de nuevo en el intérprete de comandos usando exit. A partir de aquí, tendremos que crear la secuencia de comandos que queremos ejecutar nuestros comandos de copia de seguridad, esto se logra fácilmente utilizando BASH. Este script se puede almacenar en cualquier lugar, ya que usaremos un trabajo cron para ejecutar el script cada noche, por el bien de este ejemplo colocaremos el script en un nuevo directorio que creamos llamado "backupscripts". Para crear este directorio, utilice este comando en el intérprete de comandos:

mkdir /backupscripts 

También tendrá que crear un directorio para almacenar nuestras copias de seguridad a nivel local. Llamaremos a este directorio "registros de respaldo". Emitir este comando en el intérprete de comandos para crear el directorio:

mkdir /backuplogs 

El siguiente paso sería iniciar una sesión en la máquina remota con credenciales de raíz y crear un "usuario de copia de seguridad" con el comando:

useradd -c "backup user" -p backuppassword backupuser 

Crear un directorio para las copias de seguridad:

mkdir /backuplogs/ 

Antes de que finalice la sesión, toma la dirección IP del host remoto para futuras consultas con el comando:

ifconfig -a 

eth0 es la interfaz estándar para una conexión de red por cable. Tenga en cuenta este IP_ADDR.

Finalmente, cierre la sesión del servidor remoto y regrese a su host original.

A continuación vamos a crear el archivo que es nuestro script en nuestra máquina local anfitrión, no el mando a distancia. Usaremos VIM (no lo mantengas en mi contra si eres un fan de nano o emacs, pero no voy a enumerar cómo usar VIM para editar un archivo aquí) primero crea el archivo y usa mysqldump , respalde su base de datos. También usaremos scp para Después de que se haya creado la base de datos, comprima su archivo para almacenarlo. Lea el archivo en STDOUT para cumplir con las instrucciones. Finalmente, verifique si hay archivos de más de 7 días de antigüedad. Eliminarlos. Para ello, la secuencia de comandos se verá así:

vim /backupscripts/mysqldbbackup.sh 

#!/bin/sh 

# create a temporary file for the schema to be stored 
BACKUPDIR = /backuplogs/ 
TMPFILE = tmpout.sql 
CURRTIME = $(date +%Y%m%d).tgz 

#backup your database 
mysqldump -ubackupdbuser -pbackuppassword databasename > $BACKUPDIR$TMPFILE 

#compress this file and store it locally with the current date 
tar -zvcf /backuplogs/backupdb-$CURRTIME $BACKUPDIR$TMPFILE 

#per instructions - cat the contents of the SQL file to STDOUT 
cat $BACKUPDIR$TMPFILE 

#cleanup script 
# remove files older than 7 days old 
find $BACKUPDIR -atime +7 -name 'backup-db-*.tgz' -exec rm {} \; 

#remove the old backupdirectory from the remote server 
ssh [email protected] find /backuplogs/ -name 'backup-db-*.tgz' -exec rm {} \; 

#copy the current backup directory to the remote server using scp 
scp -r /backuplogs/ [email protected]:/backuplogs/ 

################# 
# End script 
################# 

Con este script en su lugar, tendremos que las claves ssh de configuración, por lo que no le solicita una contraseña cada vez que se ejecuta el script. Haremos esto con SSH-keygen y el comando:

ssh-keygen -t rsa 

Ingrese una contraseña en el indicador - esto crea su clave privada. No compartas esto

El archivo tiene que compartir es la clave pública, que se almacena en el archivo current_home/.ssh/id_rsa.pub. El siguiente paso es transferir esta clave pública a su host remoto. Para obtener la clave use el comando:

cat current_home/.ssh/id_rsa.pub 

copie la cadena en el archivo. Siguiente SSH en el servidor remoto utilizando el comando:

ssh [email protected] 

Introduzca su contraseña y luego editar el archivo /.ssh/authorized_keys. Pegue la cadena que se obtuvo de su archivo id_rsa.pub en el archivo authorized_keys. Escriba los cambios en el archivo usando su editor y luego salga del editor. Salga de su servidor remoto y pruebe que las claves RSA han funcionado al intentar iniciar sesión nuevamente en el servidor remoto utilizando el comando ssh anterior. Si no se solicita una contraseña, está funcionando correctamente. Cierre la sesión del servidor remoto nuevamente.

La última cosa que tendremos que hacer es crear una tarea programada para ejecutar este cada noche después que los usuarios han cerrado la sesión. Usando crontab, editaremos el archivo de usuarios actual (raíz) para evitar todos los problemas de permisos. * Nota: esto puede tener serias implicaciones si hay errores en sus scripts, incluyendo eliminación de datos, vulnerabilidades de seguridad, etc. - revise todo su trabajo y asegúrese de confiar en su propio sistema, si esto no es posible, entonces un usuario alternativo y los permisos deben configurarse en el servidor actual *. Para editar el crontab actual emitimos el comando:

crontab -e 

Mientras que en el editor de crontab (se abrirá en el editor de texto por defecto), vamos a fijar nuestra secuencia de comandos para ejecutar todas las noches a las 12 : 30 a.m. Introducir una nueva línea en el editor:

30 0 * * * fiesta /backupscripts/mysqldbbackup.sh

Guardar este archivo y salga del editor. Para que su cronjob funcione correctamente, tendremos que reiniciar el servicio crond. Para ello, ejecute el comando:

/etc/init.d/crond restart 
Cuestiones relacionadas