Pterodactyl - Optimisation MariaDB pour HuskSync (Docker / Pterodactyl)
Objectif
Éliminer les erreurs du type :
Failed to validate connection (... Connection.setNetworkTimeout cannot be called on a closed connection)
en synchronisant les timeouts entre MariaDB et Hikari (HuskSync).
Configuration MariaDB (.my.cnf)
📁 Fichier :
/home/container/.my.cnf
[client]
user = root
socket = /home/container/mysql/mysqld.sock
port = 8006
default-character-set = utf8mb4
[mysqld]
bind-address = 0.0.0.0
port = 8006
skip-name-resolve
# Timeouts réseau
net_read_timeout = 120
net_write_timeout = 120
connect_timeout = 30
wait_timeout = 300
interactive_timeout = 300
# Connexions et buffers
max_connections = 400
max_allowed_packet = 64M
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# InnoDB (adapte à la RAM du conteneur)
innodb_buffer_pool_size = 512M
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2
innodb_flush_neighbors = 0
# Logs
slow_query_log = ON
slow_query_log_file = /home/container/log/mysql/mariadb-slow.log
long_query_time = 10
log_error = /home/container/log/mysql/error.log
expire_logs_days = 10
# Fichiers runtime
socket = /home/container/mysql/mysqld.sock
pid-file = /home/container/mysql/mysqld.pid
datadir = /home/container/mysql
Permissions
chmod 644 /home/container/.my.cnf
Lancement MariaDB
Assure-toi d’utiliser ce fichier au démarrage :
/usr/sbin/mysqld --defaults-file=/home/container/.my.cnf --socket=/home/container/mysql/mysqld.sock --pid-file=/home/container/mysql/mysqld.pid --datadir=/home/container/mysql --port=${SERVER_PORT} &
Configuration HuskSync
Fichier :
plugins/HuskSync/config.yml
database:
type: MARIADB
credentials:
host: 153.31.100.0
port: 8006
database: username
username: database_name
password: password
parameters: >
?useSSL=false
&useUnicode=true
&characterEncoding=UTF-8
&socketTimeout=120000
&connectTimeout=10000
&tcpKeepAlive=true
connection_pool:
maximum_pool_size: 8
minimum_idle: 2
maximum_lifetime: 240000 # 4 min (< wait_timeout DB = 300s)
keepalive_time: 120000 # 2 min (ping régulier)
connection_timeout: 10000
Explication
| Paramètre | Côté | Description |
|---|---|---|
wait_timeout |
MariaDB | Ferme les connexions inactives après 5 min |
maximum_lifetime |
Hikari | Recycle les connexions avant la fermeture DB |
keepalive_time |
Hikari | Envoie un ping pour garder les connexions vivantes |
socketTimeout |
JDBC | Aligne le timeout de lecture réseau sur la DB |
Vérification rapide
Connecte-toi à MariaDB :
mysql -u root --socket=/home/container/mysql/mysqld.sock -P 8006
Puis exécute :
SHOW VARIABLES WHERE Variable_name IN
('wait_timeout','interactive_timeout','net_read_timeout','net_write_timeout');
(Optionnel) Modifier en live
Si tu veux tester sans redémarrer :
SET GLOBAL wait_timeout=300;
SET GLOBAL interactive_timeout=300;
SET GLOBAL net_read_timeout=120;
SET GLOBAL net_write_timeout=120;
Résultat attendu :
| Variable_name | Value |
|---|---|
| wait_timeout | 300 |
| interactive_timeout | 300 |
| net_read_timeout | 120 |
| net_write_timeout | 120 |
Vérifier les connexions et erreurs
Liste des connexions actives
SHOW FULL PROCESSLIST;
- Observe la colonne Command : les connexions
Sleepsont inactives. - Trop de
Sleep→ tes plugins gardent des connexions ouvertes inutilement.
➤ Diminueminimum_idledans leurs configs.
Vérifier les connexions abandonnées
SHOW GLOBAL STATUS LIKE 'Aborted_connects';
- Ce compteur doit rester très bas (0 ou quelques unités).
- S’il grimpe vite → timeouts ou crashs côté plugin.
Vérifier le nombre de connexions max
SHOW VARIABLES LIKE 'max_connections';
5. Résultat attendu
✅ Plus de warnings du type
Failed to validate connection (Connection.setNetworkTimeout...)
✅ Des connexions stables entre tous les plugins.
✅ Moins de connexions “Sleep”.
✅ Aborted_connects reste bas.
À appliquer aussi sur les autres plugins
maximum_pool_size: 5–10minimum_idle: 1–2maximum_lifetime: 240000keepalive_time: 120000connection_timeout: 10000
Rappel clé :
Toujours faire correspondre
maximum_lifetime(Hikari) à une valeur inférieure àwait_timeout(MariaDB).
Ainsi, c’est le pool qui gère le recyclage, pas la base qui coupe brutalement.
📅 Dernière mise à jour : 2025-11-02