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 vous connecter à votre service MariaDB est d'utiliser le format d'URL MySQL, tant que votre pilote 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 qui montrent comment vous pouvez vous connecter à MariaDB depuis PHP avec différentes extensions. Même si ces exemples utilisent la base de données "root", il est préférable de créer une base et un utilisateur dédiés pour votre application, surtout en 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", assurez-vous 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
c'est probablement parce 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 avec
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/' - Décommentez la ligne avec
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, votre installation PDO ne prend probablement 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, éditez 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 pilote 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
c'est probablement parce que votre système ne dispose pas des certificats CA installés. Voici quelques façons de les installer :
-
Sur Ubuntu/Debian, vous pouvez exécuter :
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, vous pouvez les ajouter 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 ceci :
'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 comme suit :
$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
Une bonne pratique consiste à ne pas mettre vos identifiants en dur dans le code, mais à 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 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 cruciale 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 essayer le package mysql2, qui prend en charge les promesses. Pour l'installer :
npm install mysql2
Voici un exemple que vous pouvez 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 vous connecter à MariaDB avec Prisma, il suffit d'ajouter sslaccept=strict à votre URL de connexion. Par exemple, si vous vous connectez en tant que "root" à 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 votre 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 un environnement de 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>'
}
}
Veuillez noter : cet exemple est uniquement pour des tests. Vous ne devez pas utiliser 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, vous pouvez l'installer 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 garder vos identifiants en sécurité, ajoutez .env à votre .gitignore :
echo ".env" >> .gitignore
Connecter MariaDB avec Java/Spring
Pour connecter une application Spring à MariaDB, vous pouvez définir la variable d'environnement SPRING_DATASOURCE_URL avec l'URL de votre base de données, 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 de données.
username = "root" // Il est recommandé 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 le compte "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 de données 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 cas d'usage, MariaDB et MySQL offrent des fonctionnalités et une compatibilité très similaires.