MariaDB: Premiers pas
Comment débuter avec MariaDB
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution MariaDB cloud prête à l'emploi qui offre de nombreux avantages, notamment :
- Connexions et transferts illimités.
- Interface web phpMyAdmin incluse.
- Mises à jour faciles en un clic.
- Performance optimale et sécurité robuste grâce à une VM privée et dédiée.
Gagnez du temps et simplifiez-vous la vie : il ne faut que 5 minutes pour essayer la solution MariaDB cloud hosting de Stackhero !
URLs MariaDB
La façon la plus simple de se connecter à votre service MariaDB est d'utiliser le format d'URL MySQL, tant que votre driver le prend en charge :
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Si vous utilisez Ruby, l'URL MySQL est légèrement différente :
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
Utiliser MariaDB avec PHP
Voici quelques exemples pour vous connecter à MariaDB depuis PHP avec différentes extensions. Même si ces exemples utilisent la base "root", il est recommandé de créer une base et un utilisateur dédiés pour votre application, surtout en environnement de production.
Utiliser MariaDB avec PHP et MySQLi (style orienté objet)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Exemple uniquement. Pour de bonnes pratiques, créez votre propre base et utilisateur dans phpMyAdmin et utilisez ces identifiants.
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Erreur de connexion : ' . $mysqli->connect_error);
}
echo 'Connexion réussie... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Utiliser MariaDB avec PHP et MySQLi (style procédural)
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Exemple uniquement. Pour de bonnes pratiques, créez votre propre base et utilisateur dans phpMyAdmin et utilisez ces identifiants.
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die('Erreur de connexion : ' . mysqli_connect_error($mysqli));
}
echo 'Succès : ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
Utiliser MariaDB avec PHP et PDO
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // Exemple uniquement. Pour de bonnes pratiques, créez votre propre base et utilisateur dans phpMyAdmin et utilisez ces identifiants.
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// Si vous obtenez une erreur du type "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", vérifiez que votre dossier /etc/ssl/certs/ contient bien les certificats 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 'Vous êtes connecté à une base de données en version ' . $version[0] . "\n";
?>
Comment résoudre l'erreur "SSL operation failed with code 1"
Si vous voyez cette erreur :
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
cela signifie probablement que le dossier /etc/ssl/certs/ ne contient pas les certificats CA nécessaires. Si vous avez accès au système, voici quelques suggestions pour les installer :
-
Sur Ubuntu, vous pouvez exécuter :
apt-get install ca-certificates -
Sur Alpine Linux, essayez :
apk add ca-certificates
Si vous n'avez pas accès au système, vous pouvez ajouter le certificat manuellement :
- Téléchargez le certificat : https://letsencrypt.org/certs/isrgrootx1.pem
- Placez le fichier
isrgrootx1.pemdans votre projet PHP. - Commentez la ligne
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Décommentez la ligne
PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'
Comment résoudre "Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH"
Si vous voyez une erreur comme :
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
ou un message similaire mentionnant une constante PDO MySQL non définie, cela signifie probablement que votre installation PDO ne prend pas en charge MySQL.
Sur Ubuntu/Debian
Vous pouvez installer l'extension PHP MySQL requise avec :
sudo apt-get install php-mysql
Si vous utilisez Docker
Pour vous assurer que le support MySQL est disponible, ajoutez ceci à votre Dockerfile :
RUN docker-php-ext-install pdo pdo_mysql
### Utiliser MariaDB avec Symfony et Doctrine
Pour commencer, modifiez votre fichier `.env` et définissez la variable `DATABASE_URL` comme ceci :
DATABASE_URL="mysql://<USER>:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/<DATABASE>"
Ensuite, mettez à jour votre fichier `config/packages/doctrine.yaml` pour définir le driver et les options :
```yaml
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
Comment corriger l'erreur "SSL operation failed with code 1"
Si vous rencontrez cette erreur :
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
cela signifie probablement que les certificats CA ne sont pas installés sur votre système. Voici comment les installer :
-
Sur Ubuntu/Debian, exécutez :
sudo apt-get install ca-certificates -
Sur Alpine Linux, essayez :
apk add ca-certificates
Si vous ne pouvez pas installer les certificats CA au niveau système, ajoutez-les manuellement :
-
Téléchargez le certificat : https://letsencrypt.org/certs/isrgrootx1.pem
-
Placez le fichier
isrgrootx1.pemdans votre projet Symfony. -
Mettez à jour votre fichier
config/packages/doctrine.yaml: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
Utiliser MariaDB avec Laravel
Pour configurer MariaDB avec Laravel, ouvrez config/database.php et mettez à jour la configuration mysql comme suit :
'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([
// Si vous rencontrez des erreurs SSL comme "Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed", consultez les étapes de résolution ci-dessus.
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
Utiliser MariaDB avec PHP CodeIgniter
Dans votre fichier database.php, vous pouvez configurer la connexion ainsi :
$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'), // Par convention, le nom de la base correspond à l'utilisateur.
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // Important : activez le chiffrement TLS
);
Connexion à MariaDB avec PHP via des variables d'environnement
Il est recommandé de ne pas mettre vos identifiants en dur dans le code, mais d'utiliser des variables d'environnement. Vous pouvez les récupérer ainsi :
$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'); // Par convention, le nom de la base correspond à l'utilisateur.
Utiliser MariaDB avec WordPress
Connecter WordPress à Stackhero pour MariaDB est très simple. Dans votre fichier wp-config.php, définissez les paramètres suivants :
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// Activez le chiffrement TLS (aussi appelé SSL)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
L'étape essentielle ici est d'activer le chiffrement TLS (parfois appelé SSL). La connexion ne fonctionnera pas sans cela.
Utiliser MariaDB avec Node.js
Si vous utilisez Node.js, vous pouvez utiliser le package mysql2, qui prend en charge les promesses. Pour l'installer :
npm install mysql2
Voici un exemple à adapter :
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// Crée la base si elle n'existe pas déjà
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// Crée la table users si elle n'existe pas
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;'
);
// Insère un utilisateur exemple
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000), // Génère un userId
'User name', // name
'User address', // address
'[email protected]' // email
]
]
);
// Compte les utilisateurs dans la table
const [usersCount] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`Il y a maintenant ${usersCount[0].cpt} entrées dans la table "users"`);
// Ferme la connexion
await db.end();
})().catch(error => {
console.error('');
console.error('Une erreur est survenue !');
console.error(error);
process.exit(1);
});
Utiliser MariaDB avec Node.js/NestJS/TypeORM
Pour Node.js, NestJS ou TypeORM, vous pouvez activer SSL en ajoutant l'option ssl :
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
Utiliser MariaDB avec Prisma
Pour se connecter à MariaDB avec Prisma, il suffit d'ajouter sslaccept=strict à votre URL de connexion. Par exemple, pour une connexion en tant que "root" sur la base "root" :
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
Utiliser MariaDB avec Django
Si ce n'est pas déjà fait, vous pouvez installer le module mysqlclient pour connecter Django à MariaDB :
pip install mysqlclient
Si vous obtenez l'erreur
Exception: Can not find valid pkg-config namelors de l'installation, il peut être nécessaire d'installer le packagelibmysqlclientau préalable. Pour Ubuntu/Debian :apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
Pour tester la connexion, vous pouvez commencer par mettre vos identifiants directement dans settings.py. Cela convient pour des tests, mais ce n'est pas sécurisé pour la production.
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>'
}
}
Attention : cet exemple est uniquement pour des tests. N'utilisez pas d'identifiants en dur en production.
Une fois la connexion validée, il est plus sûr de stocker les identifiants dans des variables d'environnement. Si vous utilisez django-environ, installez-le ainsi :
pip install django-environ
Puis mettez à jour settings.py :
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')
}
}
Ensuite, créez ou mettez à jour le fichier .env (dans le même dossier que settings.py) avec :
STACKHERO_MARIADB_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MARIADB_PORT=<PORT>
STACKHERO_MARIADB_ROOT_PASSWORD=<ROOT_PASSWORD>
Enfin, pour sécuriser vos identifiants, ajoutez .env à votre .gitignore :
echo ".env" >> .gitignore
Connecter MariaDB avec Java/Spring
Pour connecter une application Spring à MariaDB, définissez la variable d'environnement SPRING_DATASOURCE_URL avec l'URL de votre base, en utilisant le préfixe jdbc:. Par exemple :
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Connecter MariaDB avec Groovy/Grails
Voici un exemple de configuration pour connecter votre application Grails à MariaDB :
dataSource {
pooled = true
driverClassName = "com.mysql.cj.jdbc.Driver"
dialect = org.hibernate.dialect.MySQL8Dialect
// Propriétés spécifiques 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" // Remplacez '/root' par le nom réel de votre base.
username = "root" // Il est conseillé de créer un utilisateur dédié pour votre application.
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD // Pensez à créer un utilisateur dédié.
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
Créer un utilisateur MariaDB via phpMyAdmin
Pour plus de sécurité, il est préférable de créer un utilisateur dédié pour votre application plutôt que d'utiliser "root". Vous pouvez le faire facilement dans phpMyAdmin :
- Dans phpMyAdmin, cliquez sur
Comptes utilisateursen haut.
- Cliquez sur
Ajouter un compte utilisateur.
- Remplissez le formulaire :
- Choisissez un nom d'utilisateur (souvent le nom de votre application).
- Cliquez sur
Générer un mot de passepour obtenir un mot de passe fort, puis copiez-le. - Cochez
Créer une base de données portant son nom et donner tous les privilèges.
Une fois validé, votre nouvel utilisateur et une base associée seront créés.
Différences entre MariaDB et MySQL
MariaDB est un fork indépendant de MySQL, créé par la communauté open source après le rachat de MySQL par Oracle en 2010. Pour la plupart des usages, MariaDB et MySQL offrent des fonctionnalités et une compatibilité très proches.