Files
sam-sales/dump_db.php

111 lines
3.8 KiB
PHP
Raw Normal View History

2026-01-06 09:11:45 +09:00
<?php
/**
* 서버에서 실행할 데이터베이스 덤프 생성 스크립트
* 사용법: php dump_db.php
*/
// .env 파일 로드
$envFile = __DIR__ . '/.env';
$db_host = 'localhost';
$db_name = 'chandj';
$db_user = 'root';
$db_pass = '';
if (file_exists($envFile)) {
$lines = file($envFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
if (strpos($line, '=') !== false && strpos($line, '#') !== 0) {
list($key, $value) = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
if ($key === 'DB_HOST') {
// 서버 환경에서는 mysql 호스트명을 localhost로 변환
$db_host = ($value === 'mysql' || strpos($value, 'mysql') !== false) ? 'localhost' : $value;
}
if ($key === 'DB_NAME') $db_name = $value;
if ($key === 'DB_USER') $db_user = $value;
if ($key === 'DB_PASS') $db_pass = $value;
}
}
}
echo "=== 데이터베이스 덤프 생성 ===\n";
echo "DB_HOST: $db_host\n";
echo "DB_NAME: $db_name\n";
echo "DB_USER: $db_user\n";
echo "\n";
$outputFile = '/tmp/chandj_backup_' . date('Ymd_His') . '.sql';
// 비밀번호가 없으면 수동 실행 안내
if (empty($db_pass)) {
echo "⚠️ .env 파일에 DB_PASS가 설정되지 않았습니다.\n";
echo "다음 명령을 터미널에서 직접 실행하세요:\n";
echo "\n";
if ($db_host === 'localhost' || $db_host === '127.0.0.1') {
echo " mysqldump -u $db_user -p $db_name > $outputFile\n";
} else {
echo " mysqldump -h $db_host -u $db_user -p $db_name > $outputFile\n";
}
echo "\n";
echo "비밀번호를 입력하라는 프롬프트가 나타나면 MySQL root 비밀번호를 입력하세요.\n";
echo "덤프 파일이 생성되면 다음 명령으로 다운로드하세요:\n";
echo " SFTP: Download -> $outputFile\n";
echo " 또는: scp pro@114.203.209.83:$outputFile .\n";
exit(0);
}
// mysqldump 명령 구성
// localhost인 경우 -h 옵션 생략 (소켓 연결 사용)
if ($db_host === 'localhost' || $db_host === '127.0.0.1') {
// 비밀번호를 환경 변수로 전달 (더 안전)
$command = sprintf(
'MYSQL_PWD=%s mysqldump -u %s %s > %s 2>&1',
escapeshellarg($db_pass),
escapeshellarg($db_user),
escapeshellarg($db_name),
escapeshellarg($outputFile)
);
$commandDisplay = "mysqldump -u $db_user [비밀번호] $db_name > $outputFile";
} else {
$command = sprintf(
'MYSQL_PWD=%s mysqldump -h %s -u %s %s > %s 2>&1',
escapeshellarg($db_pass),
escapeshellarg($db_host),
escapeshellarg($db_user),
escapeshellarg($db_name),
escapeshellarg($outputFile)
);
$commandDisplay = "mysqldump -h $db_host -u $db_user [비밀번호] $db_name > $outputFile";
}
echo "명령 실행 중...\n";
echo "\n";
exec($command, $output, $returnCode);
if ($returnCode === 0 && file_exists($outputFile)) {
$fileSize = filesize($outputFile);
echo "✅ 덤프 생성 완료!\n";
echo "파일: $outputFile\n";
echo "크기: " . number_format($fileSize / 1024 / 1024, 2) . " MB\n";
echo "\n";
echo "다음 명령으로 다운로드하세요:\n";
echo " SFTP: Download -> $outputFile\n";
echo " 또는: scp pro@114.203.209.83:$outputFile .\n";
} else {
echo "❌ 덤프 생성 실패\n";
if (!empty($output)) {
echo "오류 메시지:\n";
echo implode("\n", $output) . "\n";
}
echo "\n";
echo "수동으로 시도해보세요:\n";
if ($db_host === 'localhost' || $db_host === '127.0.0.1') {
echo " mysqldump -u $db_user -p $db_name > $outputFile\n";
} else {
echo " mysqldump -h $db_host -u $db_user -p $db_name > $outputFile\n";
}
}