PDA

View Full Version : Перенос таблиц MySQL


MO-HAX
20.01.2007, 23:33
господа помгите плз. нуже пример скрипта, чтобы переносил таблица из отдной базы в другую (идентичную) стоит нюка 6.8 хочу 8.0. , пропатчить не могу до 8.0 глючит, вот и хочу базу перенести

Astrix
21.01.2007, 17:51
щас попробую что-нить наваять. результат выложу

Astrix
21.01.2007, 19:18
Час работы и вот что у меня получилось (просьба сразу камнями не закидывать):

<?
$prefix = "nuke_";
//Список таблиц в базе
$tables_list = "authors,autonews,banned_ip,banner,clients,plans,banner_positions,banner_terms,bbauth_access,bbbanlist,"
."bbcategories,bbconfig,bbdisallow,bbforum_prune,bbforums,bbgroups,bbposts,bbposts_text,bbprivmsgs,"
."bbprivmsgs_text,bbranks,bbsearch_results,bbsearch_wordlist,bbsearch_wordmatch,bbsessions,bbsessions_keys,"
."bbsmilies,bbthemes,bbthemes_name,bbtopics,bbtopics_watch,bbuser_group,bbvote_desc,bbvote_results,"
."bbvote_voters,bbwords,blocks,cities,comments,comments_moderated,config,confirm,counter,"
."downloads_categories,downloads_downloads,downloads_editorials,downloads_modrequest,downloads_newdownload,"
."downloads_votedata,encyclopedia,encyclopedia_text,faqanswer,faqcategories,groups,groups_points,headlines,journal,"
."journal_comments,journal_stats,links_categories,links_editorials,links_links,links_modrequest,links_newlink,"
."links_votedata,main,message,modules,optimize_gain,pages,pages_categories,,poll_check,poll_data,poll_desc,pollcomments,"
."pollcomments_moderated,public_messages,queue,referer,related,reviews,reviews_add,reviews_comments,"
."reviews_comments_moderated,reviews_main,session,stats_date,stats_hour,stats_month,stats_year,stories,stories_cat,"
."subscriptions,topics,users,users_temp";

$tables = explode( ",", $tables_list );

$user = "username";
$pass = "password";
$host = "localhost";
$db1 = "db1_name"; //Исходная база данных
$db2 = "db2_name"; //Конечная база данных

@mysql_connect($host, $user, $pass) or die ('Не могу сконнектиться с сервером');

@mysql_select_db($db1) or die ('Не могу выбрать базу данных 1');


for ($i=0; $i<sizeof($tables); $i++) {

$sql = "SELECT * FROM ". $prefix . $tables[$i] . "";

if ($result=mysql_query($sql)) {

while ($rows[] = mysql_fetch_row($result)) {}

@mysql_select_db($db2) or die ('Не могу выбрать базу данных 2');

//Удаляем старые записи из таблицы
$sql = "DELETE FROM ". $prefix . $tables[$i] . "";
@mysql_query($sql);

for ($j = 0 ;$j<sizeof($rows)-1; $j++) {

$row = $rows[$j];
$values = '';

while (list($key, $val) = each ($row)) {

$values .=" '" .addslashes($val). "'";
$values .= ($key < sizeof($row)-1) ? "," : "";
}

$sql = "INSERT INTO ". $prefix . $tables[$i] . " VALUES ($values)";

echo ($sql . " <br>" . sizeof($row) . "<br>");

if (!$result=mysql_query($sql)) {
die ('ошибка записи в конечную базу данных');
}
}
}

unset ($rows);
@mysql_select_db($db1) or die ('Не могу выбрать базу данных 1');
}
?>

Просьба при передаче третьим лицам данного скрипта указывать авторство. Мой E-mail: hack6666@mail.ru

Обязательно сверьте содержимое переменной $tables_list со списком таблиц в вашей БД!
При любом несовпадении структуры, имени таблицы или названий полей работа скрипта может быть некорректной.
Поэтому опробуйте его на резервной копии вашей базы данных на локальной машине и ТОЛЬКО потом на сервере!

Удачи!

P. S.
Если у кого есть предложения по усовершенствованию даного скрипта, с радостью приму все к сведению!

При загрузке скрипта почему-то появились разрывы в строках переменной $tables_list
Их там не должно быть - учтите пожалуйста это!