Red de conocimiento informático - Aprendizaje de programación - Cómo restaurar la base de datos respaldada en Linux

Cómo restaurar la base de datos respaldada en Linux

1. Utilice comandos relacionados con MySQL para una copia de seguridad local sencilla

1 comando mysqlldump

mysqldump es un mecanismo de copia de seguridad a nivel de SQL que importa tablas de datos en archivos de script SQL. son relativamente adecuados para actualizar entre diferentes versiones de MySQL. Este es también el método de copia de seguridad más utilizado.

Es muy sencillo utilizar mysqldump para realizar copias de seguridad. Si desea realizar una copia de seguridad de la base de datos "db_backup", utilice el comando:

#mysqldump –u -p phpbb_db_backup > /usr. /backups/mysql/db_backup2008-1 -6.sql

También puedes usar el comando gzip para comprimir el archivo de respaldo:

#mysqldump db_backup | mysql/ db_backup2008-1-6.sql. gz (¡El sql generado después de la copia de seguridad no contiene declaraciones de creación de bases de datos!)

Solo haga una copia de seguridad de algunas tablas de bases de datos actualizadas con frecuencia:

## mysqldump sample_db artículos comentarios enlaces > /usr/backups/ mysql/sample_db.art_comm_lin.2008-1-6.sql

El comando anterior realizará una copia de seguridad de las tablas de artículos, comentarios y enlaces.

Usa el comando para restaurar datos:

#mysql –u -p db_backup

Pagar atención al uso La base de datos debe estar ejecutándose al ejecutar este comando.

2 Utilice la sintaxis SOURCE

De hecho, esta no es la sintaxis SQL estándar, sino una función proporcionada por el cliente mysql, por ejemplo:

# SOURCE / tmp/db_name .sql;

La ruta absoluta del archivo debe especificarse aquí, y debe ser un archivo que el usuario que ejecuta mysqld (como nadie) tenga permiso para leer.

3 copia de seguridad de mysqlhotcopy

mysqlhotcopy solo se puede utilizar para realizar copias de seguridad de MyISAM y solo se puede ejecutar en sistemas Linux, Unix y NetWare. mysqlhotcopy admite la copia de varias bases de datos a la vez y también admite expresiones regulares. Aquí hay algunos ejemplos:

#mysqlhotcopy -h=localhost -u=goodcjh -p=goodcjh db_name /tmp

(Copia el directorio de la base de datos db_name a /tmp)

Tenga en cuenta que si desea utilizar mysqlhotcopy, debe tener permisos SELECT y RELOAD (para ejecutar FLUSH TABLES), y también debe tener permiso para leer el directorio datadir/db_name.

Método de restauración de la base de datos:

mysqlhotcopy realiza una copia de seguridad de todo el directorio de la base de datos, que se puede copiar directamente al directorio especificado por mysqld (aquí está /usr/local/mysql/data/ ) y preste atención a los problemas de permisos. Además, primero debe eliminar la copia anterior de la base de datos de la siguiente manera:

# /bin/rm -rf /mysql-backup/**//*. old

# /bin/rm -rf /mysql-backup/**//*old

p>

Tres pasos para cerrar el servidor mysql, copiar archivos y consultar para iniciar el servidor mysql:

# /etc/init.d/mysqld stop

Deteniendo MySQL: [ OK ]

# cp -af /mysql-backup/ **//* /var/lib/mysql /

# /etc/init.d/mysqld start

Iniciando MySQL: [ OK ]

# chown -R nadie: nadie /usr/local/mysql/data/ (cambie el propietario del directorio db_name al usuario que ejecuta mysqld)

2. Usar copia de seguridad de red

