[{"data":1,"prerenderedAt":152},["ShallowReactive",2],{"seo-verification":3,"blog-heberger-mysql-vps-ma-fr":6,"promo-bar-likely":151},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-heberger-mysql-vps-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":35,"sections":36,"ctaTitle":94,"ctaBody":95,"ctaButton":96,"ctaUrl":97,"relatedPosts":98},57,"heberger-mysql-vps",{"fr":10,"en":12,"ar":13,"es":14},"hosting-mysql-on-a-vps","استضافة-mysql-على-خادم-vps","alojar-mysql-en-un-vps","Héberger MySQL sur un VPS : guide complet","Installez MySQL 8.4 LTS sur un VPS : prérequis, sécurisation, performances InnoDB, accès distant sécurisé, sauvegardes automatisées et dépannage.",9,0,false,"2026-04-24T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},6,"Bases de données","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-mysql-vps-poster.svg",{"categorySlug":25,"appSlug":34},"mysql-stack","MySQL fait tourner une immense partie du web : WordPress, Magento, Laravel et des milliers d'applications PHP. L'auto-héberger sur un VPS vous offre des performances dédiées, un contrôle complet de la configuration InnoDB et des coûts maîtrisés, loin des limites des hébergements mutualisés.",[37,41,51,54,76,79,82,85,88,91],{"type":38,"title":39,"body":40},"h2","Pourquoi auto-héberger MySQL sur un VPS","Sur un hébergement mutualisé, votre base MySQL partage la RAM et l'I\u002FO avec des centaines d'autres sites, et vous ne pouvez modifier ni `innodb_buffer_pool_size`, ni les modes SQL, ni la version du moteur. Sur un VPS, vous disposez de ressources dédiées, vous choisissez entre MySQL 8.4 LTS et MariaDB, et vous accédez au fichier `my.cnf` pour optimiser chaque paramètre. C'est le bon choix pour une boutique e-commerce, un CMS à fort trafic ou une API qui a besoin de transactions rapides et d'un buffer pool généreux. Vous gérez aussi vos propres utilisateurs, vos grants au niveau table, et votre stratégie de réplication maître-esclave.",{"type":42,"title":43,"items":44},"ul","Les bénéfices concrets d'un MySQL auto-hébergé",[45,46,47,48,49,50],"Ressources dédiées : tout le buffer pool InnoDB pour vos données, sans voisins bruyants.","Accès complet à `my.cnf` : `innodb_buffer_pool_size`, `max_connections`, modes SQL stricts.","Choix du moteur : MySQL 8.4 LTS pour la stabilité long terme, ou MariaDB pour ses moteurs additionnels.","Réplication maître-esclave configurable pour la lecture déportée ou la reprise après incident.","Backups logiques (`mysqldump`) ou physiques (`xtrabackup`) selon votre volume.","Pas de quota arbitraire sur la taille des bases ou le nombre de connexions simultanées.",{"type":38,"title":52,"body":53},"Prérequis chiffrés avant de commencer","**Version recommandée :** MySQL 8.4 LTS (version actuelle : 8.4.11), la branche LTS officielle, stable jusqu'en 2032. Évitez MySQL 8.0 sur de nouvelles installations : son support actif se termine en 2025.\n\n**RAM :** 1 Go minimum pour un environnement de test ou un blog léger. Comptez **2 Go** pour un WordPress ou une petite application en production, et **4 à 8 Go** pour Magento, PrestaShop ou une API à fort trafic. La règle de base : allouez 60 à 70 % de la RAM disponible à `innodb_buffer_pool_size`.\n\n**CPU :** 2 vCPU suffisent pour la majorité des cas. Montez à 4 vCPU dès que vos requêtes sont nombreuses ou que vous activez la réplication.\n\n**Stockage :** 30 Go de SSD NVMe comme point de départ ; réservez de l'espace supplémentaire pour les binlogs si vous activez la réplication ou la restauration point-in-time.\n\n**Ports :** MySQL écoute par défaut sur le port **3306**. Ce port ne doit **jamais** être ouvert sur l'interface publique. Le paramètre `bind-address` dans `my.cnf` doit pointer sur `127.0.0.1` ou sur l'adresse du réseau privé inter-VPS, pas sur `0.0.0.0`.\n\n**Système :** Ubuntu 22.04 ou 24.04 LTS, Docker et Docker Compose v2, un volume persistant dédié.",{"type":55,"title":56,"steps":57},"steps","Déployer MySQL 8.4 avec Docker en production",[58,61,64,67,70,73],{"title":59,"body":60},"Sécuriser le VPS","Mettez le système à jour (`apt update && apt upgrade -y`), installez Docker, désactivez la connexion SSH par mot de passe au profit des clés (`PasswordAuthentication no` dans `sshd_config`), et fermez le port 3306 vers l'extérieur :\n```bash\nufw deny 3306\nufw allow OpenSSH\nufw enable\n```\nMySQL ne doit écouter que sur le réseau interne du conteneur Docker.",{"title":62,"body":63},"Définir le docker-compose.yml","Déclarez un service `mysql:8.4`, montez un volume sur `\u002Fvar\u002Flib\u002Fmysql`, et passez les variables d'environnement via un fichier `.env` :\n```bash\n# .env\nMYSQL_ROOT_PASSWORD=motdepasse_root_fort\nMYSQL_DATABASE=ma_base\nMYSQL_USER=app_user\nMYSQL_PASSWORD=motdepasse_app\n```\n```bash\n# docker-compose.yml\nservices:\n  mysql:\n    image: mysql:8.4\n    restart: unless-stopped\n    env_file: .env\n    volumes:\n      - mysql_data:\u002Fvar\u002Flib\u002Fmysql\n      - .\u002Fconf.d:\u002Fetc\u002Fmysql\u002Fconf.d:ro\n    ports:\n      - \"127.0.0.1:3306:3306\"\nvolumes:\n  mysql_data:\n```\nNotez le `bind` sur `127.0.0.1` dans `ports` : le port ne sera accessible que depuis le VPS lui-même.",{"title":65,"body":66},"Créer une base et un utilisateur dédié","Après `docker compose up -d`, connectez-vous au conteneur :\n```bash\ndocker exec -it mysql mysql -u root -p\n```\nCréez ensuite la base et l'utilisateur applicatif :\n```bash\nCREATE DATABASE ma_base CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'app_user'@'%' IDENTIFIED BY 'motdepasse_app';\nGRANT SELECT, INSERT, UPDATE, DELETE ON ma_base.* TO 'app_user'@'%';\nFLUSH PRIVILEGES;\n```\nLimitez les grants au strict nécessaire : jamais `GRANT ALL PRIVILEGES` pour un compte applicatif.",{"title":68,"body":69},"Durcir l'installation","Exécutez l'équivalent de `mysql_secure_installation` manuellement :\n```bash\n-- Supprimer les utilisateurs anonymes\nDELETE FROM mysql.user WHERE User='';\n-- Interdire le login root distant\nDELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');\n-- Supprimer la base de test\nDROP DATABASE IF EXISTS test;\nFLUSH PRIVILEGES;\n```\nN'utilisez jamais le compte `root` depuis votre application. Vérifiez que `bind-address = 127.0.0.1` est bien présent dans votre `conf.d\u002Fcustom.cnf`.",{"title":71,"body":72},"Exposer en TLS si nécessaire","Si une application externe doit se connecter à distance, ne jamais exposer le port 3306 directement sur Internet. Utilisez un **tunnel SSH** :\n```bash\nssh -L 3306:127.0.0.1:3306 user@votre-vps.com -N\n```\nLa connexion depuis votre poste cible alors `127.0.0.1:3306`, chiffrée par SSH. Pour un accès inter-VPS permanent, configurez un réseau privé entre vos serveurs et laissez MySQL écouter uniquement sur cette interface privée. Activez le chiffrement TLS natif MySQL uniquement pour les connexions applicatives qui traversent ce réseau privé.",{"title":74,"body":75},"Planifier les sauvegardes","Programmez un `mysqldump --single-transaction` quotidien via cron pour des dumps cohérents sans verrou :\n```bash\n# \u002Fetc\u002Fcron.d\u002Fmysql-backup\n0 2 * * * root docker exec mysql mysqldump -u root -p\"${MYSQL_ROOT_PASSWORD}\" --single-transaction --all-databases | gzip > \u002Fbackups\u002Fmysql-$(date +\\%Y\\%m\\%d).sql.gz\n```\nConservez au moins 7 jours de rétention, et **archivez les dumps hors du VPS** (stockage objet, SFTP distant). Testez la restauration une fois par mois : un backup non testé n'est pas un backup. Pour les grosses bases, basculez sur Percona XtraBackup pour des sauvegardes physiques rapides sans interrompre le service.",{"type":38,"title":77,"body":78},"Sécurisation : les gestes indispensables","**`mysql_secure_installation` en conteneur.** L'image Docker officielle ne l'exécute pas automatiquement : faites-le à la main après le premier démarrage (étape 4 ci-dessus).\n\n**Suppression du root distant.** Le compte `root` ne doit être accessible que depuis `localhost`. Un compte root accessible depuis `%` est la première faille exploitée lors d'un scan de ports.\n\n**Utilisateur dédié par application.** Chaque application connectée reçoit son propre compte MySQL avec des droits restreints à sa propre base. Une application compromise ne peut alors pas lire ni modifier les données des autres.\n\n**UFW + bind-address.** La double protection est obligatoire : `ufw deny 3306` au niveau du pare-feu système, et `bind-address = 127.0.0.1` dans `my.cnf` côté MySQL. L'une ne dispense pas de l'autre.\n\n**Mots de passe forts.** Utilisez `caching_sha2_password` (plugin par défaut sous MySQL 8.x) et des mots de passe générés (au moins 20 caractères, alphanumérique + symboles). Stockez-les dans des secrets gérés, jamais dans le code source.",{"type":38,"title":80,"body":81},"Optimiser les performances InnoDB","Ces paramètres s'ajoutent dans votre fichier `conf.d\u002Fcustom.cnf` monté en lecture seule dans le conteneur.\n\n**`innodb_buffer_pool_size`** : paramètre le plus important. Réglez-le à 60–70 % de la RAM du VPS. Sur un VPS de 4 Go, comptez 2,5 à 2,8 Go. Trop petit = lectures disque fréquentes ; trop grand = swap.\n\n**`innodb_flush_log_at_trx_commit`** : la valeur `2` offre un bon compromis performance \u002F durabilité pour la plupart des applications. La valeur `1` (par défaut) est plus sûre mais plus lente ; la valeur `0` est la plus rapide mais risquée en cas de crash.\n\n**`max_connections`** : ajustez selon votre charge réelle. La valeur par défaut (151) est souvent trop basse pour une application à fort trafic, trop haute pour un petit blog. Chaque connexion consomme ~1 Mo de RAM, tenez-en compte.\n\n**`slow_query_log`** : activez-le avec `slow_query_log = 1` et `long_query_time = 1` pour capturer toutes les requêtes dépassant 1 seconde. C'est votre premier outil d'optimisation.\n\nExemple de `custom.cnf` pour un VPS de 4 Go :\n```bash\n[mysqld]\ninnodb_buffer_pool_size = 2G\ninnodb_flush_log_at_trx_commit = 2\nmax_connections = 200\nslow_query_log = 1\nlong_query_time = 1\nlog_bin = \u002Fvar\u002Flib\u002Fmysql\u002Fbinlog\nbinlog_format = ROW\n```",{"type":38,"title":83,"body":84},"Accès distant sécurisé : le tunnel SSH","Exposer le port 3306 sur l'interface publique de votre VPS est une erreur de sécurité grave : les scanners automatisés tentent des attaques par force brute sur ce port en permanence. La bonne pratique est le tunnel SSH.\n\n**Connexion ponctuelle depuis votre poste :**\n```bash\nssh -L 3306:127.0.0.1:3306 user@votre-vps.com -N\n```\nOuvrez ensuite votre client MySQL sur `127.0.0.1:3306` — le trafic transite chiffré par SSH.\n\n**Connexion permanente inter-VPS :** si votre application tourne sur un second VPS du même réseau privé, configurez MySQL pour écouter sur l'adresse réseau privée uniquement (`bind-address = 10.0.0.X`), et autorisez uniquement l'IP du serveur applicatif dans UFW :\n```bash\nufw allow from 10.0.0.5 to any port 3306\n```\n\n**À proscrire :** `bind-address = 0.0.0.0` sans pare-feu, port 3306 ouvert en public, ou comptes MySQL avec `Host='%'` sans restriction IP.",{"type":38,"title":86,"body":87},"Sauvegardes automatisées : stratégie complète","Une stratégie de sauvegarde MySQL repose sur deux niveaux complémentaires.\n\n**Niveau 1 — dump logique quotidien (`mysqldump`) :** cohérent grâce à `--single-transaction` (pas de verrou en lecture sur InnoDB), portable entre versions. Convient aux bases jusqu'à quelques dizaines de Go.\n\n**Niveau 2 — binlogs pour la restauration point-in-time :** activez `log_bin` dès le départ. Combinés à un dump hebdomadaire complet, les binlogs permettent de rejouer chaque transaction jusqu'à la seconde précédant un incident.\n\n**Pour les grandes bases — Percona XtraBackup :** sauvegarde physique sans interrompre le service, restauration rapide (copie de fichiers plutôt que re-exécution SQL).\n\n**Rétention et archivage :** ne stockez pas les sauvegardes uniquement sur le VPS. Un VPS corrompu emporte ses propres backups. Exportez vers un stockage objet ou un serveur SFTP distant, et conservez au minimum 7 jours.\n\n**Tester la restauration :** un backup non testé n'est pas un backup. Planifiez un test mensuel : restaurez sur un conteneur temporaire et vérifiez que vos données sont intactes.\n\n```bash\n# Restauration depuis un dump compressé\nzcat \u002Fbackups\u002Fmysql-20260917.sql.gz | docker exec -i mysql mysql -u root -p\n```",{"type":38,"title":89,"body":90},"Dépannage : 5 erreurs fréquentes","**`Access denied for user 'app'@'...'`**\nLe compte existe mais le `Host` ne correspond pas. MySQL vérifie l'IP source exacte. Si l'application se connecte depuis un conteneur Docker, l'IP source peut être `172.17.0.x` et non `localhost`. Vérifiez avec :\n```bash\nSELECT User, Host FROM mysql.user;\n```\nSolution : créez le compte avec `'app_user'@'%'` (ou l'IP exacte du conteneur) et relancez `FLUSH PRIVILEGES`.\n\n**`Too many connections`**\n`max_connections` est atteint. Vérifiez le nombre de connexions actives avec :\n```bash\nSHOW STATUS LIKE 'Threads_connected';\n```\nAugmentez `max_connections` dans `custom.cnf` **et** vérifiez que votre application utilise un pool de connexions (pas une nouvelle connexion par requête).\n\n**`Table '...' is marked as crashed`**\nCorruption InnoDB, souvent après un arrêt brutal. Tentez une réparation :\n```bash\nmysqlcheck -u root -p --auto-repair --all-databases\n```\nSi la table ne se répare pas, restaurez depuis votre dernier backup cohérent. C'est pour cela qu'un backup testé est obligatoire.\n\n**`Can't connect to MySQL server on '127.0.0.1' (111)`**\nMySQL n'écoute pas sur l'interface attendue. Vérifiez `bind-address` dans `custom.cnf` et relancez le conteneur. Vérifiez aussi que le conteneur est bien démarré avec `docker compose ps`.\n\n**`ERROR 1819 (HY000): Your password does not satisfy the current policy`**\nLe plugin de validation de mot de passe MySQL 8 refuse les mots de passe trop simples. Utilisez un mot de passe d'au moins 8 caractères avec majuscules, chiffres et symboles, ou ajustez `validate_password.policy = LOW` dans `custom.cnf` pour un environnement de développement uniquement.",{"type":92,"body":93},"tip","Activez les binlogs (`log_bin` + `binlog_format=ROW`) dès le départ : ils sont la clé de la restauration point-in-time. Combinés à un `mysqldump` complet hebdomadaire, ils permettent de rejouer toutes les transactions jusqu'à la seconde précédant un incident. Et si vous montez un esclave en réplication sur un second VPS, ces mêmes binlogs alimentent la réplica en temps réel pour vos lectures déportées.","Hébergez votre MySQL sur un VPS performant","Le VPS Cloud ServOrbit avec template Docker prêt à l'emploi vous offre du stockage SSD et des ressources chiffrées par offre pour faire tourner MySQL.","Lancer mon VPS Cloud","\u002Fapplications\u002Fbases-de-donnees\u002Fmysql-stack",[99,117,135],{"id":100,"slug":101,"slugs":102,"title":106,"excerpt":107,"readTime":17,"views":108,"isPinned":19,"noindex":19,"publishedAt":109,"updatedAt":110,"category":111,"categories":112,"featuredImage":30,"bgImage":31,"posterImage":114,"relatedSolution":115},56,"heberger-postgresql-vps",{"fr":101,"en":103,"ar":104,"es":105},"postgresql-on-a-vps-a-reliable-and-controlled-database","postgresql-على-خادم-vps-قاعدة-بيانات-موثوقة-ومتحكم-بها","alojar-postgresql-en-un-vps","PostgreSQL sur VPS : base fiable et contrôlée","Hébergez PostgreSQL sur VPS : configuration prod, sauvegardes pgBackRest, haute disponibilité streaming, comparatif RDS\u002FSupabase\u002FNeon et dépannage OOM.",1,"2026-04-25T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[113],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":25,"appSlug":116},"postgresql-stack",{"id":118,"slug":119,"slugs":120,"title":124,"excerpt":125,"readTime":126,"views":18,"isPinned":19,"noindex":19,"publishedAt":127,"updatedAt":128,"category":129,"categories":130,"featuredImage":30,"bgImage":31,"posterImage":132,"relatedSolution":133},58,"heberger-redis-vps",{"fr":119,"en":121,"ar":122,"es":123},"hosting-redis-on-a-vps","استضافة-redis-على-خادم-vps","alojar-redis-en-un-vps","Héberger Redis sur un VPS : guide complet","Déployez Redis sur votre VPS Cloud : prérequis RAM\u002FCPU, sécurité (ACL, TLS), persistance RDB\u002FAOF, dépannage et haute disponibilité.",10,"2026-04-23T00:00:00+00:00","2026-09-08T21:59:59+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[131],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-redis-vps-poster.svg",{"categorySlug":25,"appSlug":134},"redis-stack",{"id":136,"slug":137,"slugs":138,"title":142,"excerpt":143,"readTime":144,"views":18,"isPinned":19,"noindex":19,"publishedAt":145,"updatedAt":146,"category":147,"categories":148,"featuredImage":30,"bgImage":31,"posterImage":150,"relatedSolution":30},59,"heberger-mongodb-vps",{"fr":137,"en":139,"ar":140,"es":141},"hosting-mongodb-on-a-vps","استضافة-mongodb-على-خادم-vps","alojar-mongodb-en-un-vps","Héberger MongoDB sur un VPS","Hébergez MongoDB sur votre VPS Cloud : déploiement Docker, replica set, authentification, indexation et sauvegardes maîtrisées.",3,"2026-04-22T00:00:00+00:00","2026-09-08T22:00:02+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[149],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-mongodb-vps-poster.svg",true,1794270726183]