O maior portal de MU Online do Brasil — desde 2003
Tutorial Iniciante Servidor

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.

EQ Equipe ViciadosMU · Atualizado em 1 jul 2026 · ⏱ 18 min de leitura
Resposta rápida

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

ComponenteBancoPor quê
GameServer, DataServerSQL ServerMuServer é nativo Windows/SQL
Banco de personagens, contas do jogoSQL ServerArquitetura do MuServer
Site do servidor (PHP)MySQLPHP + Linux faz melhor com MySQL
Ranking web, notícias, doaçõesMySQLDados 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';
Atenção: Nunca use o usuário 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

  1. Abra http://seudominio.com/phpmyadmin (ou o path que configurou);
  2. Login: root ou o usuário mu_web que criou;
  3. 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

ProblemaCausaSolução
Access denied for user 'root'@'localhost'Root usa auth_socket no Ubuntusudo mysql (com sudo) ou criar usuário com senha
Table doesn't existBanco/tabela não criadosVerificar USE database e criar tabelas
Can't connect to MySQL serverMySQL não está rodandosudo systemctl start mysql
phpMyAdmin mostra erro 403Configuração do ApacheVerificar phpmyadmin.conf habilitado com a2enconf phpmyadmin
Charset incorreto (caracteres quebrados)Charset diferente no banco e PHPUsar utf8mb4 consistentemente em CREATE DATABASE, tabelas e conexão PHP

Comparação: MySQL vs. MariaDB

AspectoMySQL 8.0MariaDB 10.11
Compatibilidade com sites MUTotalTotal
Performance geralBoaLigeiramente melhor
Instalaçãosudo apt install mysql-serversudo apt install mariadb-server
ConfiguraçãoIgualIgual ao MySQL
Suporte longo prazoSimSim
LicençaGPL + comercialGPL 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.

EQ

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Continue lendo

Artigos relacionados