我有一个大的.sql文件,我用phpmyadmin创build备份我的开发数据库。 有什么办法将这个大的备份分成几个文件,每个文件分开的数据库? 该文件太大,无法手动处理
检查这里也许它会帮助你http://www.rusiczki.net/2007/01/24/sql-dump-file-splitter/
但是,如果你可以远程连接数据库,甚至可以访问shell,你应该使用mysqldump来备份每个数据库甚至每个表。
这个简单的脚本,将为你做到这一点:
#!/bin/bash dbuser= dbpass= backupdir= $mysql -e "show databases" --user=$dbuser --password=$dbpass | $grep -v "Database" | while read dbase do $mkdir -p $backupdir/$dbase/ $mysqldump -c -u $dbuser --password=$dbpass $dbase > $backupdir/$dbase/full-$dbase.sql #if dont want to dump one table per sql file then erase next 4 lines then it will dump one database per sql file $mysql -e "show tables" --user=$dbuser --password=$dbpass $dbase | $grep -v "Tables_in_" | while read dbtable do $mysqldump -c -u $dbuser --password=$dbpass $dbase $dbtable > $backupdir/$dbase/$dbtable.sql done done
你必须改变/放dbuser dbpass和backupdir,脚本应该完全转储服务器上的每个数据库(每个sql文件一个数据库和每个sql文件数据库的每个表)。 这个例子应该在服务器上执行,但是修改很小,你可以使用它来远程执行转储。
如果你只是想分割文件进行开发,而不是恢复 – 应该有一个脚本/工具分裂.sql文件,但从来没有见过 – 也许有人会张贴。
如果您正在恢复备份:
大文件 – 你可能总是有这个问题。 你不能确定所有数据库都很小。 足以在稍后导入数据
如果服务器在你手中 – 从mysql控制台导入它: http : //dev.mysql.com/doc/refman/5.5/en/mysqlimport.html
phpMyAdmin也可以处理大文件,但是web服务器和php的限制必须设置为更高的值。 另外,phpMyAdmin支持gzip和bzip2,用bzip2压缩并重试。
现在,您可以尝试从控制台导入大文件,然后使用mysqldump分别重新导出所有数据库: http : //dev.mysql.com/doc/refman/5.5/en/mysqldump.html
这是我写的将phpmyadmin的服务器备份拆分为单个数据库文件的脚本:
#!/usr/bin/php <?php define('SOURCE_FILE', './localhost.sql'); define('TARGET_DIR', './DBs'); $fhs = fopen(SOURCE_FILE, 'r') or die("e-1!\n"); # source handler $fht = null; # file handler for database files $header = ''; # phpmyadmin settings at the begining of the file while (($str = fgets($fhs)) !== false) { if(preg_match('@^CREATE DATABASE `(.*?)`@', $str, $matches)) { @fclose($fht); $fht = fopen(TARGET_DIR . '/' . $matches[1] . '.sql', 'w') or die("e-2: {$matches[1]}!\n"); echo "Database: {$matches[1]}\n"; fwrite($fht, $header); } if($fht) fwrite($fht, $str); else $header .= $str; } echo (feof($fhs)) ? 'All Done :)' : 'e-3: unexpected end!', "\n"; @fclose($fht); @fclose($fhs); ?>