我有几个sql
文件,我想一次将所有文件导入MySQL数据库。
我转到PHPMyAdmin
,访问数据库,单击import
,选择一个文件并将其导入。当我有多个文件时,需要很长时间。
我想知道是否有更好的方法导入多个文件,例如一个文件将导入其他文件或类似文件。
我正在使用WAMP
,我想要一个不需要在计算机上安装其他程序的解决方案。
Answers:
在Windows中,打开一个终端,转到内容文件夹并输入:
copy /b *.sql all_files.sql
这样可以将所有文件连接在一起,从而可以非常快地使用PhpMyAdmin导入。
在Linux和macOS中,正如@BlackCharly指出的,这可以解决问题:
cat *.sql > .all_files.sql
重要说明:直接执行该操作应该会顺利进行,但最终可能会陷入一个循环,由于系统将文件本身添加到文件中,因此输出文件越来越大。为了避免这种情况,有两种可能的解决方案。
A)将结果放在一个单独的目录中以确保安全(感谢@mosh):
mkdir concatSql
cat *.sql > ./concatSql/all_files.sql
B)将它们连接到具有不同扩展名的文件中,然后更改其名称。(感谢@威廉·特瑞尔)
cat *.sql > all_files.sql1
mv all_files.sql1 all_files.sql
这是我发现的最简单的方法。
在Windows(PowerShell)中:
cat *.sql | C:\wamp64\bin\mysql\mysql5.7.21\bin\mysql.exe -u user -p database
您将需要在WAMP - MySQL
上面插入路径,我已经使用了我的系统路径。
在Linux(Bash)中:
cat *.sql | mysql -u user -p database
cat
命令输出的utf-8字符损坏,这些字符将通过管道传递到mysql命令中,对吧?
转到cmd
在命令提示符下键入C:\ users \ Usersname> cd [.sql表文件夹路径]
按Enter
例如:C:\ users \ Usersname> cd E:\ project \ database
键入命令提示符
C:\ users \ Usersname> [。sql文件夹的驱动器(目录)名称]
按Enter
例如:C:\ users \ Usersname> E:
键入命令提示符以将所有.sql文件(表)置于单个文件
副本中/ b * .sql newdatabase.sql
按Enter
:EX:E:\ project \ database> copy / b * .sql newdatabase.sql
您可以在目录文件夹中看到将多个.sql(file)表文件合并为一个文件,
例如:E:\ project \ database
我知道已经过了两年多了...但是我一直在寻找一种方法来做,并且对发布的解决方案不太满意(它很好用,但是随着导入的进行,我需要更多信息) 。将所有SQL文件合并到一个时,您不会获得任何进度更新。
因此,我一直在寻找答案,并认为这可能是发布我所发现的东西的好地方,供以后寻找相同答案的人使用。这是Windows中的命令行,它将从一个文件夹中导入多个SQL文件。您可以在mysql.exe所在的目录中从命令行运行此命令。
for /f %f in ('dir /b <dir>\<mask>') do mysql --user=<user> --password=<password> <dbname> < <dir>\%f
以一些假定的值(例如):
for /f %f in ('dir /b c:\sqlbackup\*.sql') do mysql --user=mylogin --password=mypass mydb < c:\sqlbackup\%f
如果文件夹中有两组SQL备份,则可以将* .sql更改为更特定的名称(例如mydb _ *。sql)。
像这样输入mysql shell。
mysql --host = localhost --user =用户名--password --database = db
然后,使用source命令和分号分隔命令。
源文件1.sql; 源文件2; 源文件3;
您也可以使用for循环来这样做:
#!/bin/bash
for i in *.sql
do
echo "Importing: $i"
mysql your_db_name < $i
wait
done
将此文件另存为.bat并运行,更改括号内的变量...
@echo off
title Mysql Import Script
cd (Folder Name)
for %%a in (*) do (
echo Importing File : %%a
mysql -u(username) -p(password) %%~na < %%a
)
pause
如果只有一个数据库修改(%%〜na)使用数据库名称。
最简单的解决方案是将每个sql文件复制/粘贴到一个文件中。
您不能为文件导入添加一些sql标记(导入的文件将在您的计算机中,而不是在服务器中,并且我认为MySQL不会为外部sql文件管理某些导入标记)。
cat
在Linux或Unix上使用)
只需在命令提示符下键入以下命令,它将所有sql文件绑定到单个sql文件中,
c:/xampp/mysql/bin/sql/ type *.sql > OneFile.sql;