当我尝试使用下面的命令运行employees.sql时,它会读取文件创建数据库和表,但无法加载转储文件。给出的错误是:无法打开文件load_titles.dump错误2。
source C:\temp\employees_db\employees.sql
当我尝试使用下面的命令运行employees.sql时,它会读取文件创建数据库和表,但无法加载转储文件。给出的错误是:无法打开文件load_titles.dump错误2。
source C:\temp\employees_db\employees.sql
source C:/Users/pankaj/Downloads/test_db-master/show_elapsed.sql ;
首先,编辑employees.sql文件并插入每个.dump文件的完整路径名。
因此(在我的情况下),文本变为:
:
SELECT 'LOADING departments' as 'INFO';
source C:/temp/test_db-master/load_departments.dump ;
SELECT 'LOADING employees' as 'INFO';
source C:/temp/test_db-master/load_employees.dump ;
SELECT 'LOADING dept_emp' as 'INFO';
source C:/temp/test_db-master/load_dept_emp.dump ;
SELECT 'LOADING dept_manager' as 'INFO';
source C:/temp/test_db-master/load_dept_manager.dump ;
SELECT 'LOADING titles' as 'INFO';
source C:/temp/test_db-master/load_titles.dump ;
SELECT 'LOADING salaries' as 'INFO';
source C:/temp/test_db-master/load_salaries1.dump ;
source C:/temp/test_db-master/load_salaries2.dump ;
source C:/temp/test_db-master/load_salaries3.dump ;
:
source C:/temp/test_db-master/employees.sql`
您需要引用在employees.sql文件中缺失的*.dump文件(请注意,在成功创建“employees”数据库后,您可能需要自行导入它们):
以下是缺失.dump文件的链接: 缺失.dump文件的链接
SELECT 'LOADING departments' as 'INFO';
source load_departments.dump ;
SELECT 'LOADING employees' as 'INFO';
source load_employees.dump ;
SELECT 'LOADING dept_emp' as 'INFO';
source load_dept_emp.dump ;
SELECT 'LOADING dept_manager' as 'INFO';
source load_dept_manager.dump ;
SELECT 'LOADING titles' as 'INFO';
source load_titles.dump ;
SELECT 'LOADING salaries' as 'INFO';
source load_salaries.dump ;
.sql
文件包含什么内容。它包含 SQL 命令,因此 .sql
文件更像是一个包含 SQL 命令(DDL、DML 等)的脚本。C:\Users\chankruze\Downloads\test_db-1.0.7.tar\test_db-1.0.7\test_db>tree /f /a
Folder PATH listing
Volume serial number is EA88-380A
C:.
| Changelog
| employees.sql
| employees_partitioned.sql
| employees_partitioned_5.1.sql
| load_departments.dump
| load_dept_emp.dump
| load_dept_manager.dump
| load_employees.dump
| load_salaries1.dump
| load_salaries2.dump
| load_salaries3.dump
| load_titles.dump
| objects.sql
| README.md
| show_elapsed.sql
| sql_test.sh
| test_employees_md5.sql
| test_employees_sha.sql
| test_versions.sh
|
+---images
| ._employees.jpg
| employees.gif
| employees.jpg
| employees.png
|
\---sakila
README.md
sakila-mv-data.sql
sakila-mv-schema.sql
现在来看看你的问题。
假设我像下面这样导入:
D:\>mysql -u root -p < C:\Users\chankruze\Downloads\test_db-1.0.7.tar\test_db-1.0.7\test_db\employees.sql
Enter password: ******
INFO
CREATING DATABASE STRUCTURE
INFO
storage engine: InnoDB
INFO
LOADING departments
ERROR at line 113: Failed to open file 'load_departments.dump', error: 2
从上面的日志中可以清楚地看到,数据库结构正在被创建,但是出现了错误,对于从转储文件中加载数据也是一样的,你也遇到了这个问题吗?
好的,是时候进行调查了...
如果你仔细观察上面的日志,你会注意到我正在从 D:
驱动器执行 mysql,为了更通用,让我们假设从任何其他位置执行,而提取的文件不在那里。明白了吧?好。
现在,如果我打开位于 C:\Users\chankruze\Downloads\test_db-1.0.7.tar\test_db-1.0.7\test_db
的 employees.sql
文件,从第 112 行到 127 行,我可以看到有命令 source <xyz>.dump;
(如下所示)。
SELECT 'LOADING departments' as 'INFO';
source load_departments.dump ;
SELECT 'LOADING employees' as 'INFO';
source load_employees.dump ;
SELECT 'LOADING dept_emp' as 'INFO';
source load_dept_emp.dump ;
SELECT 'LOADING dept_manager' as 'INFO';
source load_dept_manager.dump ;
SELECT 'LOADING titles' as 'INFO';
source load_titles.dump ;
SELECT 'LOADING salaries' as 'INFO';
source load_salaries1.dump ;
source load_salaries2.dump ;
source load_salaries3.dump ;
source show_elapsed.sql ;
这些代码行负责将样本数据集(从另一个服务器转储)加载到此服务器。
如果这些代码行导致问题,那么很明显mysql无法找到这些文件。
您可以从上面的目录树视图中注意到,这些转储文件位于与employees.sql
相同的位置(employees.sql
和所有*.dump
文件都是兄弟节点)。因此,在sql文件中,这些转储文件是相对引用的。
解决方案
我们可以通过以下两种方式解决此问题:
1. 推荐方法
在cli中导航到相同的文件夹后执行安装。(如下所示):
C:\Users\chankruze\Downloads\test_db-1.0.7.tar\test_db-1.0.7\test_db>mysql -u root -p < employees.sql
Enter password: ******
INFO
CREATING DATABASE STRUCTURE
INFO
storage engine: InnoDB
INFO
LOADING departments
INFO
LOADING employees
INFO
LOADING dept_emp
INFO
LOADING dept_manager
INFO
LOADING titles
INFO
LOADING salaries
data_load_time_diff
00:01:09
为什么我推荐这个?因为你只需要更改工作目录,而不需要修改.sql
文件。
2. 替代方法
好吧,你可以在.sql
文件中使用绝对路径,如下所示:
...
SELECT 'LOADING departments' as 'INFO';
source C:/Users/chankruze/Downloads/test_db-1.0.7.tar/test_db-1.0.7/test_db/load_departments.dump ;
...
\
替换为/
。.sql
文件时需要进行编辑。编辑employees.sql文件,插入“*.dump”文件的完整路径以及最后一个“show_elapsed.sql”文件。使用“/”作为路径符号,替换默认的“\”。
我已经遇到这个问题两周了。尝试了提到的解决方案,但都没有帮助。我将我的Workbench版本从8.0.27降级到更低的8.0.22版本,之后我就能够通过运行脚本命令导入员工数据了。希望这对你有所帮助。