01
Fundamentos & Arquitetura MySQL
mysqld · Client · Databases · Schemas · Storage Engines · InnoDB
Básico
Conceitos Essenciais
| Item | Descrição |
|---|---|
| mysqld | Processo servidor MySQL responsável por conexões, SQL, cache, storage engines e transações. |
| mysql client | Cliente de linha de comando usado para conectar e administrar o servidor. |
| Database/Schema | No MySQL, database e schema são usados praticamente como sinônimos. |
| Storage Engine | Camada responsável pelo armazenamento físico e comportamento transacional. |
| InnoDB | Engine padrão moderna: ACID, MVCC, row-level locking, foreign keys e crash recovery. |
| Data Dictionary | Metadados armazenados no próprio servidor a partir do MySQL 8.0. |
Arquivos e Diretórios
| Item | Descrição |
|---|---|
| datadir | Diretório físico dos dados, por exemplo /var/lib/mysql. |
| my.cnf | Arquivo principal de configuração do MySQL. |
| error log | Log de inicialização, falhas, warnings e mensagens críticas. |
| binary log | Registra eventos de mudanças; usado em replication e point-in-time recovery. |
| redo log | Log transacional do InnoDB para crash recovery. |
| undo log | Usado por rollback, MVCC e leituras consistentes. |
Comandos rápidos
$ mysql -uroot -p
mysql> status;
mysql> select @@version, @@hostname, @@port;
mysql> show databases;
mysql> show engines;
mysql> show variables like 'datadir';
Views e Schemas do Sistema
| Item | Descrição |
|---|---|
| information_schema | Metadados SQL padrão: tabelas, colunas, constraints e estatísticas. |
| performance_schema | Instrumentação de waits, statements, locks, I/O e memória. |
| sys | Views amigáveis sobre o Performance Schema para troubleshooting. |
| mysql | Usuários, privilégios, roles, plugins e tabelas internas. |
02
Instalação & Configuração
Linux · Repositórios · systemd · my.cnf · Inicialização segura
Básico
Instalação Linux
# dnf install mysql-community-server
# systemctl enable --now mysqld
# systemctl status mysqld
# grep 'temporary password' /var/log/mysqld.log
# mysql_secure_installation
Parâmetros importantes
| Parâmetro | Uso |
|---|---|
| innodb_buffer_pool_size | Principal cache do InnoDB; normalmente o maior consumidor de memória. |
| max_connections | Quantidade máxima de conexões simultâneas. |
| log_bin | Habilita binary log para replication e PITR. |
| server_id | Identificador único em ambientes replicados. |
| slow_query_log | Habilita log de queries lentas. |
| long_query_time | Threshold para slow query log. |
Exemplo my.cnf
[mysqld]
server_id=10
datadir=/var/lib/mysql
port=3306
default_authentication_plugin=caching_sha2_password
innodb_buffer_pool_size=4G
innodb_redo_log_capacity=2G
log_bin=mysql-bin
binlog_expire_logs_seconds=604800
slow_query_log=ON
long_query_time=1
Validação
$ mysqladmin -uroot -p ping
$ mysql -uroot -p -e "select @@version, @@datadir"
$ ss -lntp | grep 3306
$ journalctl -u mysqld -n 100 --no-pager
03
MySQL Client & Administração Básica
Conexão · Usuários · Grants · Schemas · Processlist
Básico
Comandos do mysql
| Comando | Descrição |
|---|---|
| status; | Mostra conexão, versão, charset, uptime e SSL. |
| show databases; | Lista databases/schemas. |
| use appdb; | Seleciona database. |
| show tables; | Lista tabelas do database atual. |
| desc tabela; | Descreve colunas de uma tabela. |
| show processlist; | Mostra sessões e comandos em execução. |
| show grants; | Mostra privilégios do usuário atual. |
Usuários e privilégios
mysql> create database appdb;
mysql> create user 'app'@'%' identified by 'Senha#2026';
mysql> grant select, insert, update, delete on appdb.* to 'app'@'%';
mysql> show grants for 'app'@'%';
mysql> alter user 'app'@'%' identified by 'NovaSenha#2026';
Sessões
mysql> show full processlist;
mysql> select * from information_schema.processlist order by time desc;
mysql> kill 12345;
mysql> show global status like 'Threads_connected';
Metadados úteis
mysql> select table_schema, table_name, engine from information_schema.tables where table_schema='appdb';
mysql> select table_schema, round(sum(data_length+index_length)/1024/1024,2) mb from information_schema.tables group by table_schema;
mysql> select user, host, account_locked from mysql.user;
04
InnoDB Storage Engine
Buffer Pool · Redo · Undo · MVCC · Locks · Tablespaces
Intermediário
Componentes InnoDB
| Item | Descrição |
|---|---|
| Buffer Pool | Cache de páginas de dados e índices. |
| Redo Log | Garante durabilidade e crash recovery. |
| Undo Log | Permite rollback e MVCC. |
| Doublewrite Buffer | Proteção contra partial page writes. |
| Change Buffer | Otimiza mudanças em índices secundários. |
| Adaptive Hash Index | Otimização de lookup para workloads específicos. |
Monitorar InnoDB
mysql> show engine innodb status\G
mysql> show variables like 'innodb_buffer_pool_size';
mysql> show global status like 'Innodb_buffer_pool%';
mysql> select * from sys.innodb_lock_waits\G
Tablespaces
- file-per-table — um arquivo
.ibdpor tabela quando habilitado. - system tablespace — arquivo
ibdata1para estruturas internas e, em versões antigas, dados. - undo tablespace — armazena undo fora do system tablespace em versões modernas.
- temporary tablespace — usado para objetos temporários InnoDB.
Locks
| Lock | Descrição |
|---|---|
| Record lock | Bloqueio de registro de índice. |
| Gap lock | Bloqueio de intervalo entre registros. |
| Next-key lock | Record + gap lock, comum em REPEATABLE READ. |
| Metadata lock | Bloqueio de DDL/estrutura de objetos. |
| Deadlock | Ciclo de dependência entre transações; InnoDB escolhe uma vítima. |
05
Backup & Restore
mysqldump · MySQL Shell · MyDumper · XtraBackup · PITR
Intermediário
Estratégias
| Ferramenta | Uso |
|---|---|
| mysqldump | Backup lógico simples, portátil, bom para bancos menores. |
| mysqlpump | Dump lógico com paralelismo em versões compatíveis. |
| MySQL Shell Dump | Dump/load moderno e paralelo com util.dumpInstance/util.loadDump. |
| MyDumper | Backup lógico paralelo muito usado em ambientes grandes. |
| XtraBackup | Backup físico online para InnoDB. |
| Binary Logs | Base para point-in-time recovery. |
mysqldump
$ mysqldump -uroot -p --single-transaction --routines --triggers --events appdb > appdb.sql
$ mysqldump -uroot -p --all-databases --single-transaction --master-data=2 > full.sql
$ mysql -uroot -p appdb < appdb.sql
MySQL Shell
$ mysqlsh root@localhost:3306
JS> util.dumpInstance("/backup/full", {threads: 8})
JS> util.dumpSchemas(["appdb"], "/backup/appdb", {threads: 8})
JS> util.loadDump("/backup/appdb", {threads: 8})
PITR com binlog
$ mysqlbinlog --start-datetime="2026-06-12 10:00:00" --stop-datetime="2026-06-12 11:00:00" mysql-bin.000123 > pitr.sql
$ mysql -uroot -p < pitr.sql
06
Performance Tuning
EXPLAIN · Slow Query · Performance Schema · Índices · Observabilidade
Intermediário
Fluxo de análise
| Etapa | Ação |
|---|---|
| 1. Sintoma | CPU, I/O, lock, query lenta ou saturação de conexões. |
| 2. Evidência | Slow log, Performance Schema, sys schema e métricas de host. |
| 3. Plano | EXPLAIN, EXPLAIN ANALYZE, cardinalidade e índices. |
| 4. Correção | Índice, rewrite, particionamento, parâmetro ou arquitetura. |
| 5. Validação | Comparar tempo, rows examined, locks, I/O e CPU antes/depois. |
SQL Tuning
mysql> explain select * from pedidos where cliente_id=10;
mysql> explain analyze select * from pedidos where cliente_id=10;
mysql> show index from pedidos;
mysql> analyze table pedidos;
Slow Query Log
mysql> set global slow_query_log=ON;
mysql> set global long_query_time=1;
mysql> show variables like 'slow_query_log%';
$ mysqldumpslow -s t -t 20 /var/lib/mysql/*slow*.log
sys schema
mysql> select * from sys.statement_analysis limit 10;
mysql> select * from sys.schema_table_statistics order by total_latency desc limit 10;
mysql> select * from sys.user_summary_by_statement_latency;
07
Segurança
Usuários · Roles · TLS · Password Policy · Auditoria
Intermediário
Boas práticas
- Menor privilégio — conceder apenas o necessário por schema/tabela.
- Não usar root em aplicação — criar usuários específicos por serviço.
- TLS — exigir conexão criptografada em rede não confiável.
- Rotação de senhas — controlar validade e política de senha.
- Auditoria — usar logs/plugins conforme edição e necessidade regulatória.
Roles e grants
mysql> create role app_readonly;
mysql> grant select on appdb.* to app_readonly;
mysql> grant app_readonly to 'app'@'%';
mysql> set default role app_readonly to 'app'@'%';
TLS
mysql> show variables like '%ssl%';
mysql> alter user 'app'@'%' require ssl;
mysql> status;
Auditoria básica
mysql> show variables like 'general_log';
mysql> set global general_log=ON;
mysql> select user, host from mysql.user;
Em produção, general_log pode gerar alto volume. Use com critério.
08
Replication
Source/Replica · GTID · Binlog · Relay Log · Lag
Avançado
Conceitos
| Item | Descrição |
|---|---|
| Source | Servidor origem que grava binary logs. |
| Replica | Servidor que recebe e aplica eventos. |
| GTID | Identificador global de transação; simplifica failover e reconfiguração. |
| Binary Log | Eventos gerados no source. |
| Relay Log | Eventos recebidos pela replica antes da aplicação. |
| Replica Lag | Atraso entre source e replica. |
Comandos
mysql> show binary logs;
mysql> show master status;
mysql> show replica status\G
mysql> start replica;
mysql> stop replica;
GTID
mysql> show variables like 'gtid_mode';
mysql> show variables like 'enforce_gtid_consistency';
mysql> select @@global.gtid_executed;
Lag
mysql> show replica status\G
Seconds_Behind_Source: 0
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
09
Group Replication & InnoDB Cluster
HA · MySQL Shell · MySQL Router · Failover
Avançado
Componentes
| Item | Descrição |
|---|---|
| Group Replication | Replicação em grupo com coordenação e tolerância a falhas. |
| InnoDB Cluster | Solução HA usando Group Replication, MySQL Shell e Router. |
| MySQL Shell | AdminAPI para criar e administrar cluster. |
| MySQL Router | Roteia aplicação para primary/replicas. |
| Single-primary | Modo comum com um writer e múltiplos readers. |
AdminAPI
$ mysqlsh root@mysql01:3306
JS> dba.checkInstanceConfiguration('root@mysql01:3306')
JS> cluster = dba.createCluster('cluster01')
JS> cluster.addInstance('root@mysql02:3306')
JS> cluster.status()
Router
$ mysqlrouter --bootstrap root@mysql01:3306 --user=mysqlrouter
$ systemctl enable --now mysqlrouter
$ mysql -uapp -p -h router01 -P 6446
Checklist HA
- Validar DNS/hosts entre nós.
- Sincronizar horário com NTP/chrony.
- Garantir usuários administrativos e recovery user.
- Testar failover planejado e não planejado.
- Monitorar quorum, latência e estado dos membros.
10
Upgrade & Versionamento
5.7 → 8.0 → 8.4 LTS → 9.x · Compatibilidade · Deprecações
Avançado
Trilha recomendada
- MySQL 5.7 — versão legada, comum em ambientes antigos.
- MySQL 8.0 — série bugfix antes do modelo LTS/Innovation.
- MySQL 8.4 LTS — linha LTS moderna para produção estável.
- MySQL 9.x — linha Innovation/LTS atual conforme disponibilidade.
Para upgrades antigos, valide caminho, compatibilidade, reserved words, authentication plugin e mudanças de data dictionary.
Pré-checks
mysql> select @@version;
mysql> show variables like 'sql_mode';
mysql> show variables like 'default_authentication_plugin';
$ mysqlsh -- util checkForServerUpgrade root@localhost:3306
Checklist
- Backup full validado antes do upgrade.
- Teste em homologação com cópia realista.
- Validar aplicação, drivers e conectores.
- Revisar plugins, charset/collation e autenticação.
- Planejar rollback e janela de manutenção.
Pós-upgrade
$ systemctl restart mysqld
mysql> select @@version;
mysql> check table appdb.pedidos;
mysql> analyze table appdb.pedidos;
11
Troubleshooting DBA
Locks · Deadlocks · Conexões · I/O · Replication Lag · Logs
Expert
Primeiros comandos
$ systemctl status mysqld
$ tail -100 /var/log/mysqld.log
mysql> show full processlist;
mysql> show engine innodb status\G
mysql> show global status like 'Threads%';
Problemas comuns
| Sintoma | Onde olhar |
|---|---|
| Conexões esgotadas | max_connections, Threads_connected, application pool. |
| Deadlock | show engine innodb status\G e logs da aplicação. |
| Replication lag | show replica status\G, I/O, queries longas e rede. |
| Disco cheio | datadir, binlogs, temp, backups e logs. |
| CPU alta | Top SQL, EXPLAIN ANALYZE, índices e plano. |
| I/O alto | Buffer pool hit ratio, flush, redo, scans e disco. |
Locks
mysql> select * from performance_schema.data_locks\G
mysql> select * from performance_schema.data_lock_waits\G
mysql> select * from sys.innodb_lock_waits\G
Espaço
$ df -h
$ du -sh /var/lib/mysql/* | sort -h
mysql> select table_schema, round(sum(data_length+index_length)/1024/1024/1024,2) gb from information_schema.tables group by table_schema order by gb desc;
12
Cloud & MySQL HeatWave
OCI · HeatWave · DB Systems · Backup · Monitoring · Migration
Expert
Cloud DBA
| Item | Descrição |
|---|---|
| MySQL HeatWave | Serviço gerenciado MySQL com aceleração analítica HeatWave. |
| DB System | Instância gerenciada com compute, storage, backups e rede. |
| Backup automático | Retenção e restore gerenciados pela plataforma. |
| Monitoring | Métricas de CPU, memória, conexões, storage e queries. |
| HA | Arquiteturas gerenciadas com alta disponibilidade conforme serviço. |
Migração
- Inventariar versão, tamanho, engines, usuários e rotinas.
- Validar compatibilidade 5.7/8.0/8.4.
- Escolher método: dump lógico, replication, MySQL Shell ou ferramenta cloud.
- Planejar cutover, rollback e janela.
- Executar validação de dados, performance e aplicação.
Comandos úteis
mysql> select @@version, @@hostname;
mysql> show variables like 'innodb_buffer_pool_size';
mysql> show global status like 'Threads_connected';
mysql> show global status like 'Queries';
Checklist profissional
- Backups e restore testados.
- Alertas para storage, conexões, replication e slow queries.
- Usuários com menor privilégio.
- Plano de upgrade e patching.
- Runbook de incidentes e continuidade.
⚡
Mini Lab Interativo — MySQL DBA Simulator
Digite comandos MySQL simulados · Use help para listar opções · Clique nos comandos para testar
Lab
Aulas rápidas do Lab
- Aula 1: Validar versão, status e databases.
- Aula 2: Ver engines, variáveis e status global.
- Aula 3: Analisar sessões com processlist.
- Aula 4: Ver InnoDB, locks e buffer pool.
- Aula 5: Simular backup, restore e binlogs.
- Aula 6: Checar replication e lag.
MAPA VISUAL MYSQL DATABASE
MySQL
"Performance não é mágica; é observabilidade, método e consistência."
🙂
┌───────────────┐
│ mysql> SQL_ │
└───────────────┘
⌨️
Terminal MySQL Simulator
Dica: digite
help para ver os comandos suportados. Cada execução limpa o resultado anterior.Digite help ou clique em um comando acima para começar.