kb.erickguedes.com
MySQL: Administração e Performance

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

AspectoInnoDBMyISAM
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 WHERELentoRápido (metadados)
TamanhoMaiorMenor
Caso de usoProdução, dados críticosRead-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.