operação de recuperação de dados usando MySQL log binário


Este artigo é baseado no ambiente operacional sob centos7, se necessário, por favor leia esta instalação artigo

MySQL8.0.19 instalar blog: MySQL8.0.19

A, perfil binlog

binlog: log binário é um arquivo de formato binário que registra todas as alterações no banco de dados, e armazenado em forma binária no disco, que pode ser usado para exibir o banco de dados histórico de alterações, banco de dados de backup incremental e recuperação, replicação do MySQL ( do mestre de cópia do banco de dados).

Dois, formato de log binário

1) Demonstração

Cada sql vai modificar os dados registrados no log binário.

Vantagens : a variação de cada linha não é necessário registar, reduzindo a quantidade de log binário de registo, as economias de IO, um melhor desempenho.

Drawback : Uma vez que apenas executar a instrução, estas declarações, a fim de executar corretamente no escravo, cada declaração deve também gravar algumas informações no curso da execução, a fim de garantir que todas as declarações são executadas no mestre e do escravo no final, quando o mesmo registro resultados. Na replicação mysql disso, como função de algumas funções específicas, escravo eo mestre pode ser consistente, haverá muitas questões relacionadas.

Resumo:
de nível de instrução vantagens:
1, para resolver o nível deficiências linha, e não precisa registrar as mudanças em cada linha.
2, ingresse menos, salvando o IO, o bloco de registo de aplicação da biblioteca.
Contras nível de instrução: Pode haver algumas novas funcionalidades obstáculos sincronizados, como funções, gatilhos, e assim por diante.

2) Fila

5.1.5 versão do MySQL suporta replicação começaram a remar nível, ele não grava a instrução SQL contextualmente informações relevantes, que salva apenas os registros modificados.

Vantagens : informações sensíveis ao contexto não podem ser gravados na instrução SQL log binário é executado, só precisa de registro que um registro é modificado em nada. Então log registro rowlevel conteúdo será detalhes muito claras de cada linha de modificações de dados abaixo. E função, bem como problemas de desencadear a chamada e triggers não podem ser replicados procedimento armazenado não aparece corretamente em certas circunstâncias específicas, ou.

Drawback : Todas as declarações executadas quando registrado quando tudo vai modificar cada linha para gravar o registro, isso pode gerar uma grande quantidade de conteúdo de log.

Resumo: As
vantagens do nível de linha:
1, ficha detalhada
2, resolver o modo de cópia de nível de instrução problema não pode ser resolvido.
as desvantagens nível de linha: grandes troncos, como é a linha de divisão.

3) misturadas

Desde o início da versão 5.1.8, MySQL fornece formato misto, de fato, combinado com a Declaração de Row.

No modo misto, a instrução geral modificada utilizando o formato statment para salvar o log binário, tal como algumas funções, indicação pode não ser completado replicação operação mestre-escravo, é formato de linha usados ​​log binário armazenado, MySQL serão tratadas separadamente gravado de acordo com cada instrução específica SQL executado formulário, que é registro, entre a Declaração e selecionar uma linha.

Terceiro, configurar e vista formato de log binário

1) modificar e configurar formato de arquivo de log do MySQL log binário

# 使用命令
[root@ chenc01 ~]# vim /etc/my.cnf
# 打开配置文件,并在[mysqld]下面增加以下内容
log-bin = mysql-bin
binlog_format="ROW"

Reinicie o banco de dados, ele irá gerar um novo /var/lib/mysql/mysql-bin.000001 arquivo, se antes do mysql-bin.000001 excluído, o arquivo vai aumentar na base de índice atual.

# 使用命令重启数据库
[root@ chenc01 ~]# service mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
# 使用命令 ls /var/lib/mysql  查看binlog文件
[root@ chenc01 ~]# ls /var/lib/mysql
ibdata1      ib_logfile1  mysql-bin.000001  mysql.sock
ib_logfile0  mysql        mysql-bin.index   test

2) O formato de exibição binlog

mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> 

Em quarto lugar, criar um banco de dados e backup de dados

1) Criar um banco de dados

mysql> create database demo;
Query OK, 1 row affected (0.11 sec)

mysql> use demo;
Database changed
mysql> create table user (
    -> id int(10) not null auto_increment,
    -> name varchar(32) not null,
    -> type int(10) not null,
    -> primary key(id)
    -> ) ENGINE=innoDB;
Query OK, 0 rows affected (0.05 sec)

mysql> 

2) criou, arquivo de log binário de atualização

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

mysql> 

3) Faça backup do banco de dados

使用命令 mysqldump -u root -p demo user > db_demo_bak.sql
或者 mysqldump -u root -p --databases demo > db_demo_bak.sql
[root@ chenc01 ~]# mysqldump -u root -p demo user > db_demo_bak.sql
Enter password: 

Em quinto lugar, usar o backup e restaurar o banco de dados usando binlog para reversão completa

1) inserida na base de dados e a base de dados

mysql> use demo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> insert into user(id,name,type) value (10001,"A",1);
Query OK, 1 row affected (0.00 sec)

mysql> insert into user(id,name,type) value (10002,"B",1);
Query OK, 1 row affected (0.00 sec)

mysql> 

2) Os dados de exibição

mysql> select * from user;
+-------+------+------+
| id    | name | type |
+-------+------+------+
| 10001 | A    |    1 |
| 10002 | B    |    1 |
+-------+------+------+
2 rows in set (0.00 sec)

mysql> 

3) atualizar o banco de dados para modificar, simular a operação falhou

mysql> update user set name="C";
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from user;
+-------+------+------+
| id    | name | type |
+-------+------+------+
| 10001 | C    |    1 |
| 10002 | C    |    1 |
+-------+------+------+
2 rows in set (0.00 sec)

mysql> 
# user表的name字段被误操作修改,抓紧刷新掉binlog文件
mysql> flush logs;
Query OK, 0 rows affected (0.10 sec)

mysql> 

4) olhada no arquivo de log binário mysql

[root@ chenc01 ~]# ls /var/lib/mysql
demo         ib_logfile1       mysql-bin.000002  mysql.sock
ibdata1      mysql             mysql-bin.000003  test
ib_logfile0  mysql-bin.000001  mysql-bin.index

5) excluir a tabela, use um backup e recuperação de dados

mysql> use demo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> drop table user;
Query OK, 0 rows affected (0.01 sec)

mysql> source /root/db_demo_bak.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
....................................
mysql> select * from user;
Empty set (0.00 sec)

mysql> 
# 此时数据库表就备份好了,但是没有数据。
mysql> show binlog events in"mysql-bin.000002";
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                  |
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| mysql-bin.000002 |   4 | Format_desc |         1 |         106 | Server ver: 5.1.73-log, Binlog ver: 4 |
| mysql-bin.000002 | 106 | Query       |         1 |         174 | BEGIN                                 |
| mysql-bin.000002 | 174 | Table_map   |         1 |         221 | table_id: 15 (demo.user)              |

[root@ chenc01 ~]# mysqlbinlog --start-position=4 --stop-position=1037 --database=demo /var/lib/mysql/mysql-bin.000004 | /var/lib/mysql -u root -p TestBicon@123 -v demo
# 然后我们来检查一下user表
mysql> select * from user;
+-------+------+------+
| id    | name | type |
+-------+------+------+
| 10001 | A    |    1 |
| 10002 | B    |    1 |
+-------+------+------+
2 rows in set (0.00 sec)
Publicado 60 artigos originais · ganhou elogios 58 · vê 10000 +

Acho que você gosta

Origin blog.csdn.net/chen_jimo_c/article/details/104906452
Recomendado
Clasificación