Instalação e Configuração MySQL
Aula 1 de 6
MySQL
MySQL é o banco relacional open source mais popular. Propriedade da Oracle. Padrão em aplicações web.
# Instalação Ubuntu
sudo apt install mysql-server
sudo mysql_secure_installation
# Verificar status
systemctl status mysql
mysql --version
# Acessar
sudo mysql -u root
# ou
mysql -u root -p
Configuração Essencial
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# Bind
bind-address = 0.0.0.0 # escuta em todas interfaces
port = 3306
# Storage
datadir = /var/lib/mysql
tmpdir = /tmp
# Character
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# Connection
max_connections = 500
wait_timeout = 600
# Logs
log_error = /var/log/mysql/error.log
general_log = 0
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# Temp
tmp_table_size = 64M
max_heap_table_size = 64M
Usuários e Privilégios
-- Criar usuário
CREATE USER 'app_user'@'%' IDENTIFIED BY 'SenhaSegura123!';
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'SenhaForte!';
-- Conceder privilégios
GRANT ALL PRIVILEGES ON meu_banco.* TO 'app_user'@'%';
GRANT SELECT, INSERT, UPDATE ON meu_banco.* TO 'reader'@'%';
-- Privilégios específicos
GRANT SELECT ON mysql.* TO 'monitor'@'%';
GRANT PROCESS, REPLICATION CLIENT, SHOW DATABASES ON *.* TO 'monitor'@'%';
-- Aplicar
FLUSH PRIVILEGES;
-- Visualizar
SHOW GRANTS FOR 'app_user'@'%';
SELECT user, host, plugin FROM mysql.user;
-- Remover
DROP USER 'old_user'@'localhost';
REVOKE ALL PRIVILEGES ON *.* FROM 'app_user'@'%';
Storage Engines
-- Ver engines disponíveis
SHOW ENGINES;
-- InnoDB (padrão, transactions, FK)
CREATE TABLE clientes (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100)
) ENGINE=InnoDB;
-- MyISAM (legado, sem transactions)
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
mensagem TEXT
) ENGINE=MyISAM;
-- MEMORY (heap, dados em RAM)
CREATE TABLE cache (
chave VARCHAR(100) PRIMARY KEY,
valor TEXT
) ENGINE=MEMORY MAX_ROWS=100000;
InnoDB vs MyISAM
| Aspecto | InnoDB | MyISAM |
|---|---|---|
| Transactions | ✅ Sim | ❌ Não |
| Foreign Keys | ✅ Sim | ❌ Não |
| Row-level lock | ✅ Sim | ❌ Table lock |
| Crash recovery | ✅ Sim | ❌ Precisa repair |
| Full-text index | ✅ (5.6+) | ✅ Sim |
| COUNT(*) sem WHERE | Lento | Rápido (metadados) |
| Tamanho | Maior | Menor |
| Caso de uso | Produção, dados críticos | Read-only, logs, data warehouse |
MySQL CLI
# Comandos úteis
mysql -u user -p -h host -P 3306 database
# Dentro do MySQL
SHOW DATABASES;
USE database;
SHOW TABLES;
DESCRIBE table;
SHOW CREATE TABLE table;
# Status
STATUS;
SHOW PROCESSLIST;
SHOW VARIABLES LIKE '%version%';
SHOW STATUS LIKE '%connections%';
MySQL 8.0+ — InnoDB é a engine padrão e recomendada. Use utf8mb4 para suporte a emoji. Sempre configure slow query log. Prefira auth_socket a mysql_native_password para usuários locais.