Как импортировать большую базу данных MySQL

Многие сталкивались с такой проблемой как перенос сайта с одного хоста на другой. Ну допустим сам перенос сайта удается на ура, а вот база данных бывает порой таких громадных размеров, что наш phpMyAdmin от хостера не справляется с задачей и при импорте базы выдает кучу ошибок. Да и размер ограничения как правило стоит там не большой, примерно до 30 мБ, а наша база имеет объем до 45 мБ.

Можно заняться мазохизмом и переносить базу по табличке. Но как я уже говорил — это мазохизм, и даже отдельно взятые таблички могут переноситься иногда с ошибками. Мои товарищи, коллеги и конкуренты колдуют с SQL-запросами чтобы phpMyAdmin закрывал на ошибки глаза. А у Вас есть такие специализированные знания? Я думаю, что нет!

И так описанную траблу можно решить следующим способом...

1) Вот Вы перенесли сайт на хост, в свою корневую папочку, что дальше? Настройте конфиг в Вашей CMS (в каждой CMS он выглядит по-разному. Например в UMI.CMS — это будет файл config.ini. А например в WordPress — это будет wp-config.php), то есть прописываете привязку к Базе данных MySQL: адрес сервера базы данных, логин, пароль.
Сделали? Отлично! Переходим ко второму шагу.

2) В эту же корневую папку залейте Вашу базу данных либо в формате .sql, либо в архиве .zip

3) Чтобы из корневого каталога загрузить нам базу на ее сервак, сначала нужно узнать путь (расстояние) от базы до сервака. Для этого пишим код что я привожу ниже, его компилируем и кидаем тоже в корневой каталог сайта

<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=Windows-1251">
<title>Путь к текущему каталогу от корня</title>
</head>
<body>
<?php
echo 'Полный путь к каталогу: ';
echo $_SERVER['DOCUMENT_ROOT'];
echo '/';
?>
</body>
</html>

Скомпилировали и сохранили в формате .php. Затем открываем нашу только что скомпиленный файл через браузер (убедитесь что у Вам хостер подключил поддержку PHP) и мы видим путь каталогов до нашего РНР-файла. Путь копируем в буфер.

4) Компилим новый РНР-файл, код ниже:

<?
echo '<form method="post">
Сервер mysql: <input type="text" name="cmsmysqlserver" value="" ><br>
Пользователь БД: <input type="text" name="cmsdbuser" value="" ><br>
Пароль БД: <input type="text" name="cmsdbpass" value="" ><br>
Имя БД: <input type="text" name="cmsdbname" value="" ><br>

Путь файла от корня сервера: <input type="text" name="cmsdbfilename" value="backip.sql" ><br>
<input type="submit" style="width:300px;" value="»>">
</form>';
if($_SERVER['REQUEST_METHOD']=='POST'){echo cmsdumpmysql();}
function cmsdumpmysql(){
if(!empty($_POST['cmsmysqlserver'])&&!empty($_POST['cmsdbuser'])&&!empty($_POST['cmsdbpass'])&&!empty($_POST['cmsdbname'])) {
///// Сервер БД
if(!empty($_POST['cmsmysqlserver'])){
$cmsmysqlserver=$_POST['cmsmysqlserver'];
}
///// Юзер БД
if(!empty($_POST['cmsdbuser'])){
$cmsdbuser=$_POST['cmsdbuser'];
}
///// Пароль БД
if(!empty($_POST['cmsdbpass'])){
$cmsdbpass=$_POST['cmsdbpass'];
}
///// Имя БД
if(!empty($_POST['cmsdbname'])){
$cmsdbname=$_POST['cmsdbname'];
}
}
///// Папка файла дампа базы
if(!empty($_POST['cmsdbpapka'])){
$cmsdbpapka=$_POST['cmsdbpapka'];
}
///// Имя файла дампа базы
if(!empty($_POST['cmsdbfilename'])){
$cmsdbfilename=$_POST['cmsdbfilename'];
}
///// Запрос шелл бд
$cmsmysqlshell = 'mysql -u '.$cmsdbuser.' -p'.$cmsdbpass.' -h'.$cmsmysqlserver.' '.$cmsdbname.'< '.$cmsdbfilename.'';
$cmsmysqlshellout = '';
if (function_exists('exec')) {
@exec($cmsmysqlshell,$cmsmysqlshellout);
$cmsmysqlshellout = @join("\n",$cmsmysqlshellout);
} elseif (function_exists('passthru')) {
ob_start();
@passthru($cmsmysqlshell);
$cmsmysqlshellout = ob_get_clean();
} elseif (function_exists('system')) {
ob_start();
@system($cmsmysqlshell);
$cmsmysqlshellout = ob_get_clean();
} elseif (function_exists('shell_exec')) {
$cmsmysqlshellout = shell_exec($cmsmysqlshell);
} elseif (is_resource($f = @popen($cmsmysqlshell,"r"))) {
$cmsmysqlshellout = "";
while(!@feof($f))
$cmsmysqlshellout .= fread($f,1024);
pclose($f);
}
echo $cmsmysqlshellout;
//Проверка файла
$cmsdbfile=''.$cmsdbpapka.''.$cmsdbfilename.'';
if (file_exists($cmsdbfile)){echo "Файл базы создан $cmsdbfilename \n";
$size2 = filesize($cmsdbfile);
$size3= $size2/1024;
if ($size3>1024){
$size4=$size3/1024;
echo "Размер файла = $size4 Mb \n";
if ($size4>1024){$size5=$size4/1024;echo "Размер файла = $size5 Gb
\n";}
}
else {echo "Размер файла = $size3 Kb \n"; }
}}
?>

Скомпиленный файл кидаем в корень сайта, запускаем файл через браузер, вводим наши данные для подключения к MySQL , в нижней строке указываем путь (который мы получили от первого скомпиленного файла) до базы данных которую мы кинули в корень сайта. Обязательно укажите расширение .sql или .zip. Когда все указали, нажимаем на импортирование, курим бамбук до завершения работы. И вот оно! База импортировалась без всяких проблем, при этом мы не использовали SSH и прочие премудрости.

Метки записи: