Мне нужно экспортировать огромную базу данных с тысячами таблиц и миллионами строк. Я использую общий хостинг, поэтому я не могу использовать экспорт командной строки, и у меня действительно нет простого способа получить эти данные, кроме как через phpMyAdmin или php. Инструмент для экспорта базы данных cPanel по умолчанию не работает, он экспортирует пустую базу данных. Экспорт phpMyAdmin в формате gzip или zip также дает пустую базу данных.
Я скачиваю этот файл SQL уже несколько часов, и он составляет всего 114 МБ из примерно 2 ГБ реальных данных.
Как мне лучше всего (безопасно) экспортировать все мои данные? Это действительно огромная боль, и данные не могут быть потеряны, но их нужно экспортировать. Могу ли я использовать какие-нибудь скрипты или программы?
Можете ли вы получить доступ к базе данных напрямую? MySqlDump.exe в крайнем случае будет работать удаленно.
Вы можете попробовать использовать mysqldumper. Это сценарий, который загружает часть вашей БД, запоминает, где она останавливается, снова вызывает себя и продолжает загрузку.
Вот ссылка: http://www.mysqldumper.net/
Взгляни на :
http://www.siteground.com/tutorials/php-mysql/mysql_export.htm
Вы найдете учебник, который научит вас экспортировать базы данных с помощью phpmyadmin, установлен по умолчанию на cpanel.
Кроме того, cpanel имеет функцию резервного копирования, которая позволяет создавать резервные копии только баз данных.
https://yourdomain.com:2083/frontend/x3/backup/wizard-backup-type.html?type=mysql
В качестве альтернативы вы можете попробовать использовать функцию ниже (украдено из http://davidwalsh.name/backup-mysql-database-php):
backup_tables('localhost','username','password','blog');
/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$name,$tables = '*')
{
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);
//get all of the tables
if($tables == '*')
{
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result))
{
$tables[] = $row[0];
}
}
else
{
$tables = is_array($tables) ? $tables : explode(',',$tables);
}
//cycle through
foreach($tables as $table)
{
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);
$return.= 'DROP TABLE '.$table.';';
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return.= "\n\n".$row2[1].";\n\n";
for ($i = 0; $i < $num_fields; $i++)
{
while($row = mysql_fetch_row($result))
{
$return.= 'INSERT INTO '.$table.' VALUES(';
for($j=0; $j<$num_fields; $j++)
{
$row[$j] = addslashes($row[$j]);
$row[$j] = ereg_replace("\n","\\n",$row[$j]);
if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
if ($j<($num_fields-1)) { $return.= ','; }
}
$return.= ");\n";
}
}
$return.="\n\n\n";
}
//save file
$handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
fwrite($handle,$return);
fclose($handle);
}
Конечно, вам нужно будет предоставить функции учетные данные базы данных, а также массив таблиц, для которых вы хотите создать резервную копию. Если вы укажете «*» или не укажете никаких таблиц, будет выполнено полное резервное копирование базы данных. Все остальное сделает сценарий!
Не забудьте добавить set_time_limit(0);
в файл php, содержащий backup_tables()
функция.
GL!