Diretório do artigo
- A, perfil binlog
- Dois, formato de log binário
- Terceiro, configurar e vista formato de log binário
- 1) modificar e configurar formato de arquivo de log do MySQL log binário
- 2) O formato de exibição binlog
- Em quarto lugar, criar um banco de dados e backup de dados
- Em quinto lugar, usar o backup e restaurar o banco de dados usando binlog para reversão completa
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)