Es. No es seguro colocar datos MYSQL en una computadora, por lo que se debe realizar una copia de seguridad de los datos en otras computadoras Linux en la LAN. Supongamos que la dirección IP del servidor Mysql es: 192.168.1.3. La dirección IP de la computadora remota que usa Linux en la LAN es 192.168.1.4. Similar al recurso compartido de red de Windows, el sistema UNIX (Linux) también tiene su propio recurso compartido de red, que es NFS (Network File System), en Linux. cliente Antes de montar un recurso compartido de disco NFS, primero se debe configurar el servidor NFS. El método de configuración del servidor NFS en el sistema Linux es el siguiente:

(1) Modifique /etc/exports y agregue un directorio compartido

/export/home/sunky 192.168.1.4( rw)

/export/home/sunky1 *(rw)

/export/home/sunky2 linux-client(rw)

Nota: /export/ home/ Sunky, sunky1 y sunky2 en el directorio son los directorios que se compartirán 10.140.133.23, * y linux-client son las direcciones IP o nombres de host que pueden montar este cliente Linux compartido. Si desea utilizar el nombre de host linux-client, debe agregar la definición de IP del host de linux-client en el archivo host/etc/hosts del servidor. El formato es el siguiente:

192.168.1.4 linux-client

Si modifica el archivo /etc/export para agregar un nuevo *share, primero debe detener el servicio NFS y luego inicie el servicio NFS. Habilite el disfrute *** recién agregado para que surta efecto. También puedes usar el comando exportfs -rv para lograr el mismo efecto. El cliente Linux monta recursos compartidos NFS* de otros sistemas Linux o sistemas UNIX. Aquí asumimos que 192.168.1.4 es la dirección IP del servidor NFS. Por supuesto, el nombre del host también se puede usar aquí, pero la definición de IP del servidor debe agregarse al archivo /etc/hosts local. /export/home/sunky es el directorio compartido por el servidor. De esta manera, puede utilizar /mnt/nfs en el cliente Linux para acceder a archivos compartidos por otros sistemas Linux o sistemas UNIX en modo NFS.

Para hacer una copia de seguridad de los datos MYSQL en una computadora remota usando Linux, debe instalar el protocolo NFS (sistema de archivos de red) en ambos extremos. Después de instalar el protocolo NFS en la computadora NFS remota, debe modificarlo. el archivo de configuración: /etc/exports, join Una línea:

/usr/backups/mysql/ 192.168.1.4 (rw, no_root_squash)

Indica que /usr/backups/ El directorio mysql/ será compartido. Este directorio tiene permisos de lectura y escritura para el usuario root remoto. Guarde el archivo de configuración NFS y luego use el comando:

#exportfs -a –r

Luego reinicie el servicio NFS:

#service nfsd start

Después de configurar la computadora remota, cree un directorio backup_share en el directorio servidor MYSQL/mnt:

#mkdir /mnt/backup_share

Cambie el /usr/ de la computadora Linux remota El directorio backups/mysql/ está montado en el directorio /mnt/backup_share del servidor MYSQL:

# mount -t nfs 192.168.1.4:/usr/backups/mysql /mnt/backup_share

Después de montar el directorio, siempre que ingrese al directorio /mnt/backup_share, estará en el directorio /usr/backups/mysql de la computadora NFS con la dirección IP: 192.168.1.4. Utilice mysqldump a continuación para realizar una copia de seguridad de "phpbb_db_backup" en una computadora remota:

# mysqldump db_backup > /mnt/backup_share/ db_backup2008-1-6.sql

Método para completar automáticamente la copia de seguridad de la red :

El programa en el servidor Linux actualiza la base de datos MySQL todos los días, así que pensé en escribir un script de shell y combinarlo con crontab para realizar copias de seguridad de la base de datos con regularidad. Cree un script de shell: sample_db_backup.sh

# Al final, $(date +%F) agrega automáticamente la fecha de la copia de seguridad

mysqldump -u -p -h sample_db > /mnt/backup_share/sample_db.$(date +%F)

#desmontar el sistema de archivos

umount /mnt/backup_share

# mount \u2013o soft 192.168.1.4:/archive /mnt/backup_share

Descripción: un parámetro importante del montaje del servidor NFS: montaje duro (duro) o montaje suave (soft).

