-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexport.php
More file actions
73 lines (62 loc) · 2.25 KB
/
export.php
File metadata and controls
73 lines (62 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
// ==== LOAD ENV ====
$envFile = __DIR__ . '/.env';
if (!file_exists($envFile)) {
exit("❌ .env file not found at: $envFile\n");
}
$env = parse_ini_file($envFile);
// ==== CONFIG ====
$db_name = $env['DB_NAME'] ?? 'local';
$db_user = $env['DB_USER'] ?? 'root';
$db_pass = $env['DB_PASS'] ?? '';
$db_host = $env['DB_HOST'] ?? 'localhost';
$db_port = $env['DB_PORT'] ?? 3306;
$db_dir = __DIR__ . '/db';
$latest_path = $db_dir . '/latest.sql';
$backup_dir = $db_dir . '/backup/' . $db_port . '_' . date('y-m-d_H-i-s') . '_backup';
$max_backups = 3; // keep only latest 3 backups
// ==== CREATE DIRECTORIES ====
foreach ([$db_dir, $db_dir . '/backup', $backup_dir] as $dir) {
if (!is_dir($dir)) {
if (!mkdir($dir, 0755, true)) {
exit("❌ Failed to create directory: $dir\n");
}
}
}
// ==== EXPORT FUNCTION ====
function exportDatabase($host, $port, $user, $pass, $name, $outputPath) {
$baseCmd = "mysqldump -h $host -P $port -u $user";
$baseCmd .= ($pass === '') ? " $name" : " -p$pass $name";
$command = "$baseCmd > \"$outputPath\"";
exec($command, $output, $return_var);
return $return_var === 0;
}
// ==== EXPORT LATEST ====
echo "🟡 Exporting latest database snapshot: $latest_path\n";
if (exportDatabase($db_host, $db_port, $db_user, $db_pass, $db_name, $latest_path)) {
echo "✅ Latest database export successful.\n";
} else {
exit("❌ Latest database export failed.\n");
}
// ==== EXPORT BACKUP ====
$backupFile = $backup_dir . '/backup.sql';
echo "🟡 Creating backup: $backupFile\n";
if (exportDatabase($db_host, $db_port, $db_user, $db_pass, $db_name, $backupFile)) {
echo "✅ Backup created successfully.\n";
} else {
echo "❌ Backup creation failed.\n";
}
// ==== CLEANUP OLD BACKUPS ====
$backupFolders = glob($db_dir . '/backup/*', GLOB_ONLYDIR);
usort($backupFolders, function($a, $b) {
return filemtime($b) <=> filemtime($a); // newest first
});
if (count($backupFolders) > $max_backups) {
$oldFolders = array_slice($backupFolders, $max_backups);
foreach ($oldFolders as $folder) {
array_map('unlink', glob("$folder/*.*"));
rmdir($folder);
echo "🗑️ Deleted old backup folder: $folder\n";
}
}
echo "🎉 Backup process completed hi.\n";