Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Entender o que é o MySQL e como ele guarda e consulta dados
- Conhecer o InnoDB, as transações e as faixas de versão LTS e Innovation
- Saber quando o MySQL é a escolha certa e quando não é
Quase todo sistema precisa guardar dados que se relacionam: clientes, pedidos, produtos, pagamentos. Em vez de espalhar isso em arquivos, você usa um banco de dados, que mantém a informação correta mesmo quando várias pessoas escrevem ao mesmo tempo. O MySQL é um dos bancos relacionais mais conhecidos para esse trabalho, presente em hospedagens compartilhadas, por trás de sites WordPress e em muitas APIs.
O que é MySQL?#
MySQL é um sistema de gerenciamento de banco de dados relacional (SGBD) mantido pela Oracle. Relacional quer dizer que os dados ficam em tabelas, com linhas e colunas, e que as tabelas se ligam por chaves. O "SQL" do nome vem de Structured Query Language, a linguagem padrão para consultar bancos de dados.
Segundo a documentação oficial, o MySQL segue o modelo cliente/servidor: um servidor SQL multithread conversa com vários clientes e bibliotecas. É open source sob a licença GPL. Se você não pode usar a GPL, por exemplo ao embutir o MySQL num produto comercial, pode comprar uma licença comercial da Oracle.
Não confunda os termos: SQL é a linguagem, MySQL é um dos programas que a entendem. PostgreSQL e SQL Server também usam SQL.
Como o MySQL funciona?#
O MySQL roda como um servidor. Sua aplicação abre uma conexão (a porta padrão é a 3306), envia comandos SQL e recebe linhas de volta. Quatro ideias explicam a maior parte do comportamento.
Esquema. Cada tabela tem colunas com tipos definidos, e o banco recusa dados que violam as regras. Restrições como NOT NULL, UNIQUE, chave primária e chave estrangeira evitam, por exemplo, um pedido apontando para um cliente que não existe.
Motor InnoDB. O MySQL separa o servidor do mecanismo de armazenamento. O padrão é o InnoDB: uma tabela criada sem a cláusula ENGINE já usa InnoDB. Ele segue o modelo ACID, com commit, rollback e recuperação de falhas, e suporta chaves estrangeiras, bloqueio por linha e MVCC.
Transações. Uma transação agrupa comandos que acontecem juntos ou não acontecem. Se você debita um saldo e credita outro, ou os dois passos valem, ou nenhum.
MVCC. O controle de concorrência multiversão deixa cada consulta enxergar uma versão consistente dos dados, então leitura e escrita atrapalham menos umas às outras.
Exemplo: duas tabelas e uma consulta#
CREATE TABLE customers (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE
);
CREATE TABLE orders (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
customer_id BIGINT NOT NULL,
total DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers (id)
);
INSERT INTO customers (email) VALUES ('ana@example.com');
INSERT INTO orders (customer_id, total) VALUES (1, 49.90);
SELECT c.email, SUM(o.total) AS gasto
FROM customers c
JOIN orders o ON o.customer_id = c.id
GROUP BY c.email;A FOREIGN KEY impede um pedido sem cliente, e o JOIN junta as duas tabelas na consulta. O conjunto de caracteres padrão do servidor é utf8mb4, que cobre acentos e emojis.
Exemplo: usar no Node.js#
Com o driver mysql2 (npm install mysql2), você abre um pool de conexões e passa os valores como parâmetros. Nunca coloque a senha no código: leia de variáveis de ambiente.
import mysql from "mysql2/promise";
const pool = mysql.createPool({
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,
connectionLimit: 10,
});
const [rows] = await pool.execute(
"SELECT id, email FROM customers WHERE email = ?",
["ana@example.com"],
);
console.log(rows);
await pool.end();O ? é um parâmetro: o valor viaja separado do texto SQL, o que evita SQL injection. Nunca monte a consulta concatenando strings.
Para que serve o MySQL?#
- Aplicações web e APIs com usuários, pedidos, permissões e relatórios.
- Sites e lojas virtuais, já que muitos CMS e plataformas de e-commerce usam MySQL como banco padrão.
- Bots que guardam configurações por servidor, economia ou histórico de moderação, sobretudo quando os dados se relacionam.
- Sistemas de cadastro e estoque, em que uma operação pela metade é inaceitável.
Quando não usar MySQL?#
- Cache e contadores atualizados o tempo todo: um armazenamento em memória como o Redis responde mais rápido nesse papel.
- Arquivos grandes: imagens e vídeos ficam melhor em armazenamento de objetos. Guarde no banco só o caminho ou a URL.
- Dados sem estrutura fixa e sem relações: um banco de documentos como o MongoDB pode ser mais direto.
- Consultas analíticas muito complexas ou extensões avançadas: compare com o PostgreSQL.
Para decidir entre as opções, leia qual banco de dados escolher. Se a dúvida é entre os dois relacionais mais comuns, veja PostgreSQL vs MySQL.
Quais versões do MySQL existem?#
O MySQL tem duas trilhas. As séries LTS recebem só as correções necessárias e não removem recursos dentro da série. Pela política Oracle Lifetime Support, cada LTS tem 5 anos de suporte principal mais 3 de suporte estendido. As séries Innovation trazem recursos novos, podem mudar ou remover comportamentos e valem só até a Innovation seguinte.
Uma série que chega ao fim de vida (EOL) não recebe mais atualizações, e a página de fim de vida da Oracle lista as datas de cada uma. Para produção, escolha uma LTS em suporte e atualize de uma LTS para a seguinte, sem pular nenhuma.
Antes de qualquer atualização, tenha uma cópia do banco. O guia de como fazer backup de um banco de dados mostra o passo a passo.
Como fazer isso na Square Cloud#
Na Square Cloud, a hospedagem de MySQL começa no plano Standard; o Hobby não inclui bancos. Você cria o banco no painel, sempre em uma versão recente. Ele fica pronto em segundos e roda no mesmo datacenter das suas aplicações, com latência média de cerca de 1 ms e TLS obrigatório.
Você tira snapshots manuais quando quiser, e todo plano com bancos inclui também um snapshot automático diário. Um snapshot pode ser restaurado no mesmo banco, em outro do mesmo motor ou num banco novo, ou baixado como .zip. Para conectar, guarde o host, a porta e a senha que o painel mostra nas variáveis de ambiente da aplicação (como MYSQL_HOST e MYSQL_PASSWORD, do exemplo em Node.js). Depois aponte o driver para a CA do certificado baixado e reinicie a aplicação.
Veja a hospedagem de MySQL na Square Cloud e, para o passo a passo geral, como hospedar um banco de dados.
Hospedagem de bancos
MongoDB, PostgreSQL, MySQL e Redis no mesmo datacenter do app
Perguntas frequentes
MySQL é gratuito?
O software é open source sob a licença GPL, então você pode baixar, usar e modificar sem pagar licença. A Oracle também vende uma edição comercial para quem não pode usar a GPL. Rodar o servidor ainda custa máquina, memória e armazenamento.
MySQL e SQL são a mesma coisa?
Não. SQL é a linguagem usada para consultar bancos relacionais. MySQL é um programa, o servidor de banco de dados, que entende SQL.
MySQL é SQL ou NoSQL?
É um banco SQL (relacional): os dados ficam em tabelas com esquema definido. Ele também tem o tipo JSON para guardar documentos dentro de uma coluna, mas não substitui um banco de documentos em todos os casos.
Qual versão do MySQL devo usar?
Para produção, use uma série LTS em suporte. Ela só recebe correções e não remove recursos dentro da série. Evite começar um banco novo numa versão que já chegou ao fim de vida (EOL).
Mais em Bancos de dados
Ver todos os 24 artigos- Quanto custa um banco de dados na nuvem?Um banco de dados na nuvem custa de zero a centenas de dólares por mês. Veja o que define o preço: instância, disco, tráfego, snapshots e como estimar o seu.
- Como hospedar um banco de dados (e conectar sua aplicação)Para hospedar um banco de dados, escolha o motor, crie a instância, guarde a string de conexão em variável de ambiente e teste a conexão. Veja o passo a passo.
- O que é Redis e para que serveRedis é um banco de dados em memória que guarda pares chave-valor e estruturas de dados. Veja como funciona, para que serve e quando não usar.
- Como fazer backup do banco de dados (MySQL, PostgreSQL, MongoDB)Faça backup de MySQL, PostgreSQL e MongoDB com mysqldump, pg_dump e mongodump, e restaure o dump. Veja os comandos, como verificar e os erros comuns.