Kilho.net
IT Ramblings

GnuBoard yedekleme provası

Mevcut veritabanını euc-kr’den utf8’e dönüştürmek için yedeği özenle (??) aldıktan sonra

EditPlus’ta açtım; geçerli kodlamada kaybolabilecek karakterler içerdiği uyarısını verdi,

Şimdilik yok sayıp UTF8’e çevirip Import …. Lanet olsun ㅠㅠ bozuk karakterler yüzünden olmuyor

Aceleyle aradım~~~~ sonunda bir çözüm bulamadım..

(Dump alırken –default-character-set dâhil bütün seçenekleri belirtsem de işe yaramayan böyle durumlar ㅠㅠ)

Başka çare kalmayınca aşağıdaki kodu bulup ihtiyacıma göre değiştirdim (UTF8 dönüşümü, istenen tabloları seçme)

Taşıma tamamlandı!!!!  – Taşıma işi de yine sıkıcı ve yorucu ㅠㅠ

 

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

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

// Yalnızca gerekli tablolar~
$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; //Eksiksiz bir INSERT ifadesi oluşturmak için true
$drop = true; //DROP TABLE ifadesini eklemek için true
 
mysql_connect( $mysql_host, $mysql_user, $mysql_pass ) || die("Veritabanına bağlanılamadı.");
mysql_select_db( $mysql_db ) || die("DB bağlantısı başarısız");
 
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
# Ana makine: ".$mysql_host."
# İşlem zamanı: ".date('Y\\ı\\l n. \\a\\y j. g\\ü\\n H:\\s\\a\\a\\t i \\d\\a\\k\\i\\k\\a')."
# Sunucu sürümü: ".mysql_get_server_info()."
# Veritabanı : `".$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 .= "
#
# Tablo yapısı `".$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 .= "
#
# '".$rows[0]."' tablosu için INSERT ifadesi
#";
		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;
}
?>

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir