Fala rapaziada, só na boa, na moral, no esquema? espero que sim.
Hoje, mais um artigo sobre o danado do bando de dados do golfinho.
Vou falar sobre a praticidade do TTS, sim TTS no MySQL (Assim como no Oracle, também existe no MySQL).
⚠️ CONTÉM TEXTO MELHORADO POR AI – E TA TUDO BEM (SE SOUBER USAR 🤭)⚠️
Depois de bater cabeça com a bagaceira acima, bora la.
1. Pré-Requisitos
- Verificar e ativar a configuração necessária para o Transportable Tablespace funcionar corretamente.
- Ter um MySQL 🤓
- Ter lido meu artigo anterior sobre TABLESPACES NO MYSQL
Esse parça verifica se o InnoDB está configurado para criar um arquivo .ibd separado para cada tabela, o que é essencial para o TTS.
SHOW VARIABLES LIKE 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
Se precisar ativar:
Ativa o modo file-per-table, permitindo que cada tabela InnoDB tenha seu próprio arquivo de tablespace.
SET GLOBAL innodb_file_per_table=ON;
Query OK, 0 rows affected (0.01 sec)
2. Exemplo do esquema
Na caixa de origem:
Crie um novo banco de BRABOS (kkkk, foi boa vai) para nossos testes:
CREATE DATABASE db_brabo;
Query OK, 1 row affected (0.01 sec)
Selecione o nosso DBzinho recém-criado:
USE db_brabo;
Database changed
Então criamos uma tabela para poder simular que temos dados em nosso ambiente super, mega, master, blaster produtivo:
CREATE TABLE clientes_brabo (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
Query OK, 0 rows affected (0.01 sec)
Vamos adicionar alguns dados de leve:
INSERT INTO clientes_brabo (nome, email) VALUES
('Zé Brabo', 'ze@brabo.com'), -- Essa vai pro Marião
('DBA Master', 'dba@brabo.com');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
3. Processo de Exportação
Passo 1: Preparação para Exportação
Esse carinha é poderoso e tem um papel crucial quando você quer mover ou migrar tabelas no MySQL usando o TTS:
FLUSH TABLES clientes_brabo FOR EXPORT;
Query OK, 0 rows affected (0.00 sec)
O que ele faz?
- Trava a tabela para escrita
- Finaliza todas as transações pendentes
- Cria um arquivo .cfg com os metadados da tabela
Passo 2: Localização dos Arquivos
ls -l /var/lib/mysql/db_brabo/
-rw-r----- 1 mysql mysql 12345 Jun 10 15:30 clientes_brabo.ibd
-rw-r----- 1 mysql mysql 1024 Jun 10 15:30 clientes_brabo.cfg
De quais arquivos estamos falando?
- .ibd (arquivo de dados)
- .cfg (metadados criados pelo FLUSH TABLES)
Passo 3: Cópia de segurança dos arquivos (se vc é DBA vai entender)
Copia os arquivos para um local seguro antes de continuar (Não seja juvenil, inferno):
cp /var/lib/mysql/db_brabo/clientes_brabo.{ibd,cfg} /backup/
Passo 4: Liberação da Tabela
UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
Libera a tabela no servidor de origem após a cópia dos arquivos.
4. Processo de Importação
Passo 1: Preparação do Ambiente de Destino
CREATE DATABASE db_brabo_destino;
USE db_brabo_destino;
Cria e seleciona o banco de dados de destino.
CREATE TABLE clientes_brabo (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
Query OK, 0 rows affected (0.00 sec)
Recria a mesma estrutura da tabela original, sem dados.
Passo 2: Limpeza do Tablespace Existente
Remove a tbs vazio recém-criado para preparar a importação.
ALTER TABLE clientes_brabo DISCARD TABLESPACE;
Query OK, 0 rows affected (0.00 sec)
Passo 3: Transferência dos Arquivos
Copia os arquivos para o diretório do MySQL e ajusta as permissões.
cp /backup/clientes_brabo.{ibd,cfg} /var/lib/mysql/db_brabo_destino/
chown mysql:mysql /var/lib/mysql/db_brabo_destino/clientes_brabo.*
Passo 4: Importação Final
Este comando crucial, se liga:
ALTER TABLE clientes_brabo IMPORT TABLESPACE;
Query OK, 0 rows affected (0.00 sec)
Sabe o motivo? sei que não 🤣, toma:
- Lê o arquivo .cfg para validar a estrutura
- Importa os dados do arquivo .ibd
- Reconstroi os índices
Passo 5: Verificação
Bora então checar os dados:
SELECT * FROM clientes_brabo;
+----+------------+---------------+---------------------+
| id | nome | email | data_cadastro |
+----+------------+---------------+---------------------+
| 1 | Zé Brabo | ze@brabo.com | 2023-06-10 15:30:00 |
| 2 | DBA Master | dba@brabo.com | 2023-06-10 15:30:00 |
+----+------------+---------------+---------------------+
5. Validação final do esquema
Bora validar a integridade da tabela:
CHECK TABLE clientes_brabo;
+-------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------------+-------+----------+----------+
| db_brabo.clientes | check | status | OK |
+-------------------+-------+----------+----------+
Como boas práticas:
- Sempre verifique a compatibilidade de versões entre as caixas/servers/maquinas etc.
- Para tabelas grandes, considere compactar os arquivos durante a transferência
- Mantenha backups dos arquivos .ibd e .cfg até confirmar que tudo ocorreu suave na nave.
Minhas considerações:
Este processo é extremamente útil para:
- Migrações rápidas entre ambientes
- Recuperação de tabelas específicas
- Criação de ambientes de teste com dados reais
Sacou qualé da parada? agora pega teu lab e senta o dedo NELE.
Ficou ruim? Pior que o backup sem binlog? (PQP) 😂
(Brincadeira, tmj! Qualquer coisa, só chamar os BRABO!)