Copia de seguridad completa de MySQL + recuperación de registros binarios


Durante el uso de la base de datos pueden ocurrir los siguientes problemas ¿Cómo solucionarlos?

Todos los preparativos se hicieron a las 10:30 del viernes, pero se produjo un error a las 11 en punto, eliminando todos los datos en la tabla de estudiantes ¿Cómo restaurar rápidamente los datos al estado antes de la eliminación?

En este momento, puede utilizar la copia de seguridad completa de MySQL + el registro binario para restaurar el estado anterior a la eliminación de los datos.
Simulemos esta situación:

Configuración de requisitos previos: activar el registro binario

[root@mysql mysql]# vim /etc/my.cnf
[mysqld]  #在mysqld下配置logbin
...
#log bin  
log_bin
server_id = 1

1. Crea una nueva biblioteca

root@(none) 10:15  mysql>create database sc;
Query OK, 1 row affected (0.00 sec)

Crea una tabla e inserta datos:

root@(none) 10:15  mysql>use sc
Database changed
root@sc 10:16  mysql>create table student(id int primary key, name varchar(20) not null);
Query OK, 0 rows affected (0.01 sec)

root@sc 10:18  mysql>insert  into student values(1,'lisi'),(2,'wangwu'),(3,'zhangsan');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
root@sc 10:19  mysql>select * from student;
+----+----------+
| id | name     |
+----+----------+
|  1 | lisi     |
|  2 | wangwu   |
|  3 | zhangsan |
+----+----------+
3 rows in set (0.00 sec)

2. Copia de seguridad completa de los datos

Utilice mysqldump para preparar todos los datos:

mysqldump -u[nombre de usuario de MySQL] -p[contraseña] [nombre de la base de datos] [nombre de la tabla] > [nombre del archivo de copia de seguridad]

[root@mysql backup]# pwd
/backup
[root@mysql backup]# mysqldump -uroot -p"123456" sc  student > sc_student.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

3. Cambios en los datos de simulación.

root@sc 10:27  mysql>insert  into student values(4,'xiaoming');
Query OK, 1 row affected (0.01 sec)

root@sc 10:28  mysql>update student set name='xiaohong' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
root@sc 10:29  mysql>select * from student;
+----+----------+
| id | name     |
+----+----------+
|  1 | xiaohong |
|  2 | wangwu   |
|  3 | zhangsan |
|  4 | xiaoming |
+----+----------+
4 rows in set (0.00 sec)

4. Errores de operación de simulación

Eliminar todos los datos de la tabla:

root@sc 10:57  mysql>delete from student;
Query OK, 4 rows affected (0.00 sec)

root@sc 10:58  mysql>select * from student;
Empty set (0.00 sec)

5.Recuperación de datos

Restauración de equipo completo:

[root@mysql backup]# mysql -uroot -p'Sanchuang123#' sc  < sc_student.sql
mysql: [Warning] Using a password on the command line interface can be insecure.

Se encontró que solo había datos completos y no datos modificados:

root@sc 10:58  mysql>select * from student;
+----+----------+
| id | name     |
+----+----------+
|  1 | lisi     |
|  2 | wangwu   |
|  3 | zhangsan |
+----+----------+
3 rows in set (0.00 sec)

Recuperación de registros binarios:

Bin-log es una operación que registra todos los eventos de mysql. Bin-log se puede utilizar para realizar una recuperación completa, una recuperación en un momento dado y una recuperación basada en la ubicación.

Ver el registro binario en uso:

root@sc 11:17  mysql>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     3812 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

Encuentre el momento en que se modificaron los datos:

[root@mysql mysql]# mysqlbinlog -vv mysql-bin.000001 

Insertar descripción de la imagen aquí
Recuperar datos:
método de recuperación basado en el tiempo:

[root@mysql mysql]# mysqlbinlog --start-datetime="2023-07-17 10:27:51" --stop-datetime="2023-07-17 10:51:10" mysql-bin.000001 | mysql -u root -p'123456'
mysql: [Warning] Using a password on the command line interface can be insecure.

Según la ubicación:

[root@mysql mysql]# mysqlbinlog  --start-position=1985 --stop-position=2669  mysql-bin.000001 |mysql -uroot -p'123456'

No es necesaria una recuperación completa y se pueden utilizar todos los registros binarios si la cantidad de datos no es particularmente grande.

Enlace de referencia: Resumen de puntos de conocimiento de mysql/mariadb (25): registro binario

Supongo que te gusta

Origin blog.csdn.net/zheng_long_/article/details/131760356
Recomendado
Clasificación