Aller au contenu

Connexion MySQL / MariaDB / Percona depuis les applications

Connecter des applications Java, PHP, Python et Node.js aux bases MySQL, MariaDB et Percona sur Stack Harbor PaaS — JDBC, PDO, mysqli, mysql2, mysql-connector.

Cette page couvre les détails de connexion côté application pour MySQL, MariaDB et Percona sur Stack Harbor PaaS. Les trois moteurs sont compatibles au niveau du protocole, donc la plupart des pilotes fonctionnent contre l’un quelconque avec la même chaîne de connexion — les différences sont surtout dans le pilote recommandé et le préfixe d’URL.

Pour les options d’hôte (CNAME, IP privée, IP publique), les paramètres d’encodage UTF-8, et le point ProxySQL des topologies en grappe, voir d’abord Chaînes de connexion base de données. Cette page se concentre sur le code pilote par langage.

Java (JDBC)

Pour une base mono-nœud, utiliser le pilote MySQL Connector/J :

String URL = "jdbc:mysql://node{node_id}-{environment_name}.{domain}/{dbname}";
Connection conn = DriverManager.getConnection(URL, user, password);

Pour une auto-cluster MySQL ou Percona, pointer sur le point ProxySQL :

String URL = "jdbc:mysql://proxy.{environment_name}.{domain}:3306/{dbname}";
Connection conn = DriverManager.getConnection(URL, user, password);

Pour une auto-cluster MariaDB, utiliser le pilote MariaDB et désactiver pipeline auth (ProxySQL ne l’implémente pas) :

String URL = "jdbc:mariadb://proxy.{environment_name}.{domain}:3306/{dbname}?usePipelineAuth=false";
Connection conn = DriverManager.getConnection(URL, user, password);

Utiliser une bibliothèque de pool de connexions (HikariCP, c3p0) en production plutôt qu’ouvrir une connexion fraîche par requête.

PHP

PDO avec le pilote MySQL :

$pdo = new PDO(
    'mysql:host=node{node_id}-{environment_name}.{domain};dbname={dbname};charset=utf8mb4',
    $user,
    $password
);

Ou la version procédurale mysqli :

$conn = mysqli_connect('node{node_id}-{environment_name}.{domain}', $user, $password, $dbname);
mysqli_set_charset($conn, 'utf8mb4');

Choisir utf8mb4 plutôt que utf8 — ce dernier est un alias MySQL pour l’UTF-8 sur 3 octets et ne supporte pas les points de code sur 4 octets (émojis, certains caractères CJK).

Python

Pour MySQL et Percona, le pilote mysql-connector-python :

import mysql.connector

conn = mysql.connector.connect(
    host='node{node_id}-{environment_name}.{domain}',
    user=user,
    password=password,
    database=dbname,
)

Pour MariaDB, le pilote officiel MariaDB Connector/Python est recommandé. L’interface est compatible dbapi :

import mariadb

conn = mariadb.connect(
    host='node{node_id}-{environment_name}.{domain}',
    user=user,
    password=password,
    database=dbname,
)

Les deux se connectent aussi au point ProxySQL pour les topologies en grappe.

Node.js

Le pilote mysql2 (recommandé pour Node.js courant) :

import mysql from 'mysql2/promise';

const conn = await mysql.createConnection({
  host: 'node{node_id}-{environment_name}.{domain}',
  user,
  password,
  database: dbname,
});

Pour des connexions en pool, utiliser mysql.createPool à la place — le pool mysql2 réutilise les connexions et gère les reconnexions.

Notes

  • Pas de localhost. Application et base sont sur des conteneurs distincts. La loopback n’est pas la base.
  • Identifiants par courriel. La plateforme envoie les identifiants root par courriel à la création du conteneur. Créer des utilisateurs applicatifs à privilèges moindres depuis le panneau d’administration (phpMyAdmin) plutôt que d’utiliser root depuis l’application.
  • TLS en transit. Pour les environnements où TLS entre l’application et la base est requis, installer le module Encryption in Transit. Le pilote aura alors besoin de l’option useSSL (Java), sslmode / ssl (PHP / Python) ou ssl (Node.js) appropriée.

Voir aussi