IT ·

GNUboard ฝึกซ้อมสำรองข้อมูล

เพื่อแปลง DB ที่ใช้งานอยู่จาก euc-kr เป็น utf8 จึงสำรองข้อมูลอย่างตั้งใจ (??) แล้ว

พอเปิดด้วย editplus ก็แจ้งว่ามี อักขระที่อาจสูญหายเมื่อใช้การเข้ารหัสปัจจุบัน

ตอนแรกก็ไม่สนใจแล้วแปลงเป็น UTF8 จากนั้น Import …. ให้ตายสิ ㅠㅠ ทำไม่ได้เพราะตัวอักษรเพี้ยน

รีบค้นหา~~~~ แต่สุดท้ายก็ไม่เห็นวิธีแก้..

(กรณีแบบนี้ ต่อให้ใส่ตัวเลือกทั้งหมด รวมถึง –default-character-set ตอน dump ก็ยังไม่ได้ ㅠㅠ)

ไม่มีทางเลือกอื่น จึงเจอโค้ดด้านล่างแล้วแก้ให้ตรงกับที่ต้องการ (แปลงเป็น UTF8, เลือกตารางที่ต้องการ)

ตรวจสอบการย้ายเสร็จแล้ว!!!!  – การย้ายข้อมูลนี่ช่างน่ารำคาญและเหนื่อยจริง ๆ ㅠㅠ

 

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

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

// เฉพาะตารางที่จำเป็น~
$select[] = 'g4_board';
$select[] = 'g4_board_file';
$select[] = 'g4_board_good';
$select[] = 'g4_board_new';
$select[] = 'g4_config';
$select[] = 'g4_group';
$select[] = 'g4_group_member';
$select[] = 'g4_write_cast';
$select[] = 'g4_write_delphibbs';
$select[] = 'g4_write_english';
$select[] = 'g4_write_girl';
$select[] = 'g4_write_gy';
$select[] = 'g4_write_humor';
$select[] = 'g4_write_module';
$select[] = 'g4_write_mypage';
$select[] = 'g4_write_notice';
$select[] = 'g4_write_poll';
$select[] = 'g4_write_qna';
$select[] = 'g4_write_skin';
$select[] = 'g4_write_talk';
$select[] = 'g4_write_temp';
$select[] = 'g4_write_temppds';
$select[] = 'g4_write_test';
$select[] = 'g4_write_tiptech';
$select[] = 'g4_write_varios';

$all = false; // true หากต้องการสร้างคำสั่ง Insert แบบสมบูรณ์
$drop = true; // true หากต้องการรวมคำสั่ง drop table
 
mysql_connect( $mysql_host, $mysql_user, $mysql_pass ) || die("เชื่อมต่อฐานข้อมูลไม่สำเร็จ");
mysql_select_db( $mysql_db ) || die("เชื่อมต่อ DB ไม่สำเร็จ");
 
function bak_getTableNames($db)
{
	$result[0] = mysql_list_tables($db);
	$result[1] = mysql_num_rows($result[0]);
	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[Field];
		if($keys[Key] == 'PRI') 
		{
			$orderby = $keys[Field];
			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[] = mysql_field_name($result,$i);
		}
		$fields = "(".implode(",",$fields).") ";
	}
	while($rows = mysql_fetch_row($result)) 
	{
		for($i=0;$i<$nums;$i++) 
		{
			$temp = $rows[$i];
			$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[$i] = $temp;
		}
		$return .= "INSERT INTO $table ".$fields."values ('".implode("','",$insertValues)."');n";
	}
	return $return;
}
 
$tables = bak_getTableNames($mysql_db);

if($tables[1] > 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[0]==$select[$i])
			{
				$chk = true;
				break;
			}
		}
		
		if(!$chk)continue;

		$backText .= "
#
# โครงสร้างตาราง `".$rows[0]."`
#nn";
		$skima = mysql_fetch_array(mysql_query("SHOW CREATE TABLE ".$mysql_db.".".$rows[0]));
		if($drop == true) $backText .= "DROP TABLE IF EXISTS ".$skima[0].";nn";
		$backText .= "CREATE TABLE if not exists ".$skima[0]." ";
		$pos = strpos($skima[1]," (");
		$backText .= str_replace("`","",substr($skima[1],($pos+1))).";";

		$insert = bak_getFields($rows[0]);
		$backText .= "
#
# คำสั่ง insert สำหรับตาราง '".$rows[0]."'
#";
		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;
}
?>

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *