A tabela de eliminação do banco de dados Mysql não precisa fugir, a transmissão do espaço de tabela ajuda a recuperar dados

Hoje, vou apresentar a você um banco de dados Mysql que usa a função de transmissão de espaço de tabela do InnoDb para ajudá-lo a restaurar a tabela de negócios da queda.

Restrições de transferência de espaço de tabela Mysql
Para usar a função de transferência de espaço de tabela de banco de dados Mysql, há duas restrições:
1. A versão do banco de dados Mysql deve estar acima de 5.6
2. O banco de dados Mysql deve abrir innodb_file_per_table


A tabela test1 na biblioteca de teste de destino de teste tmp foi eliminada e você precisa usar o registro da tabela test1 na biblioteca testdb para restaurar

A tabela de teste do banco de dados de destino
efetua login no banco de dados e a tabela de negócios tmp.test1 é eliminada.


[root@localhost] 16:14:12 [tmp]>drop table test1;
Query OK, 0 rows affected (0.41 sec)

Crie uma tabela test1 vazia no banco de dados de destino,
exporte a instrução de definição da tabela test1 do banco de dados de origem testdb e visualize os registros da tabela original

[root@localhost] 15:49:45 [testdb]>show create table testdb.test1\G;
*************************** 1. row ***************************
       Table: test1
Create Table: CREATE TABLE `test1` (
  `id` int(11) NOT NULL,
  `name1` char(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `name2` char(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.00 sec)

ERROR:
No query specified

[root@localhost] 15:49:54 [testdb]>select * from testdb.test1;
+----+-------+-------+
| id | name1 | name2 |
+----+-------+-------+
|  1 | test1 | test1 |
|  2 | test  | test  |
+----+-------+-------+
2 rows in set (0.00 sec)

Crie uma tabela vazia tmp.test1 na biblioteca de destino


[root@localhost] 15:50:45 [tmp]>show create table tmp.test1\G;
*************************** 1. row ***************************
       Table: test1
Create Table: CREATE TABLE `test1` (
  `id` int(11) NOT NULL,
  `name1` char(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `name2` char(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.00 sec)

descartar exclui o arquivo ibd da tabela de negócios do banco de dados de destino


ALTER TABLE tmp.test1 DISCARD TABLESPACE;

Copie o arquivo ibd da tabela test1 da biblioteca de origem para a biblioteca de destino


[mysql@mysql tmp]$ cp /data/mysql/data/3306/testdb/test1.ibd /data/mysql/data/3306/tmp/
[mysql@mysql tmp]$ ls -l
total 108
-rw-r-----. 1 mysql mysql  8620 Sep 17 15:50 test1.frm
-rw-r-----. 1 mysql mysql 98304 Sep 17 15:52 test1.ibd

Importe o arquivo ibd
da biblioteca de destino Na biblioteca de destino, importe o arquivo ibd


[root@localhost] 15:51:34 [tmp]>ALTER TABLE tmp.test1 IMPORT TABLESPACE;
Query OK, 0 rows affected, 1 warning (0.02 sec)

[root@localhost] 15:53:11 [tmp]>SHOW WARNINGS;
+---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                                                   |
+---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1810 | InnoDB: IO Read error: (2, No such file or directory) Error opening './tmp/test1.cfg', will attempt to import without schema verification |
+---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

[root@localhost] 15:53:18 [tmp]>select * from tmp.test1;
+----+-------+-------+
| id | name1 | name2 |
+----+-------+-------+
|  1 | test1 | test1 |
|  2 | test  | test  |
+----+-------+-------+
2 rows in set (0.00 sec)

Neste ponto, você pode ver que os dados da tabela de negócios do banco de dados de origem testdb.test1 foram restaurados para a tabela de negócios do banco de dados de destino tmp.test1.

Para resumir
, há uma etapa que é mais importante aqui, que é importar o arquivo ibd. Pense nisso. Ao importar o arquivo idb, o que o Mysql fez? Um total de 3 coisas são feitas
. 1. O ibd importado arquivo será feito em cada página. Uma soma de verificação para ver se há páginas ruins
2. Atualize o ID do espaço de tabela e o número LSN do cabeçalho de cada página
3. Defina a página da página como uma página suja e libere-a no disco

Acho que você gosta

Origin blog.51cto.com/15061930/2642067
Recomendado
Clasificación