Copia de seguridad y restauración de la base de datos MySQL

copia de seguridad y restauración de mysql

  • 1. Respaldo y recuperación en frío físicos

1. Prepare la base de datos y los datos

mysql> create database t325;

mysql> use t325

mysql> create table biao1 (id int,name char(10));

mysql> insert into biao1 values (1,'zhang1');

mysql> insert into biao1 values (2,'zhang2');

mysql> select * from biao1;

mysql> exit

2. Base de datos de respaldo en frío

[root@localhost ~]# cd /

[root@localhost /]# mkdir backup

[root@localhost /]# /etc/init.d/mysqld stop

[root@localhost /]# tar -zcf /backup/t325_all-$(date +%F).tar.gz /usr/local/mysql/data/

[root@localhost ~]# ll /backup/
总用量 736
-rw-r--r--. 1 root root 752674 1124 14:47 t325_all-2020-11-24.tar.gz

Análisis:

La hora del sistema Linux en el shell puede llamar directamente a variables del sistema como: Get Today periodos: date +%Y%m%do date +%Fo $ (fecha +% y% m % d)

[root @ localhost ~] # tar -zcvf /backup/t325-(date+%F).tar.gz / usr / local / mysql / data # Como puede ver desde aquí, (en el script bash. $ de una variable Start.)
Bash: Error de sintaxis inesperado cerca del símbolo `('

[root @ localhost ~] # date +%F
bash: 2020-11-25: Comando no encontrado ...

3. Restaurar los datos de la copia de seguridad en frío

[root@localhost /]# /etc/init.d/mysqld stop(关闭情况下可省略这一步)

[root@localhost /]# mkdir bak                                #创建用于恢复的目录

[root@localhost /]# mv /usr/local/mysql/data/   /bak/        #将存放数据库的“主配置文件”移动到bak目录下,模拟故障!!!    …mysql目录下不只有data目录

[root@localhost /]# /etc/init.d/mysqld start
报错,数据库出错
[root@localhost /]# mysql -u root -p123.com
无法登陆

[root@localhost ~]# tar -zxvf /backup/t325_all-2020-11-24.tar.gz -C /tmp/    #不能直接解压到“/usr/local/mysql目录”,因为它打包的是“/usr/local/mysql/data”目录
[root@localhost tmp]# mv /tmp/usr/local/mysql/data/ /usr/local/mysql/

[root@localhost /]# /etc/init.d/mysqld start
启动正常{
    
    Starting MySQL.. SUCCESS! }
  • Dos, copia de seguridad y recuperación de mysqldump

1. mysqldump realiza una copia de seguridad de las tablas en la base de datos

mysqldump -u nombre de usuario -p contraseña nombre de la biblioteca nombre de la tabla> guardar ruta / nombre de archivo.sql # Exportar las tablas en la biblioteca especificada como scripts SQL (por lo que .sql no se puede cambiar)

[root@localhost /]# mysqldump -u root -p123.com t325 biao1 > /bak/t325-biao1.sql  {其实不加dump也行}
但不加dump的后果:
[root@localhost ~]# mysql -u root -p123.com t325 </bak/t325db.sql
Warning: Using a password on the command line interface can be insecure.
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near 'mysql  Ver 14.14 Distrib 5.6.36, for Linux (x86_64) using 
EditLine wrapper
Copy' at line 1

2. Base de datos de respaldo {debe agregar volcado}

[root@localhost /]# mysqldump -u root -p123.com --databases t325 > /bak/t325db.sql

3. Realice una copia de seguridad de todas las bases de datos

[root@localhost /]# mysqldump -u root -p123.com --all-databases > /bak/all-db.sql

4. Ver el contenido del archivo de respaldo

[root@localhost /]# grep -v "^--" /bak/abcdb.sql | grep -v "^/" |grep -v "^$"         {
    
    --:解释说明;   /:查找说明;      ^$:空行}

5. Restaurar la copia de seguridad

[1] Simular para modificar los datos de la tabla:
mysql> update biao1 set name = 'zhang3' donde id = 2;
dos métodos para restaurar:

1.[root@localhost /]# mysql -u root -p123.com  t325< /bak/t325db.sql
2.[root@localhost ~]# mysql -u root -p123.com t325 </bak/t325-biao1.sql
如果你不加t325:
将会[root@localhost ~]# mysql -u root -p123.com </bak/t325-biao1.sql
Warning: Using a password on the command line interface can be insecure.
ERROR 1046 (3D000) at line 22: No database selected

[root@localhost /]# mysql -u root -p123.com -e 'show tables from t325'          //只能看到表t325,而无法看到其中数据!
[root@localhost ~]# mysql -u root -p123.com -e 'update t325.biao1 set name='zhang3' where id=2;'            //不能在命令行中修改表中数据

[2] Simule para eliminar la base de datos y luego restaure:

mysql> drop database t325;
Query OK, 1 row affected (0.09 sec)
[root@localhost /]# mysql -u root -p123.com  t325< /bak/t325db.sql                // 他会报错
[root@localhost /]# mysql -u root -p123.com  < /bak/t325db.sql                    //正确写法!!!

[root@localhost /]# mysql -u root -p123.com -e 'show databases; '                //查看MySQL数据库中有那些数据库~
  • 3. Caso de copia de seguridad / restauración incremental

La copia de seguridad incremental se implementa mediante un registro binario mysqlbinlog Una vez que se abre el registro, la declaración de cada usuario, excepto la selección, se registrará en el registro.

1. Configure el archivo de configuración de mysql my.cnf, active la función de registro binlog ~ y establezca la ruta / nombre del archivo de registro

[root @ localhost ~] # vim /etc/my.cnf o vim /usr/local/mysql/my.cnf
agregar:

log-bin=/usr/local/mysql/mysql-bin                         //指定日志文件存储位置+名字!!
解析:“log-bin=”后的字符串为日志记载目录,一般建议放在不同于MySQL数据目录的磁盘上

[root@localhost ~]# /etc/init.d/mysqld stop
[root@localhost ~]# /etc/init.d/mysqld start               //必须重启服务,否则找不到日志文件存放目录!!!
以上两步可以和为一步:
[root@localhost mysql]# systemctl restart mysqld

[root @ localhost ~] # ll / usr / local / mysql / // Verifique si el archivo de registro es efectivo

Mi computadora no puede reiniciarse después de los pasos anteriores: a
mi manera

log-bin=qw                                                //它这个保存的名字随便,但是他会在data下显示日志文件~    {
    
    还有就是 只添加log_bin也行,但是默认名称为主机名}
[root@localhost ~]# ll /usr/local/mysql/data/             {
    
    里面一开始看不到qwer相关的文件!!!}
重启完之后发现
[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# ll /usr/local/mysql/data/             #发现多出来这两个文件
-rw-rw----. 1 mysql mysql      120 11月 24 19:50 qwer.000001                  #注意:这里的000001是准备开始记录接下来的“操作”,直到第二次“刷新”或“重启服务”才会截止
-rw-rw----. 1 mysql mysql       14 11月 24 19:50 qwer.index

2. Cree una base de datos, cree una tabla, agregue datos

[root @ localhost ~] # mysql -u root -p123.com

mysql> create database abc;
mysql> use abc;
mysql> create table user_info (id char(20),name char(20),sex char(4),user_id char(10),xiaofei int);

mysql> insert into user_info values ('a001','zhang1','M','0001',120),('a002','zhang2','W','0002',100),
('a003','zhang3','M','0003',90),
('a004','zhang4','W','0004',160),
('a005','zhang5','M','0005',30),
('a006','zhang6','W','0006',80);

mysql> select * from user_info;

3.Haga primero una copia de seguridad completa

[root@localhost ~]# mkdir /bak
[root@localhost ~]# mysqldump -u root -p123.com abc user_info > /bak/abc_user_inf-$(date +%F).sql       
                                                                    -$(date +%F):会显示当前的时间
[root@localhost ~]# ll /bak
生成新的二进制文件
[root@localhost ~]# mysqladmin -uroot -p123.com flush-logs              
//为了让日志文件同步(即到此qwer.000001结束,但是你查看存放目录时会发现有000002文件{
    
    它是记录接下来的操作}

4. Agregar nuevos datos

[root @ localhost ~] # mysql -u root -p123.com

mysql> use abc;

mysql>  insert into user_info values ('a007','zhang7','M','0007',120),('a008','zhang8','W','0008',100);

[root@localhost ~]# mysqladmin -uroot -p123.com flush-logs                   //为了让日志文件同步{即新添加的数据保存到>>qwer.000002日志文件中了}

o

mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

[root @ localhost ~] # ll / usr / local / mysql /

5. Copie el archivo de registro
[root @ localhost ~] # cp /usr/local/mysql/mysql-bin.000002 / bak # Copie el archivo de registro de origen en / bak, para una recuperación más fácil. ! !

Eliminar tabla

[root@localhost ~]# mysql -u root -p123.com -e "drop table abc.user_info"

Ver efecto

[root@localhost ~]# mysql -u root -p123.com -e "show tables from abc"

6. Restaurar las tablas y los datos en la base de datos.

Realice una recuperación completa:

[root@localhost ~]# mysql -u root -p123.com abc < /bak/abc_user_inf-2018-05-04.sql 

[root@localhost ~]# mysql -u root -p123.com -e "show tables from abc"                //查看abc库中有哪些表

[root@localhost ~]# mysql -u root -p123.com -e "select * from abc.user_info"        //查看abc库里面的user_info表中的数据

Datos agregados después de faltar

[root @ localhost ~] # mysqlbinlog --no-defaults /bak/mysql-bin.000002 | mysql -u root -p123.com // "Restaurar" el archivo de registro 000002 en la base de datos

[root @ localhost ~] # mysql -u root -p123.com -e "select * from abc.user_info" ¡
la recuperación de datos es exitosa! ! !

Ver información del archivo de registro:
[root @ localhost ~] # mysqlbinlog --no-defaults /bak/mysql-bin.000002 Busque la palabra clave at, seguida de id

  • Restauración basada en la ubicación {Posición: ubicación}

Formato de recuperación:
mysqlbinlog --no-defaults --start / end-position = 'Número de identificación seguido de at' / ruta del archivo de respaldo / nombre del archivo de respaldo | mysql -uroot -p contraseña
[1] desde la ubicación especificada en el registro Inicio recuperación:

[root@localhost ~]# mysqlbinlog --no-defaults --start-position='1906' /bak/mysql-bin.000003 | mysql -uroot -p123.com
--start-position:起始恢复id 

[2] Recuperarse de "una posición final" en el contenido del archivo de registro especificado

[root@localhost ~]# mysqlbinlog --no-defaults --stop-position='1906' /bak/mysql-bin.000003 | mysql -uroot -p123.com
解析:
--stop-position:结束id
BEGIN
结束id必须是这里面的最后一个at任务所位于的那个id,才能体现出效果
下一个BEGIN

[3] Datos entre dos posiciones en el registro de recuperación:

[root@localhost ~]# mysqlbinlog --no-defaults --start-position='1906' --stop-position='2315' /bak/mysql-bin.000003 | mysql -uroot -p123.com
这里的ID则不需要最后一个!

  • Restaurar según un momento determinado {datetime: date time}

Formato de recuperación:
mysqlbinlog --no-defaults --start / end-datetime = 'at the time' / ruta del archivo de respaldo / nombre del archivo de respaldo | mysql -uroot -p contraseña

【1】 Restaurar los datos después de la hora de inicio especificada:

root @ localhost ~] # mysqlbinlog --no-defaults --start-datetime = '2018-5-4 17:27:00' /bak/mysql-bin.000003 | mysql -uroot -p123.com

[2] Restaurar los datos antes de la hora especificada:

[root @ localhost ~] # mysqlbinlog --no-defaults --stop-datetime = '2018-5-4 17:27:00' /bak/mysql-bin.000003 | mysql -uroot -p123.com

解析:
--stop-datetime:结束时间
BEGIN
结束时间必须是这里面的最后一个at任务所位于的那个时间点,才可以生效
下一个BEGIN

【3】 Restaurar los datos en el rango de tiempo especificado:

[root @ localhost ~] # mysqlbinlog --no-defaults --start-datetime = '2018-5-4 17:27:00' --stop-datetime = '2018-5-5 17:27:00' / bak / mysql-bin.000003 | mysql -uroot -p123.com

Se puede ver desde aquí: el
punto de tiempo no se puede basar en el número de la tarea at [de lo contrario, el tiempo será el mismo], sino en la última fecha y hora entre el inicio y el siguiente inicio

[4] Restaurar los datos de la hora especificada a la ubicación especificada:

[root @ localhost ~] # mysqlbinlog --no-defaults --start-datetime = '2018-5-4 17:27:00' --stop-position = '2315' /bak/mysql-bin.000003 | mysql -uroot -p123.com

La posición final se especifica como el número de identificación del último en la tarea [entre begin ~ next BEGIN]

para resumir:

1.只要是结束位置,必须是【BEGIN~下一个BEGIN之间的】最后一个“时间”或“at任务”的编号!!!
2.数据库基于***的恢复,其实它不是恢复!而是将“你所指定的那个范围内的命令语句”再次执行一下!!!
3.当你把表删除后,自然就不能恢复“表中的数据”了!!!

Tu aliento es mi motivación para la mejora continua (# ^ . ^ #)

Inserte la descripción de la imagen aquí

Construye un entorno LAMP

Supongo que te gusta

Origin blog.csdn.net/qq_50573146/article/details/110149251
Recomendado
Clasificación