MariaDB: Introdução
Como começar com MariaDB
👋 Bem-vindo à documentação da Stackhero!
A Stackhero oferece uma solução MariaDB cloud pronta para uso que proporciona uma série de benefícios, incluindo:
- Conexões e transferências ilimitadas.
- Interface web phpMyAdmin incluída.
- Atualizações fáceis com apenas um clique.
- Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.
Poupe tempo e simplifique a sua vida: leva apenas 5 minutos para experimentar a solução de MariaDB cloud hosting da Stackhero!
URLs do MariaDB
A forma mais simples de se conectar ao seu serviço MariaDB é usando o formato de URL MySQL, desde que o seu driver o suporte:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Para utilizadores de Ruby, o URL MySQL difere ligeiramente:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
Usar MariaDB com PHP
Abaixo estão vários exemplos usando PHP para ajudar a conectar-se ao MariaDB usando diferentes extensões. Lembre-se de que não é recomendado usar a base de dados 'root' em produção. Em vez disso, considere criar uma base de dados e um utilizador dedicados.
Usar MariaDB com PHP e MySQLi (estilo orientado a objetos)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Não é recomendado usar a base de dados 'root'. Isto é apenas para o exemplo. A melhor prática é criar uma base de dados e um utilizador dedicados no phpMyAdmin e usá-los aqui.
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Erro de conexão: ' . $mysqli->connect_error);
}
echo 'Conexão bem-sucedida... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Usar MariaDB com PHP e MySQLi (estilo procedural)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Não é recomendado usar a base de dados 'root'. Isto é apenas para o exemplo. A melhor prática é criar uma base de dados e um utilizador dedicados no phpMyAdmin e usá-los aqui.
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Erro de conexão: ' . mysqli_connect_error($mysqli));
}
echo 'Sucesso: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
Usar MariaDB com PHP e PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Não é recomendado usar a base de dados 'root'. Isto é apenas para o exemplo. A melhor prática é criar uma base de dados e um utilizador dedicados no phpMyAdmin e usá-los aqui.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Se encontrar um erro como "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", verifique se o diretório /etc/ssl/certs/ contém certificados CA.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
);
$pdo = new PDO($dsn, $user, $password, $options);
$stm = $pdo->query('SELECT VERSION()');
$version = $stm->fetch();
echo 'Está conectado a uma base de dados que executa a versão ' . $version[0] . "\n";
?>
Gerir erro "SSL operation failed with code 1"
Se receber o erro:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
isto é provavelmente porque o diretório /etc/ssl/certs/ não contém os certificados CA. Se tiver acesso ao sistema, pode instalar estes certificados da seguinte forma:
-
No Ubuntu, pode executar:
apt-get install ca-certificates -
No Alpine Linux, execute:
apk add ca-certificates
Se não tiver acesso direto ao sistema que executa o seu código PHP, pode instalar o certificado manualmente:
- Faça o download do certificado: https://letsencrypt.org/certs/isrgrootx1.pem
- Adicione o ficheiro
isrgrootx1.pemaos seus ficheiros de projeto PHP. - Comente a linha com
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Descomente a linha com
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Resolver "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH"
Se vir um erro como:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
ou um erro semelhante mencionando uma constante indefinida para atributos PDO MySQL, isso indica que a sua instalação PDO não tem suporte MySQL.
Solução para Ubuntu/Debian
Instale a extensão PHP MySQL necessária com:
sudo apt-get install php-mysql
Solução para Docker
Se estiver a usar Docker, certifique-se de que o suporte MySQL está incluído durante o processo de build. Considere adicionar o seguinte ao seu Dockerfile:
RUN docker-php-ext-install pdo pdo_mysql
Usar MariaDB com Symfony e Doctrine
Edite o ficheiro .env e defina a variável DATABASE_URL da seguinte forma:
DATABASE_URL="mysql://<USER>:<PASSWORD>@XXXXXX.stackhero-network.com:<PORT>/<DATABASE>"
Em seguida, atualize o ficheiro config/packages/doctrine.yaml, definindo o driver e as opções como segue:
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
options:
# PDO::MYSQL_ATTR_SSL_CAPATH
1010: '/etc/ssl/certs'
# PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
1014: true
Gerir erro "SSL operation failed with code 1"
Se encontrar o erro:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
isto provavelmente significa que o diretório /etc/ssl/certs/ não contém os certificados CA. Pode resolver isto instalando-os:
-
No Ubuntu/Debian, execute:
sudo apt-get install ca-certificates -
No Alpine Linux, execute:
apk add ca-certificates
Se não puder instalar os certificados a nível do sistema, pode adicioná-los manualmente:
-
Faça o download do certificado: https://letsencrypt.org/certs/isrgrootx1.pem
-
Coloque o ficheiro
isrgrootx1.pemno seu projeto Symfony. -
Depois, atualize o ficheiro
config/packages/doctrine.yamlpara usar o certificado local:doctrine: dbal: url: '%env(resolve:DATABASE_URL)%' driver: 'pdo_mysql' options: # PDO::MYSQL_ATTR_SSL_CA 1009: 'isrgrootx1.pem' # PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT 1014: true
Usar MariaDB com Laravel
Para configurar o MariaDB com Laravel, edite o ficheiro config/database.php e atualize a configuração mysql da seguinte forma:
'mysql' => [
'driver' => 'mysql',
'host' => env('STACKHERO_MARIADB_HOST'),
'port' => env('STACKHERO_MARIADB_PORT'),
'username' => env('STACKHERO_MARIADB_USER'),
'password' => env('STACKHERO_MARIADB_PASSWORD'),
'database' => env('STACKHERO_MARIADB_USER'),
'charset' => 'utf8mb4',
'collation'=> 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'sslmode' => 'require',
'options' => extension_loaded('pdo_mysql')
? array_filter([
// Se encontrar erros SSL como "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", consulte as instruções acima.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
Usar MariaDB com PHP CodeIgniter
No seu ficheiro database.php, insira a seguinte configuração:
$db['default'] = array(
'hostname' => getenv('STACKHERO_MARIADB_HOST'),
'port' => getenv('STACKHERO_MARIADB_PORT'),
'username' => getenv('STACKHERO_MARIADB_USER'),
'password' => getenv('STACKHERO_MARIADB_PASSWORD'),
'database' => getenv('STACKHERO_MARIADB_USER'), // Por convenção, o nome da base de dados corresponde ao nome de utilizador.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Importante: ativar a encriptação TLS
);
Conectar MariaDB com PHP usando variáveis de ambiente
É melhor evitar codificar as suas credenciais. Em vez disso, considere usar variáveis de ambiente. Pode recuperar as credenciais da seguinte forma:
$hostname = getenv('STACKHERO_MARIADB_HOST');
$port = getenv('STACKHERO_MARIADB_PORT');
$user = getenv('STACKHERO_MARIADB_USER');
$password = getenv('STACKHERO_MARIADB_PASSWORD');
$database = getenv('STACKHERO_MARIADB_USER'); // Por convenção, o nome da base de dados corresponde ao nome de utilizador.
Usar MariaDB com WordPress
Conectar o WordPress ao Stackhero para MariaDB é simples. Edite o ficheiro wp-config.php e configure as suas definições de base de dados da seguinte forma:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// Ativar a encriptação TLS (também conhecida como SSL)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
A parte importante aqui é a ativação da encriptação TLS (também conhecida como SSL). Sem isso, a conexão não funcionará.
Usar MariaDB com Node.js
Neste exemplo, usamos o pacote mysql2 com suporte a promessas. Primeiro, instale-o com:
npm install mysql2
Depois, use o seguinte código:
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Criar a base de dados 'stackherotest' se ainda não existir
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Criar a tabela 'users' se ainda não existir
await db.query(
'CREATE TABLE IF NOT EXISTS `stackherotest`.`users` (' +
'`userId` INT UNSIGNED NOT NULL,' +
'`name` VARCHAR(128) NOT NULL,' +
'`address` TEXT NOT NULL,' +
'`email` VARCHAR(265) NOT NULL' +
') ENGINE = InnoDB;'
);
// Inserir um utilizador fictício
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Gerar um userId fictício
'Nome do utilizador', // Coluna 'name'
'Endereço do utilizador', // Coluna 'address'
'user@email.com' // Coluna 'email'
]
]
);
// Contar o número de linhas na tabela 'users'
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Existem agora ${usersCount[0].cpt} entradas na tabela "users"`);
// Fechar a conexão com o MariaDB
await db.end();
})().catch(error => {
console.error('');
console.error('🐞 Ocorreu um erro!');
console.error(error);
process.exit(1);
});
Usar MariaDB com Node.js/NestJS/TypeORM
Ao conectar a partir de Node.js, NestJS ou TypeORM, inclua a opção ssl como mostrado:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
Usar MariaDB com Prisma
Para conectar com Prisma, adicione a opção sslaccept=strict para garantir que a encriptação SSL está ativada. Por exemplo, usando o utilizador "root" conectando-se à base de dados "root":
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
Usar MariaDB com Django
Se ainda não instalou o módulo mysqlclient (usado para conectar ao MariaDB), execute:
pip install mysqlclient
Se encontrar o erro
Exception: Can not find valid pkg-config nameao instalarmysqlclient, instale o pacotelibmysqlclient. No Ubuntu/Debian, pode executar:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Inicialmente, pode armazenar as suas credenciais diretamente no ficheiro settings.py para testes, conforme mostrado abaixo. Note que esta abordagem não é segura para produção.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '<XXXXXX>.stackhero-network.com',
'PORT': '<PORT>',
'OPTIONS': {
'ssl_mode': 'REQUIRED',
},
'NAME': 'root',
'USER': 'root',
'PASSWORD': '<ROOT_PASSWORD>'
}
}
alerta Tenha cuidado: este exemplo não é recomendado para produção e é apenas para fins de teste!
Uma vez que a conexão funcione, é melhor usar variáveis de ambiente para armazenar as suas credenciais. Por exemplo, usando django-environ, primeiro instale-o:
pip install django-environ
Depois, atualize settings.py da seguinte forma:
import environ
env = environ.Env()
environ.Env.read_env()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': env('STACKHERO_MARIADB_HOST'),
'PORT': env('STACKHERO_MARIADB_PORT'),
'OPTIONS': {
'ssl_mode': 'REQUIRED',
},
'NAME': 'root',
'USER': 'root',
'PASSWORD': env('STACKHERO_MARIADB_ROOT_PASSWORD')
}
}
Crie ou atualize o ficheiro .env (no mesmo diretório que settings.py) com o seguinte:
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Finalmente, adicione .env ao seu .gitignore para evitar cometer informações sensíveis:
echo ".env" >> .gitignore
Conectar MariaDB com Java/Spring
Para conectar a sua aplicação Spring, defina a variável de ambiente SPRING_DATASOURCE_URL com o seu URL de base de dados, prefixado com jdbc:. Por exemplo:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Conectar MariaDB com Groovy/Grails
O exemplo seguinte mostra como configurar a sua aplicação Grails para se conectar ao MariaDB:
dataSource {
pooled = true
driverClassName = "com.mysql.cj.jdbc.Driver"
dialect = org.hibernate.dialect.MySQL8Dialect
// Propriedades específicas de SSL
properties {
useSSL = true
requireSSL = true
verifyServerCertificate = true
sslMode = "REQUIRED"
}
}
environments {
production {
dataSource {
dbCreate = "none"
url = "jdbc:mysql://" + System.env.STACKHERO_MYSQL_HOST + ":" + System.env.STACKHERO_MYSQL_PORT + "/root?useSSL=true&requireSSL=true&verifyServerCertificate=true&sslMode=required" // Substitua '/root' pelo nome da base de dados desejada.
username = "root" // É aconselhável criar um utilizador dedicado em vez de usar 'root'.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Considere criar um utilizador dedicado.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Criar um utilizador no MariaDB usando phpMyAdmin
É uma boa prática criar um utilizador dedicado para a sua aplicação em vez de usar o utilizador 'root'. A forma mais fácil de fazer isso é através do phpMyAdmin:
- No phpMyAdmin, clique em
Contas de utilizadorno topo.
- Clique em
Adicionar conta de utilizador.
- Preencha o formulário de criação de utilizador:
- Escolha um nome de conta (geralmente o nome da sua aplicação).
- Clique em
Gerar senhapara uma senha segura, depois copie-a. - Marque a opção
Criar base de dados com o mesmo nome e conceder todos os privilégios.
Após a submissão, um novo utilizador será criado juntamente com uma base de dados que partilha o mesmo nome que o nome de utilizador.
Diferenças entre MariaDB e MySQL
MariaDB é um fork independente criado pela comunidade de código aberto após a aquisição do MySQL pela Oracle em 2010. Para a maioria dos propósitos, MariaDB e MySQL são muito semelhantes.