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