[PHP] 영카트5 DB 테이블별로 덤프하기
영카트5의 DB 데이터를 테이블별로 덤프하기 위한 코드이다. 코드 테스트는 PHP 7.0.x 버전, MariaDB 10.1.x 버전에서 완료했다.
<?php require_once './_common.php'; $tables = []; $exclude = [ 'g5_autosave' 'g5_visit', 'g5_visit_sum' ]; $result = sql_query("SHOW TABLES"); for ($i = 0; $row = sql_fetch_array($result); $i++) { $tables[] = array_pop($row); } $userInfo = posix_getpwuid(fileowner(__FILE__)); $owner = $userInfo['name']; $dir = '/home/dbbackup/'.$owner.'/'.date('Ymdhi'); mkdir($dir, 0755, true); // 7일 초과 경과된 data 삭제 $basedir = dirname($dir); $basetime = time() - 86400 * 7; foreach (scandir($basedir) as $val) { if (in_array($val, array('.', '..'))) continue; $d = $basedir.'/'.$val; if (filemtime($d) < $basetime) { if (is_dir($d)) { foreach (scandir($d) as $v) { if (in_array($v, array('.', '..'))) continue; if (is_file($d.'/'.$v)) @unlink($d.'/'.$v); } rmdir($d); } else { @unlink($d); } } } // DB 백업 $host = G5_MYSQL_HOST; $user = G5_MYSQL_USER; $pass = G5_MYSQL_PASSWORD; $database = G5_MYSQL_DB; foreach ($tables as $table) { if (in_array($table, $exclude)) continue; $file = $dir.'/'.$table.'.sql'; exec("mysqldump --user={$user} --password={$pass} --host={$host} {$database} {$table} --result-file={$file} 2>&1", $output); }
$exclude
에 덤프 때 제외할 테이블을 지정할 수 있다.