Commit 2b37a47a authored by platyhouse's avatar platyhouse

# MySQL 백업 스크립트 로깅 기능 개선

## 로깅 시스템 개선

### 타임스탬프 출력 기능 추가
- **ptyMysqlBackup.php**:
  - logMessage() 함수 추가로 모든 출력에 타임스탬프 자동 포함
  - 기존 echo 호출을 logMessage()로 전면 교체
  - 에러 발생 시 exit(1)로 명시적 종료 코드 반환
parent fe6f01ca
#!/usr/bin/php
<?php
// 타임스탬프를 포함한 출력 함수
function logMessage($message) {
$timestamp = date('Y-m-d H:i:s');
echo "[$timestamp] $message";
}
// 인자 파싱 함수 (--key=value 형태만 허용)
function parseArguments($argv) {
$args = [];
......@@ -10,8 +16,8 @@ function parseArguments($argv) {
} elseif (preg_match('/^--([a-zA-Z]+)=(.*)$/', $argv[$i], $matches)) {
$args[$matches[1]] = $matches[2];
} else {
echo "[WARNING] Invalid argument format: {$argv[$i]}\n";
echo " Use --key=value format (e.g., --host=localhost)\n\n";
logMessage("[WARNING] Invalid argument format: {$argv[$i]}\n");
logMessage(" Use --key=value format (e.g., --host=localhost)\n\n");
}
}
return $args;
......@@ -55,25 +61,25 @@ if (!$backupPath) $backupPath = "/root/pty_server_backup/mysql";
if (!$password)
{
// 먼저 로컬 ~/.mysql_password 체크
echo "[INFO] Checking local ~/.mysql_password file...\n";
logMessage("[INFO] Checking local ~/.mysql_password file...\n");
$passwordFile = getenv("HOME") . "/.mysql_password";
if (file_exists($passwordFile)) {
$password = trim(file_get_contents($passwordFile));
echo "[INFO] Password loaded from local ~/.mysql_password\n";
logMessage("[INFO] Password loaded from local ~/.mysql_password\n");
} else {
echo "[INFO] Local ~/.mysql_password not found\n";
logMessage("[INFO] Local ~/.mysql_password not found\n");
}
// 로컬에 없고 호스트가 localhost가 아니면 SSH로 원격 호스트에서 가져오기
if (!$password && $host != "localhost" && $host != "127.0.0.1") {
echo "[INFO] Trying to get password from remote host ($host)...\n";
logMessage("[INFO] Trying to get password from remote host ($host)...\n");
$sshCmd = "ssh root@$host 'cat ~/.mysql_password' 2>/dev/null";
$remotePassword = trim(shell_exec($sshCmd));
if ($remotePassword) {
$password = $remotePassword;
echo "[INFO] Password loaded from remote host = $password\n";
logMessage("[INFO] Password loaded from remote host = $password\n");
} else {
echo "[INFO] Remote ~/.mysql_password not found\n";
logMessage("[INFO] Remote ~/.mysql_password not found\n");
}
}
}
......@@ -105,23 +111,25 @@ if (!$password)
// 백업 디렉토리 생성
if (!is_dir($backupPath)) {
echo "[INFO] Creating backup directory: $backupPath\n";
logMessage("[INFO] Creating backup directory: $backupPath\n");
if (!mkdir($backupPath, 0755, true)) {
die("[ERROR] Failed to create backup directory: $backupPath\n");
logMessage("[ERROR] Failed to create backup directory: $backupPath\n");
exit(1);
}
}
echo "\n[INFO] Backup path: $backupPath\n";
echo "[INFO] Connecting to MySQL server: $host as $user, password = $password\n";
logMessage("\n[INFO] Backup path: $backupPath\n");
logMessage("[INFO] Connecting to MySQL server: $host as $user, password = $password\n");
$connection = mysqli_connect($host, $user, $password);
if (!$connection) {
die ('[ERROR] Could not connect database.' . mysqli_error()."\n");
logMessage('[ERROR] Could not connect database.' . mysqli_error()."\n");
exit(1);
}
echo "[INFO] Connected successfully!\n\n";
logMessage("[INFO] Connected successfully!\n\n");
echo "[INFO] Retrieving database list...\n";
logMessage("[INFO] Retrieving database list...\n");
$databases = mysqli_query($connection, "SHOW databases");
$dbCount = 0;
$totalTables = 0;
......@@ -130,21 +138,21 @@ while ($databaseInfo = mysqli_fetch_array($databases)) { // go through each row
# performance_schema, information_schema 는 백업 무시
if ($dbName == "performance_schema" || $dbName == "information_schema") {
echo "[SKIP] Skipping system database: $dbName\n";
logMessage("[SKIP] Skipping system database: $dbName\n");
continue;
}
$dbCount++;
echo "\n====================================\n";
echo "[DB $dbCount] Processing database: $dbName\n";
echo "====================================\n";
logMessage("\n====================================\n");
logMessage("[DB $dbCount] Processing database: $dbName\n");
logMessage("====================================\n");
$sql = "SHOW TABLES FROM `$dbName`";
$result = mysqli_query($connection, $sql);
if (!$result) {
echo "[ERROR] DB Error, could not list tables\n";
echo '[ERROR] MySQL Error: ' . mysqli_error($connection) . "\n";
logMessage("[ERROR] DB Error, could not list tables\n");
logMessage('[ERROR] MySQL Error: ' . mysqli_error($connection) . "\n");
exit;
}
......@@ -155,18 +163,18 @@ while ($databaseInfo = mysqli_fetch_array($databases)) { // go through each row
}
$totalTablesInDb = count($tables);
echo "[INFO] Found $totalTablesInDb tables in $dbName\n";
logMessage("[INFO] Found $totalTablesInDb tables in $dbName\n");
foreach ($tables as $tableName) {
$tableCount++;
echo "[TABLE $tableCount/$totalTablesInDb] Backing up: $dbName.$tableName ... ";
logMessage("[TABLE $tableCount/$totalTablesInDb] Backing up: $dbName.$tableName ... ");
mysql_backup($host, $user, $password, $dbName, $tableName, $backupPath);
echo "Done\n";
logMessage("Done\n");
$totalTables++;
}
// 데이터베이스 백업 완료 후 압축
echo "[INFO] Compressing database backup...\n";
logMessage("[INFO] Compressing database backup...\n");
$dbDir = $backupPath . "/" . $dbName;
$tarFile = $backupPath . "/" . $dbName . ".tgz";
......@@ -175,25 +183,25 @@ while ($databaseInfo = mysqli_fetch_array($databases)) { // go through each row
exec($tarCmd, $tarOutput, $tarReturnCode);
if ($tarReturnCode === 0) {
echo "[INFO] Compressed to: $tarFile\n";
logMessage("[INFO] Compressed to: $tarFile\n");
// 압축 성공 시 원본 디렉토리 삭제
echo "[INFO] Removing original directory...\n";
logMessage("[INFO] Removing original directory...\n");
$rmCmd = "rm -rf \"$dbDir\"";
exec($rmCmd);
echo "[INFO] Original directory removed\n";
logMessage("[INFO] Original directory removed\n");
} else {
echo "[ERROR] Failed to compress $dbName\n";
echo implode("\n", $tarOutput) . "\n";
logMessage("[ERROR] Failed to compress $dbName\n");
logMessage(implode("\n", $tarOutput) . "\n");
}
}
echo "\n====================================\n";
echo "[COMPLETE] Backup finished!\n";
echo "[STATS] Backup path: $backupPath\n";
echo "[STATS] Total databases: $dbCount\n";
echo "[STATS] Total tables: $totalTables\n";
echo "====================================\n";
logMessage("\n====================================\n");
logMessage("[COMPLETE] Backup finished!\n");
logMessage("[STATS] Backup path: $backupPath\n");
logMessage("[STATS] Total databases: $dbCount\n");
logMessage("[STATS] Total tables: $totalTables\n");
logMessage("====================================\n");
function mysql_backup($host, $user, $password, $dbName, $tableName, $backupPath)
{
......@@ -215,8 +223,8 @@ function mysql_backup($host, $user, $password, $dbName, $tableName, $backupPath)
exec($cmd, $output, $returnCode);
if ($returnCode !== 0) {
echo "\n[ERROR] Failed to backup $dbName.$tableName\n";
echo implode("\n", $output) . "\n";
logMessage("\n[ERROR] Failed to backup $dbName.$tableName\n");
logMessage(implode("\n", $output) . "\n");
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment