Capítulo 3 de 5

Instalar MariaDB e phpMyAdmin no Debian 13 para Laravel

verificado a 2 Setembro 2026 · 4 min

Resposta rápida

sudo apt install mariadb-server, depois sudo mariadb-secure-installation (o antigo mysql_secure_installation já não existe). Cria uma base em utf8mb4 e um utilizador dedicado limitado a essa base, nunca a conta de administração. Do lado do Laravel, DB_CONNECTION=mysql serve também para MariaDB.

O Laravel precisa de uma base de dados. No Debian, MariaDB é a escolha por omissão: é o pacote fornecido pela distribuição e funciona com o driver MySQL do Laravel. O phpMyAdmin vem a seguir, se quiseres uma interface web para espreitar as tuas tabelas.

Este capítulo faz parte da instalação do Laravel no Debian, dentro do percurso Desenvolvimento web. Passos executados em Debian 13 «trixie» com MariaDB 11.8.6 e Laravel 13.30.1, a 2 de setembro de 2026.

Instalar o MariaDB

bash
sudo apt update
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadb
mariadb --version
code
mariadb from 11.8.6-MariaDB, client 15.2 for debian-linux-gnu

A conta de administração fica acessível a partir da shell root da máquina, sem palavra-passe. Isso não quer dizer que a instalação esteja segura: quer dizer que a segurança assenta inteiramente no acesso ao servidor.

Proteger a instalação

O Debian 13 fornece a ferramenta com o nome MariaDB. O antigo mysql_secure_installation já não existe:

bash
sudo mariadb-secure-installation

O script faz uma série de perguntas. Responde assim:

Pergunta Resposta Porquê
Switch to unix_socket authentication sim o administrador autentica-se pela conta de sistema, não por uma palavra-passe guardada
Change the root password à escolha desnecessário se ativaste o unix_socket
Remove anonymous users sim permitem uma ligação sem credenciais
Disallow root login remotely sim a administração faz-se por SSH, não pela porta 3306
Remove test database sim base aberta a escrita por toda a gente
Reload privilege tables sim aplica as alterações de imediato

Criar a base e o utilizador da aplicação

Nunca ponhas a aplicação a correr com a conta de administração. Cria uma base e uma conta dedicadas:

bash
sudo mariadb
sql
CREATE DATABASE laravel
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

CREATE USER 'laravel'@'localhost' IDENTIFIED BY 'un_mot_de_passe_long';

GRANT ALL PRIVILEGES ON laravel.* TO 'laravel'@'localhost';

FLUSH PRIVILEGES;

Há dois pontos a reter. O conjunto de caracteres utf8mb4 não é decorativo: é o único que guarda o Unicode todo, emojis incluídos. E o privilégio está limitado a laravel.*, não a *.*: se a aplicação for comprometida, as outras bases ficam fora de alcance.

Confirma o resultado:

sql
SHOW GRANTS FOR 'laravel'@'localhost';
code
GRANT USAGE ON *.* TO `laravel`@`localhost` IDENTIFIED BY PASSWORD '*1F48A8…'
GRANT ALL PRIVILEGES ON `laravel`.* TO `laravel`@`localhost`

Ligar o Laravel

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=un_mot_de_passe_long

DB_CONNECTION=mysql serve também para MariaDB: o Laravel usa o mesmo driver PDO. Limpa a cache de configuração e corre as migrações:

bash
php artisan config:clear
php artisan migrate --force
code
  INFO  Running migrations.

  0001_01_01_000000_create_users_table ......................... 136.15ms DONE
  0001_01_01_000001_create_cache_table .......................... 65.58ms DONE
  0001_01_01_000002_create_jobs_table .......................... 117.52ms DONE

Migrações que passam são a prova de que a ligação, as permissões e o conjunto de caracteres estão certos.

Se a ligação falhar

Um erro «could not find driver» não vem do MariaDB mas do PHP: falta o php-mysql. Verifica com php -r 'echo implode(", ", PDO::getAvailableDrivers());', como explicado no capítulo sobre o PHP e as suas extensões, que deve mostrar mysql. O pacote php-mysqli não chega, porque o Laravel passa por PDO.

phpMyAdmin, e se vale a pena instalá-lo

O phpMyAdmin voltou ao Debian 13, na versão 5.2.2:

bash
sudo apt install -y phpmyadmin

O assistente propõe configurar o servidor web, o Apache no caso mais habitual, e cria a sua própria base de configuração. Numa instalação Apache, a interface passa a ser servida em /phpmyadmin.

Uma interface de administração exposta na Internet é um alvo

O endereço /phpmyadmin é varrido sem descanso. Se o instalares num servidor público, limita o acesso por endereço IP ou por autenticação HTTP, ou não o exponhas de todo: um túnel SSH deixa-te lá chegar a partir do teu posto sem o abrir ao mundo.

bash
# túnel SSH: o phpMyAdmin fica no loopback do servidor
ssh -L 8080:127.0.0.1:80 deploy@exemple.com
# depois http://127.0.0.1:8080/phpmyadmin a partir do teu navegador

Para o dia a dia, a linha de comandos chega e evita a questão por completo:

bash
sudo mariadb laravel -e "SHOW TABLES;"
php artisan db:show
php artisan db:table users
php artisan tinker

O php artisan db:show mostra as tabelas, o seu tamanho e o número de linhas sem sair do terminal. Muitas vezes é tudo o que é preciso.

Fazer cópias de segurança

Uma base sem cópia de segurança não é uma base de produção. O comando mínimo:

bash
sudo mariadb-dump --single-transaction laravel | gzip > /var/sauvegardes/laravel-$(date +%F).sql.gz

O --single-transaction evita bloquear as tabelas InnoDB durante a exportação, o que permite guardar a base sem interromper o serviço. Mete esta linha numa tarefa agendada e confirma de vez em quando que um restauro funciona mesmo: uma cópia que nunca foi restaurada é uma hipótese, não uma garantia.

Erros frequentes

mysql_secure_installation já não existe No Debian 13 a ferramenta chama-se mariadb-secure-installation.
Dar ALL PRIVILEGES em *.* Se a aplicação for comprometida, o atacante chega a todas as bases do servidor. Limita a laravel.*.
Usar utf8 em vez de utf8mb4 O utf8 não cobre o Unicode todo: os emojis e alguns caracteres provocam um erro na inserção.
Erro «could not find driver» O problema vem do PHP, não do MariaDB: falta o php-mysql. O php-mysqli não chega, porque o Laravel passa por PDO.
phpMyAdmin exposto na Internet O endereço /phpmyadmin é varrido sem descanso. Limita o acesso ou passa por um túnel SSH.
Cópia de segurança nunca restaurada Uma cópia que nunca foi reposta é uma hipótese. Testa o restauro.
Newsletter

Os novos testes, tutoriais e projetos, por e-mail.

Testes reproduzíveis, código versionado, resultados datados. Nunca spam.