Montaje duro: el cliente NFS intentará conectarse continuamente al servidor NFS (en segundo plano, generalmente no se mostrará ningún mensaje) hasta que se monte.

Montaje suave: intentará conectarse al servidor NFS en primer plano, que es el método de conexión predeterminado. Cuando se recibe un mensaje de error, se finaliza el intento de montaje y se proporciona la información relevante.

En cuanto a si utilizar montaje duro o montaje suave, depende principalmente de a qué información acceda.

Por ejemplo, cuando desea ver archivos de video en un servidor NFS, definitivamente no desea que el sistema genere una gran cantidad de mensajes de error debido a algunas circunstancias inesperadas (como que la velocidad de la red de repente se vuelva muy lenta). está utilizando un disco duro en este momento. Si está montado, el sistema esperará hasta que pueda restablecer una conexión con el servidor NFS para transmitir información. Además, si se trata de datos no críticos, también puede utilizar el montaje suave, como FTP para algunos datos, etc., para que su sesión no se suspenda cuando la máquina remota no pueda conectarse temporalmente o se apague.

Cree los permisos del archivo de script a continuación: chmod +x ./sample_db_backup.sh

Luego agregue este script a la tarea programada /etc/crontab:

01 5 * * 0 mysql /home/mysql/ sample_db_backup.sh

Bien, todos los domingos a las 5:01 am el sistema ejecutará automáticamente el archivo sample_db_backup.sh para realizar una copia de seguridad de la base de datos MySQL a través de la red.

3. Recuperación en tiempo real de datos de MySQL

Mysqldump es una herramienta muy útil para realizar copias de seguridad de datos y estructuras de tablas de MySQL. Sin embargo, normalmente las copias de seguridad se realizan sólo una vez al día o en un intervalo específico. Si los datos se pierden dentro de un período de tiempo después de que se completa la copia de seguridad, es muy probable que no se puedan recuperar. ¿Existe alguna forma de proteger los datos en tiempo real? De hecho, existen varios métodos que pueden realizar la protección en tiempo real de la base de datos MySQL. Aquí presentamos uno de ellos, que consiste en utilizar registros binarios para la recuperación de datos.

1 Configure el método de registro binario

Para restaurar datos del registro binario, necesita conocer la ruta y el nombre del archivo de registro binario actual. La ruta generalmente se puede encontrar en el archivo de opciones (es decir, my.cnf o my.ini, según su sistema). Si no se incluye en el archivo de opciones, se puede proporcionar como una opción en la línea de comando cuando se inicia el servidor. La opción para habilitar el registro binario es --log-bin. Para determinar el nombre del archivo de registro binario actual, ingrese la siguiente instrucción MySQL:

# SHOW BINLOG EVENTS \G

2 La recuperación de datos más simple

Hacer una copia de seguridad y ejecutar registros binarios todos los días es de hecho una buena manera de recuperar datos en el servidor MySQL. Por ejemplo, puede usar mysqldump para hacer una copia de seguridad de los datos a altas horas de la noche todos los días. Si los datos se pierden por algún motivo algún tiempo después de completar la copia de seguridad, puede usar el siguiente método para restaurarlos. Primero, detenga el servidor MySQL y luego reinícielo usando el siguiente comando. Este comando garantizará que la única persona con acceso al servidor de base de datos sea:

# /etc/init.d/mysqld stop

Deteniendo MySQL: [ OK ]

# mysqld --socket=/tmp/mysql_restore.sock --skip-networking

Aquí, una opción de socket nombrará un archivo Socket diferente para sistemas Unix. Una vez que el servidor esté bajo control exclusivo, podrá operar la base de datos con confianza sin preocuparse por más problemas causados ​​por los usuarios que intentan acceder a la base de datos durante el proceso de recuperación de datos. El primer paso en la recuperación es restaurar el archivo de volcado respaldado por la noche:

#mysql -u root -pmypwd --socket=/tmp/mysql_restore.sock < /var/backup/20080120.sql

