Intégration Base de données
💾 Guide d'Intégration Base de Données - Admin Menu v2.0
Auteur: ProtoMehka Version: 2.0 Framework: Altis Life 5.0+
📖 Introduction
Ce guide détaille la configuration de la base de données pour le menu admin v2.0. Il couvre :
- La table
admin_logspour l'historique des actions - Les modifications de la structure existante
- Les requêtes SQL nécessaires
Prérequis :
- Base de données MySQL/MariaDB fonctionnelle
- Accès phpMyAdmin ou ligne de commande MySQL
- Table
playersexistante
🗄️ Structure de la Base de Données
Table: admin_logs
Cette table enregistre toutes les actions effectuées par les admins.
Schéma Complet
CREATE TABLE IF NOT EXISTS `admin_logs` (
`id` INT NOT NULL AUTO_INCREMENT,
`pid` VARCHAR(17) NOT NULL,
`player_name` VARCHAR(32) NOT NULL,
`target` VARCHAR(64) DEFAULT NULL,
`execution_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`command` VARCHAR(64) NOT NULL,
`details` TEXT,
PRIMARY KEY (`id`),
INDEX `index_pid` (`pid`),
INDEX `index_command` (`command`),
INDEX `index_execution_time` (`execution_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Description des Colonnes
| Colonne | Type | Nullable | Description |
|---|---|---|---|
id |
INT | Non | ID unique auto-incrémenté |
pid |
VARCHAR(17) | Non | Steam ID de l'admin (76561198...) |
player_name |
VARCHAR(32) | Non | Nom du joueur admin |
target |
VARCHAR(64) | Oui | Nom du joueur ciblé (si applicable) |
execution_time |
TIMESTAMP | Non | Date/heure de l'action (auto) |
command |
VARCHAR(64) | Non | Type d'action (TELEPORT, GODMODE, etc.) |
details |
TEXT | Oui | Informations additionnelles (coordonnées, montant, etc.) |
Index
- PRIMARY KEY sur
id: Identifiant unique - INDEX sur
pid: Recherche rapide par admin - INDEX sur
command: Filtrage par type d'action - INDEX sur
execution_time: Tri chronologique optimisé
🚀 Installation
Méthode 1: Script SQL Complet
Fichier : altislife.sql (fourni)
Exécutez le fichier SQL complet qui contient la table admin_logs avec toutes les autres tables du serveur.
Via phpMyAdmin :
- Sélectionner la base de données
- Onglet "Importer"
- Choisir
altislife.sql - Cliquer "Exécuter"
Via ligne de commande :
mysql -u username -p database_name < altislife.sql
Méthode 2: Ajout Manuel de la Table
Si vous avez déjà une base de données existante :
CREATE TABLE IF NOT EXISTS `admin_logs` (
`id` INT NOT NULL AUTO_INCREMENT,
`pid` VARCHAR(17) NOT NULL,
`player_name` VARCHAR(32) NOT NULL,
`target` VARCHAR(64) DEFAULT NULL,
`execution_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`command` VARCHAR(64) NOT NULL,
`details` TEXT,
PRIMARY KEY (`id`),
INDEX `index_pid` (`pid`),
INDEX `index_command` (`command`),
INDEX `index_execution_time` (`execution_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
📊 Types d'Actions Loggées
Liste des Commandes
| Commande | Cible | Détails | Exemple |
|---|---|---|---|
COMPENSATE |
Nom joueur | Montant | Amount: $50000 |
TELEPORT |
- | Coordonnées | X:3612 Y:13138 |
TP_HERE |
Nom joueur | - | - |
GODMODE |
- | État | ON ou OFF |
FREEZE |
Nom joueur | - | - |
SPECTATE |
Nom joueur | - | - |
REPAIR_OBJECT |
- | Type objet | Type: C_Offroad_01_F |
DELETE_OBJECT |
- | Type objet | Type: C_Offroad_01_F |
SERVER_MESSAGE |
- | Message | Texte du message |
Exemples de Données
-- Teleport
INSERT INTO admin_logs (pid, player_name, command, target, details)
VALUES ('76561198012345678', 'AdminName', 'TELEPORT', NULL, 'X:3612 Y:13138');
-- Compensation
INSERT INTO admin_logs (pid, player_name, command, target, details)
VALUES ('76561198012345678', 'AdminName', 'COMPENSATE', 'PlayerName', 'Amount: $50000');
-- GodMode ON
INSERT INTO admin_logs (pid, player_name, command, target, details)
VALUES ('76561198012345678', 'AdminName', 'GODMODE', NULL, 'ON');
-- Freeze Player
INSERT INTO admin_logs (pid, player_name, command, target, details)
VALUES ('76561198012345678', 'AdminName', 'FREEZE', 'TargetPlayer', NULL);
🔍 Requêtes Utiles
Voir les Dernières Actions
SELECT
id,
player_name AS Admin,
command AS Action,
target AS Cible,
details AS Détails,
execution_time AS Date
FROM admin_logs
ORDER BY execution_time DESC
LIMIT 50;
Filtrer par Admin
SELECT * FROM admin_logs
WHERE pid = '76561198012345678'
ORDER BY execution_time DESC;
Filtrer par Type d'Action
SELECT * FROM admin_logs
WHERE command = 'TELEPORT'
ORDER BY execution_time DESC
LIMIT 20;
Actions sur un Joueur Spécifique
SELECT * FROM admin_logs
WHERE target = 'PlayerName'
ORDER BY execution_time DESC;
Statistiques par Admin
SELECT
player_name AS Admin,
COUNT(*) AS Total_Actions,
COUNT(DISTINCT command) AS Types_Actions
FROM admin_logs
GROUP BY player_name
ORDER BY Total_Actions DESC;
Statistiques par Type d'Action
SELECT
command AS Action,
COUNT(*) AS Nombre
FROM admin_logs
GROUP BY command
ORDER BY Nombre DESC;
Actions des Dernières 24h
SELECT * FROM admin_logs
WHERE execution_time >= NOW() - INTERVAL 24 HOUR
ORDER BY execution_time DESC;
🗑️ Maintenance
Nettoyage des Vieux Logs
Pour éviter que la table ne devienne trop volumineuse :
Supprimer les logs de plus de 30 jours :
DELETE FROM admin_logs
WHERE execution_time < NOW() - INTERVAL 30 DAY;
Supprimer les logs de plus de 90 jours :
DELETE FROM admin_logs
WHERE execution_time < NOW() - INTERVAL 90 DAY;
Archivage (Recommandé)
Au lieu de supprimer, créer une table d'archive :
-- Créer la table d'archive
CREATE TABLE IF NOT EXISTS `admin_logs_archive` LIKE `admin_logs`;
-- Copier les vieux logs
INSERT INTO admin_logs_archive
SELECT * FROM admin_logs
WHERE execution_time < NOW() - INTERVAL 90 DAY;
-- Supprimer de la table principale
DELETE FROM admin_logs
WHERE execution_time < NOW() - INTERVAL 90 DAY;
Optimisation de la Table
Après de nombreux suppressions :
OPTIMIZE TABLE admin_logs;
📈 Surveillance
Taille de la Table
SELECT
table_name AS `Table`,
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS `Size (MB)`
FROM information_schema.TABLES
WHERE table_schema = 'altislife'
AND table_name = 'admin_logs';
Nombre de Logs
SELECT COUNT(*) AS Total_Logs FROM admin_logs;
Logs par Jour (7 derniers jours)
SELECT
DATE(execution_time) AS Jour,
COUNT(*) AS Nombre_Actions
FROM admin_logs
WHERE execution_time >= NOW() - INTERVAL 7 DAY
GROUP BY DATE(execution_time)
ORDER BY Jour DESC;
🔐 Sécurité
Permissions Recommandées
L'utilisateur MySQL du serveur Arma devrait avoir uniquement :
GRANT SELECT, INSERT ON altislife.admin_logs TO 'arma_user'@'localhost';
Ne pas donner :
- ❌
DELETE- Pour éviter suppression accidentelle - ❌
UPDATE- Les logs ne doivent jamais être modifiés - ❌
DROP- Protection contre suppression de table
Sauvegarde
Sauvegarder régulièrement la table :
mysqldump -u username -p altislife admin_logs > admin_logs_backup_$(date +%Y%m%d).sql
Restaurer depuis une sauvegarde :
mysql -u username -p altislife < admin_logs_backup_20251007.sql
🧪 Tests
Test 1: Création de la Table
SHOW CREATE TABLE admin_logs;
Résultat attendu : Affiche la structure complète de la table
Test 2: Insertion Manuelle
INSERT INTO admin_logs (pid, player_name, command, target, details)
VALUES ('76561198012345678', 'TestAdmin', 'TEST', 'TestTarget', 'Test details');
Vérification :
SELECT * FROM admin_logs WHERE command = 'TEST';
Test 3: Requête de Lecture
SELECT * FROM admin_logs ORDER BY execution_time DESC LIMIT 10;
Résultat attendu : Les 10 derniers logs
🐛 Troubleshooting
Erreur: "Table 'altislife.admin_logs' doesn't exist"
Solution :
CREATE TABLE IF NOT EXISTS `admin_logs` (
-- ... (voir structure complète ci-dessus)
);
Erreur: "Unknown column 'values' in 'field list'"
Cause : Ancienne version qui utilisait values au lieu de details
Solution :
ALTER TABLE admin_logs CHANGE `values` `details` TEXT;
Erreur: "Incorrect string value" (UTF-8)
Solution :
ALTER TABLE admin_logs CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Table Corrompue
Vérification :
CHECK TABLE admin_logs;
Réparation :
REPAIR TABLE admin_logs;
✅ Checklist d'Installation
☐ Table admin_logs créée
☐ Index créés (pid, command, execution_time)
☐ Charset utf8mb4 configuré
☐ Permissions utilisateur correctes
☐ Sauvegarde configurée
☐ Test d'insertion réussi
☐ Test de lecture réussi
📞 Support
Problèmes fréquents :
- 🔍 Vérifier que la table existe :
SHOW TABLES LIKE 'admin_logs'; - 🔍 Vérifier la structure :
DESCRIBE admin_logs; - 🔍 Vérifier les permissions :
SHOW GRANTS FOR CURRENT_USER;
Documentation :
- INTEGRATION_GUIDE.md - Partie client
- INTEGRATION_SERVER.md - Partie serveur
- README.md - Vue d'ensemble
📊 Exemple de Rapport
Rapport Hebdomadaire
SELECT
player_name AS Admin,
command AS Action,
COUNT(*) AS Total,
DATE(execution_time) AS Jour
FROM admin_logs
WHERE execution_time >= NOW() - INTERVAL 7 DAY
GROUP BY player_name, command, DATE(execution_time)
ORDER BY execution_time DESC;
Top 10 Admins Actifs
SELECT
player_name AS Admin,
COUNT(*) AS Total_Actions
FROM admin_logs
WHERE execution_time >= NOW() - INTERVAL 30 DAY
GROUP BY player_name
ORDER BY Total_Actions DESC
LIMIT 10;
Installation base de données terminée ! 🎉
Le système de logging est maintenant complètement opérationnel.