Instalar MySQL e phpMyAdmin para o site do servidor de MU
Instale MySQL e phpMyAdmin no Linux (Ubuntu/Debian) para hospedar o site do servidor de MU Online — configuração completa com criação de banco, usuário, permissões e integração com PHP.
O banco MySQL é usado pelo site do servidor de MU Online — para gerenciar contas do portal, rankings na web, notícias, sistema de doações e outros recursos web. O GameServer em si usa SQL Server, não MySQL.
O banco MySQL é usado pelo site do servidor de MU Online — para gerenciar contas do portal, rankings na web, notícias, sistema de doações e outros recursos web. O GameServer em si usa SQL Server, não MySQL.
MySQL vs. SQL Server — a distinção importante
| Componente | Banco | Por quê |
|---|---|---|
| GameServer, DataServer | SQL Server | MuServer é nativo Windows/SQL |
| Banco de personagens, contas do jogo | SQL Server | Arquitetura do MuServer |
| Site do servidor (PHP) | MySQL | PHP + Linux faz melhor com MySQL |
| Ranking web, notícias, doações | MySQL | Dados do sistema web, não do jogo |
Instalação no Ubuntu/Debian (VPS Linux)
Passo 1 — Instalar MySQL 8.0
# Atualizar repositórios
sudo apt update
# Instalar MySQL Server
sudo apt install mysql-server -y
# Verificar instalação
mysql --version
# Deve mostrar: mysql Ver 8.0.XX ...
# Ver status do serviço
sudo systemctl status mysql
Passo 2 — Configuração segura inicial
# Script de segurança (DEVE ser executado após instalar)
sudo mysql_secure_installation
# Respostas recomendadas para servidor de produção:
# Validate password component? → Y (sim)
# Password strength level → 1 (MEDIUM — requer letras, números, símbolos)
# Set root password? → Y → criar senha forte: MuRoot@2026!
# Remove anonymous users? → Y (sim)
# Disallow root login remotely? → Y (sim — root só acessa por localhost)
# Remove test database? → Y (sim)
# Reload privilege tables? → Y (sim)
Passo 3 — Login como root
# No Ubuntu 20.04+, o root do MySQL usa autenticação do SO por padrão
sudo mysql
# No prompt do MySQL:
mysql> SELECT version();
Passo 4 — Criar banco e usuário para o site
-- Criar banco de dados para o site do servidor
CREATE DATABASE mu_site
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- Criar usuário dedicado para o site (NÃO use root)
CREATE USER 'mu_web'@'localhost' IDENTIFIED BY 'SenhaSiteWeb@2026!';
-- Dar permissões apenas no banco do site
GRANT ALL PRIVILEGES ON mu_site.* TO 'mu_web'@'localhost';
-- Aplicar permissões
FLUSH PRIVILEGES;
-- Verificar usuário criado
SELECT User, Host FROM mysql.user WHERE User = 'mu_web';
root no PHP do site. Sempre crie um usuário dedicado com acesso apenas ao banco necessário. Se o site for comprometido, o dano fica limitado a mu_site, não ao MySQL inteiro.Passo 5 — Criar tabelas básicas do site
-- Conectar ao banco do site
USE mu_site;
-- Tabela de usuários do site (diferente das contas do jogo)
CREATE TABLE site_users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(150) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL, -- hash bcrypt
game_account VARCHAR(10) DEFAULT NULL, -- conta no jogo (opcional)
is_admin TINYINT(1) NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_login DATETIME NULL,
INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Tabela de notícias/posts do servidor
CREATE TABLE site_news (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
slug VARCHAR(255) NOT NULL UNIQUE,
content LONGTEXT NOT NULL,
author_id INT NOT NULL,
published TINYINT(1) NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (author_id) REFERENCES site_users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Tabela de doações
CREATE TABLE donations (
id INT AUTO_INCREMENT PRIMARY KEY,
game_account VARCHAR(10) NOT NULL,
amount DECIMAL(10,2) NOT NULL,
credits INT NOT NULL,
payment_id VARCHAR(100) NULL, -- ID da transação no gateway
status ENUM('pending','completed','failed') DEFAULT 'pending',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_account (game_account),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Instalação do phpMyAdmin
No Ubuntu/Debian
# Instalar phpMyAdmin
sudo apt install phpmyadmin -y
# Durante instalação:
# "Web server to reconfigure automatically?" → selecione apache2
# "Configure database for phpmyadmin with dbconfig-common?" → Yes
# Senha para admin do phpMyAdmin: crie uma senha forte
# Habilitar extensão PHP para phpMyAdmin
sudo phpenmod mbstring
sudo systemctl restart apache2
Configurar acesso seguro ao phpMyAdmin
# Mudar o path padrão /phpmyadmin para algo menos óbvio
# Editar: /etc/phpmyadmin/apache.conf
sudo nano /etc/apache2/conf-available/phpmyadmin.conf
# Mudar /phpmyadmin para /admin-db (ou outro path)
Alias /admin-db /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
AllowOverride All
# Restringir acesso por IP (opcional mas recomendado)
# Require ip 200.100.50.0/24 ← seu IP ou range
# Require ip 127.0.0.1
</Directory>
# Recarregar Apache
sudo systemctl reload apache2
# Acesso: http://seudominio.com/admin-db
Acessar phpMyAdmin
- Abra
http://seudominio.com/phpmyadmin(ou o path que configurou); - Login:
rootou o usuáriomu_webque criou; - No banco
mu_site, você pode ver e editar as tabelas visualmente.
Conectar o PHP ao MySQL
Com PDO (recomendado)
<?php
// config/database.php
define('DB_HOST', 'localhost');
define('DB_NAME', 'mu_site');
define('DB_USER', 'mu_web');
define('DB_PASS', 'SenhaSiteWeb@2026!');
define('DB_CHARSET', 'utf8mb4');
function getDB(): PDO {
static $pdo = null;
if ($pdo === null) {
$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET;
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
}
return $pdo;
}
Usar no código do site
<?php
// Exemplo: listar últimas notícias
require 'config/database.php';
$db = getDB();
// Buscar notícias publicadas (usando prepared statement)
$stmt = $db->prepare("
SELECT n.title, n.slug, n.created_at, u.username as author
FROM site_news n
JOIN site_users u ON u.id = n.author_id
WHERE n.published = 1
ORDER BY n.created_at DESC
LIMIT ?
");
$stmt->execute([10]);
$noticias = $stmt->fetchAll();
foreach ($noticias as $noticia) {
echo "<h2>" . htmlspecialchars($noticia['title']) . "</h2>";
echo "<p>Por " . htmlspecialchars($noticia['author']) . "</p>";
}
Com mysqli (alternativo)
<?php
// Conexão com mysqli
$conn = new mysqli('localhost', 'mu_web', 'SenhaSiteWeb@2026!', 'mu_site');
$conn->set_charset('utf8mb4');
if ($conn->connect_error) {
die("Conexão falhou: " . $conn->connect_error);
}
// Exemplo com prepared statement (SEMPRE usar para evitar SQL injection)
$stmt = $conn->prepare("SELECT username FROM site_users WHERE email = ?");
$stmt->bind_param("s", $email);
$email = "[email protected]";
$stmt->execute();
$result = $stmt->get_result();
Backup do MySQL
# Backup de um banco específico
mysqldump -u root -p mu_site > backup-site-$(date +%Y%m%d).sql
# Backup com compressão
mysqldump -u root -p mu_site | gzip > backup-site-$(date +%Y%m%d).sql.gz
# Restaurar backup
mysql -u root -p mu_site < backup-site-20260701.sql
# Agendar backup diário (cron)
# crontab -e → adicionar:
# 0 3 * * * mysqldump -u root -pSENHA mu_site | gzip > /backups/site-$(date +\%Y\%m\%d).sql.gz
Problemas comuns
| Problema | Causa | Solução |
|---|---|---|
Access denied for user 'root'@'localhost' | Root usa auth_socket no Ubuntu | sudo mysql (com sudo) ou criar usuário com senha |
Table doesn't exist | Banco/tabela não criados | Verificar USE database e criar tabelas |
Can't connect to MySQL server | MySQL não está rodando | sudo systemctl start mysql |
| phpMyAdmin mostra erro 403 | Configuração do Apache | Verificar phpmyadmin.conf habilitado com a2enconf phpmyadmin |
| Charset incorreto (caracteres quebrados) | Charset diferente no banco e PHP | Usar utf8mb4 consistentemente em CREATE DATABASE, tabelas e conexão PHP |
Comparação: MySQL vs. MariaDB
| Aspecto | MySQL 8.0 | MariaDB 10.11 |
|---|---|---|
| Compatibilidade com sites MU | Total | Total |
| Performance geral | Boa | Ligeiramente melhor |
| Instalação | sudo apt install mysql-server | sudo apt install mariadb-server |
| Configuração | Igual | Igual ao MySQL |
| Suporte longo prazo | Sim | Sim |
| Licença | GPL + comercial | GPL puro |
Para instalar MariaDB no lugar de MySQL, basta substituir mysql-server por mariadb-server nos comandos — o resto da configuração é idêntico.
Perguntas frequentes
O servidor de MU Online usa MySQL?
Não — o GameServer/DataServer do MU Online usa SQL Server (Microsoft). O MySQL é usado pelo SITE do servidor, para gerenciar contas do site, ranking exibido na web, notícias e outros dados do sistema web.
Qual versão do MySQL usar?
MySQL 8.0 para instalações novas (Ubuntu 22.04+). Se usar AppServ ou XAMPP no Windows, já vem com MySQL 5.7 ou 8.0 incluído.
phpMyAdmin é seguro?
É seguro se configurado corretamente — use senha forte no root, mude o path de acesso padrão (/phpmyadmin) e restrinja acesso por IP se possível.
MariaDB funciona no lugar de MySQL?
Sim — MariaDB é um fork do MySQL 100% compatível, frequentemente mais rápido. Muitos sistemas de site para MU funcionam com os dois.