Este comando puede restaurar el contenido de la base de datos al contenido de la copia de seguridad que se acaba de completar por la noche. Para restaurar las transacciones de la base de datos después de crear el archivo de volcado, puede utilizar la herramienta mysqlbinlog.

Si el registro se vacía todas las noches durante la operación de copia de seguridad, puede utilizar la siguiente herramienta de línea de comandos para restaurar todo el archivo de registro binario:

mysqlbinlog /var/log/mysql/bin.123456 \

p>

| mysql -u root -pmypwd --socket=/tmp/mysql_restore.sock

3 Recuperación para un momento determinado

Para MySQL 4.1.4 Puede especificar la hora de inicio y finalización en formato DATETIME a través de las opciones --start-date y --stop-date en la declaración mysqlbinlog. Supongamos que la instrucción SQL ejecutada por el usuario a las 10 a. m. del 22 de enero de 2008 eliminó una tabla de datos grande. Puede usar el siguiente comando para restaurarla: Para restaurar la tabla y los datos, puede restaurar la copia de seguridad de la noche anterior y introduzca:

#mysqlbinlog --stop-date="2008-1-22 9:59:59"

/var/log/mysql/bin.123456 |

mysql -u root -pmypwd \

--socket=/tmp/mysql_restore.sock

#mysql -u root -pmypwd

Esto La declaración restaurará todos los datos antes de una fecha de finalización determinada. Si descubre que se produce un error horas después de ejecutar una declaración SQL, es posible que necesite recuperar algunos datos que se ingresaron más tarde. En este momento, esta función también se puede completar a través de mysqlbinlog:

#mysqlbinlog --start-date="2008-1-22 10:01:00" \

/var / log/mysql/bin.123456 \

| mysql -u root -pmypwd \

--socket=/tmp/mysql_restore.sock

#mysql - u root -pmypwd

En esta línea, se ejecutará la declaración SQL del inicio de sesión a las 10:01 a.m. Combinando el archivo de volcado de la noche anterior a la ejecución y dos líneas de mysqlbinlog se pueden restaurar todos los datos un segundo antes de las 10:00 a.m. Debe verificar los registros para asegurarse de que los tiempos sean precisos.

4 Usar posición para recuperación

También puede usar las opciones de mysqlbinlog --start-position y --stop-position para especificar la posición del registro sin especificar la fecha y la hora. Tienen el mismo efecto que las opciones de fecha de inicio y finalización, excepto que proporcionan un número de posición del registro. El uso de ubicaciones de registros es un método de recuperación más preciso, especialmente cuando se producen muchas transacciones simultáneamente debido a declaraciones SQL destructivas. Para determinar el número de posición, puede ejecutar mysqlbinlog para encontrar el rango de tiempo en el que se realizó la transacción inesperada, pero redirigir los resultados a un archivo de texto para su inspección. El comando de operación es:

mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00"< / p>

/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

Este comando creará un pequeño archivo de texto en el directorio /tmp y mostrará la declaración SQL incorrecta ejecutada en ese momento. Puede abrir el archivo con el editor de texto vi o gedit y buscar declaraciones que no desee repetir. Los números de posición en el registro binario deben comentarse si se utilizan para detener y continuar operaciones de recuperación. Utilice log_pos más un número para marcar la posición.

Después de restaurar el archivo de copia de seguridad anterior usando el número de posición, debe ingresar lo siguiente desde la línea de comando:

mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456

| mysql -u root -pmypwd

mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456

| root - pmypwd

La línea 1 anterior reanudará todas las transacciones hasta el punto donde se detuvo. La siguiente línea restaurará todas las transacciones desde la posición inicial dada hasta el final del registro binario. Debido a que la salida de mysqlbinlog incluye la declaración SET TIMESTAMP antes de que se registre cada declaración SQL, los datos recuperados y los registros MySQL relacionados reflejarán el tiempo original de ejecución de la transacción.