Connecteur MySQL / MariaDB 🐬
Sauvegarde une base MySQL ou MariaDB via
mysqldump(avec cohérence transactionnelle) et la restaure via le clientmysql. Chiffrement côté bridge.
- Image :
ilygo/bridge-mysql:8 - Sous-commande :
ilygo-bridge mysql - Outils embarqués :
mysqldump,mysql(client MariaDB, compatible MySQL 5.7/8.x et MariaDB 10.x)
Variables d'environnement
En plus des variables communes :
| Variable | Obligatoire | Description |
|---|---|---|
MYSQL_HOST |
oui | Hôte MySQL/MariaDB |
MYSQL_PORT |
non | Port (défaut 3306) |
MYSQL_USER |
oui | Utilisateur |
MYSQL_PASSWORD |
non | Mot de passe (passé via MYSQL_PWD, jamais en argument visible) |
MYSQL_DB |
oui | Nom de la base à sauvegarder |
Prérequis côté base
Créez un utilisateur de backup avec les privilèges minimaux :
CREATE USER 'ilygo_backup'@'%' IDENTIFIED BY 'un-mot-de-passe-fort';
GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT, PROCESS ON appdb.* TO 'ilygo_backup'@'%';
-- Pour la restauration (side_by_side / in_place) :
GRANT CREATE, DROP, INSERT, ALTER, REFERENCES, INDEX ON *.* TO 'ilygo_backup'@'%';
FLUSH PRIVILEGES;
PROCESSest requis pour--single-transactionsur certaines versions.EVENT/TRIGGERpour sauvegarder events et triggers.
Déploiement (docker-compose)
services:
app-db:
image: mariadb:11
networks: [app-net]
ilygo-bridge:
image: ilygo/bridge-mysql:8
restart: unless-stopped
networks: [app-net, default]
environment:
ILYGO_ENDPOINT: https://backup.example/api/v1
ILYGO_API_KEY: ik_xxx
ILYGO_PASSPHRASE: ${ILYGO_PASSPHRASE}
ILYGO_RESTORE_SECRET: 3f87d2022d95...
ILYGO_LABEL: prod-mysql
MYSQL_HOST: app-db
MYSQL_PORT: "3306"
MYSQL_USER: ilygo_backup
MYSQL_PASSWORD: ${MYSQL_BACKUP_PW}
MYSQL_DB: appdb
networks:
app-net:
internal: true
Mécanisme de backup
mysqldump --host=$MYSQL_HOST --port=$MYSQL_PORT --user=$MYSQL_USER \
--single-transaction --routines --triggers --events \
--default-character-set=utf8mb4 $MYSQL_DB
--single-transaction: snapshot cohérent sur les tables InnoDB, sans verrou bloquant.--routines --triggers --events: inclut procédures stockées, triggers, et events.- Le mot de passe transite par
MYSQL_PWD(jamais visible dans la liste des processus). - Sortie streamée → chunks chiffrés.
Mécanisme de restauration
Avec un RAT, le bridge déchiffre/décompresse le dump SQL, puis :
side_by_side (recommandé) :
CREATE DATABASE IF NOT EXISTS `appdb_restored` CHARACTER SET utf8mb4;
mysql --host=... --user=... appdb_restored < dump.sql
in_place (destructif, exige confirm_destructive) : le dump est rejoué directement dans MYSQL_DB. Le dump contient les DROP TABLE IF EXISTS / CREATE TABLE qui écrasent les tables existantes.
Réseau & sécurité
- Aucun port exposé par le bridge ; base sur réseau
internal: true. - Le mot de passe n'apparaît jamais en clair dans
ps(transmis viaMYSQL_PWD). - En prod :
read_only: true+tmpfs: /tmp+cap_drop: [ALL].
Dépannage
| Symptôme | Cause | Solution |
|---|---|---|
Access denied for user |
privilèges insuffisants | Appliquez les GRANT ci-dessus |
Couldn't execute 'SHOW EVENTS' |
privilège EVENT manquant |
GRANT EVENT ON appdb.* |
Unknown database au restore |
base cible absente (in_place) | Utilisez side_by_side ou créez la base |
| caractères corrompus | charset | Le connecteur force utf8mb4 ; vérifiez la collation de la base cible |
Limites & roadmap
- v1 : dump logique
mysqldump. Adapté aux bases petites/moyennes. - Roadmap : intégration
xtrabackup(backup physique hot, incrémental) pour les très grosses bases.