111 lines
3.8 KiB
PHP
111 lines
3.8 KiB
PHP
|
|
<?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";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|