使用PHP导入MySQL转储文件

4
我有一个mysql转储文件,我该如何使用php将这个文件导入到mysql中?

2
为什么不直接使用命令行?mysql -u USER -p DBNAME < dump.sql - CamelBlues
将其简单地分成多个 SQL 语句,每个语句以 ; 结尾,但请记住,; 不应该在引号内。 - AbiusX
4个回答

3

实际上,这取决于转储文件的大小。小文件可以用 SQL 命令直接添加,而大文件则需要使用脚本导入。

快速搜索会显示许多预制脚本,将转储文件分解成较小的块以避免服务器超载。我过去曾使用过这个脚本:http://www.ozerov.de/bigdump.php


1
文件 - 1 mb。我知道bigdump!但我需要我的php脚本将文件导入mysql! - user515503

2
你的转储文件可能只是包含了许多 SQL 查询的文件。导入这样的转储文件最简单的方法是使用 mysql 命令行客户端 (特别是如果文件很大的话!)
mysql --user=USERNAME --password=PASSWORD --host=HOST DB_NAME < /path/to/your/file.sql

如果您可以使用一些命令行访问方式(通常使用ssh)连接到服务器,那就是最好的方法。
否则,我想您可以使用system()函数来执行这样的命令。

这个答案没有提供一个关于“使用PHP导入MySQL dump”的解决方案。 - Avatar

2
如果您想使用PHP,可以轻松使用file()函数,逐行将文件读入数组中。您可以尝试以下代码:
mysql_connect(BD_HOST, DB_USER, BD_PASS) or die("Error connecting to MySQL server: ".mysql_error());
mysql_select_db(DB_NAME);

$all_lines = file("mysql_dump.sql", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);

foreach($all_lines as $query) {
    if(substr($query, 0, 2) == "--") {
        continue;
    }

    mysql_query($query) or die("Error executing query <br/>&nbsp;&nbsp;"$query\"<br/>".mysql_error());
}

1
你可以使用multi_query来导入中等大小的数据库备份文件
$command = file_get_contents($dumpfile);
$conn->multi_query($command);
while (mysqli_next_result($conn)); // Flush out the results.

注意:精确的文件大小限制取决于您的服务器配置,例如 max_allowed_packet 等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接