그누보드 백업 예행 연습

기존 사용중인 DB 를 euc-kr 에서 utf8 로 변환하기 위해, 백업을 정성스레(??) 받은 후

editplus 로 열었더니, 현재 인코딩에서 손실될 수 있는 문자가 포함되어 있다고 함,

일딴 무시하고 UTF8 로 바꾸고 Import …. 젠장 ㅠㅠ 깨진 글자들 때문에 안됨

급하게 검색~~~~ 결국 방법이 안보임..

(덤프 할 때 –default-character-set 까지 옵션 다 주고 해도 안되는 이런 경우는 ㅠㅠ)

어쩔수 없이 아래와 같은 소스를 발견, 입맛에 맞게 수정 (UTF8변환, 원하는 테이블 선택)

이전  확인 완료!!!!  – 이전하는건 역시나 귀찮코, 피곤해 ㅠㅠ

 

<?
$mysql_host = '********';
$mysql_db = '********';
$mysql_user = '********';
$mysql_pass = '********';

$fileName = 'db-backup';
$extention = "sql";

// 필요한 테이블만~
$select&#91;&#93; = 'g4_board';
$select&#91;&#93; = 'g4_board_file';
$select&#91;&#93; = 'g4_board_good';
$select&#91;&#93; = 'g4_board_new';
$select&#91;&#93; = 'g4_config';
$select&#91;&#93; = 'g4_group';
$select&#91;&#93; = 'g4_group_member';
$select&#91;&#93; = 'g4_write_cast';
$select&#91;&#93; = 'g4_write_delphibbs';
$select&#91;&#93; = 'g4_write_english';
$select&#91;&#93; = 'g4_write_girl';
$select&#91;&#93; = 'g4_write_gy';
$select&#91;&#93; = 'g4_write_humor';
$select&#91;&#93; = 'g4_write_module';
$select&#91;&#93; = 'g4_write_mypage';
$select&#91;&#93; = 'g4_write_notice';
$select&#91;&#93; = 'g4_write_poll';
$select&#91;&#93; = 'g4_write_qna';
$select&#91;&#93; = 'g4_write_skin';
$select&#91;&#93; = 'g4_write_talk';
$select&#91;&#93; = 'g4_write_temp';
$select&#91;&#93; = 'g4_write_temppds';
$select&#91;&#93; = 'g4_write_test';
$select&#91;&#93; = 'g4_write_tiptech';
$select&#91;&#93; = 'g4_write_varios';

$all = false; //완전한 Insert 문을 작성하려면 true
$drop = true; //drop table 구문을 포함하려면 true
 
mysql_connect( $mysql_host, $mysql_user, $mysql_pass ) || die("데이타 베이스 접속에 실패하였습니다.");
mysql_select_db( $mysql_db ) || die("DB 접속 실패");
 
function bak_getTableNames($db)
{
	$result&#91;0&#93; = mysql_list_tables($db);
	$result&#91;1&#93; = mysql_num_rows($result&#91;0&#93;);
	return $result;
}
 
function bak_getFields($table)
{
	global $all;
	$result = mysql_query("show fields from $table");
	$i = 0;
	while($keys = mysql_fetch_array($result)) 
	{
		if(!$i) $defaultOrder = $keys&#91;Field&#93;;
		if($keys&#91;Key&#93; == 'PRI') 
		{
			$orderby = $keys&#91;Field&#93;;
			break;
		}
		$i++;
	}
	if(!$orderby) $orderby = $defaultOrder;
	$result = mysql_query("select * from $table order by $orderby");
	$nums = mysql_num_fields($result);
	if($all == true) 
	{
		for($i=0;$i<$nums;$i++) 
		{
			$fields&#91;&#93; = mysql_field_name($result,$i);
		}
		$fields = "(".implode(",",$fields).") ";
	}
	while($rows = mysql_fetch_row($result)) 
	{
		for($i=0;$i<$nums;$i++) 
		{
			$temp = $rows&#91;$i&#93;;
			$temp = str_replace("'","''", $temp);
			$temp = str_replace("","\", $temp);
			$temp = str_replace("n",'n', $temp);
			$temp = str_replace("r",'r', $temp);
			
			$temp = iconv('CP949', 'UTF-8', $temp);
			$insertValues&#91;$i&#93; = $temp;
		}
		$return .= "INSERT INTO $table ".$fields."values ('".implode("','",$insertValues)."');n";
	}
	return $return;
}
 
$tables = bak_getTableNames($mysql_db);

if($tables&#91;1&#93; > 0) 
{
	$backText = "
# MysqlDump
# 호스트: ".$mysql_host."
# 처리한 시간: ".date('Y년 n월 j일 H시 i분')."
# 서버 버전: ".mysql_get_server_info()."
# 데이터베이스 : `".$mysql_db."`
# --------------------------------------------------------nnnnn";

	while($rows = mysql_fetch_row($tables[0])) 
	{
		$chk = false;
		for($i=0;$i<count($select);$i++)
		{
			if($rows&#91;0&#93;==$select&#91;$i&#93;)
			{
				$chk = true;
				break;
			}
		}
		
		if(!$chk)continue;

		$backText .= "
#
# 테이블 구조 `".$rows&#91;0&#93;."`
#nn";
		$skima = mysql_fetch_array(mysql_query("SHOW CREATE TABLE ".$mysql_db.".".$rows&#91;0&#93;));
		if($drop == true) $backText .= "DROP TABLE IF EXISTS ".$skima&#91;0&#93;.";nn";
		$backText .= "CREATE TABLE if not exists ".$skima&#91;0&#93;." ";
		$pos = strpos($skima&#91;1&#93;," (");
		$backText .= str_replace("`","",substr($skima&#91;1&#93;,($pos+1))).";";

		$insert = bak_getFields($rows&#91;0&#93;);
		$backText .= "
#
# 테이블 '".$rows&#91;0&#93;."' insert 문
#";
		if($insert) $backText .= "nnn".$insert;
		$backText .= "nnnnn";
	}

	header("Content-Type: application/octetstream");
	header("Content-Disposition: attachment; filename=".$fileName.".".$extention);
	header('Expires: 0');
	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
	header('Pragma: public');
	echo $backText;
}
?>
arrow