linux里docker镜像mysql运行sql脚本时出现Failed to open file ‘/home/‘, error: 2的解决

时间:2025-04-01 08:54:08

linux里docker镜像mysql运行sql脚本时出现Failed to open file ‘/home/’, error: 2的解决

此文章的前提是已经把sql文件复制到docker里了

今天在用CentOS7里在docker启动MySQL运行sql脚本文件时出错,错误信息如下:

mysql> source /home/mydatabase.sql;
ERROR: 
Failed to open file '/home/', error: 2

上网查了下,错误原因应该是路径匹配的问题,默认路径是MySQL的安装路径下,所以MySQL只能访问到它源目录下的所有目录和文件,解决方式是在登录时直接指定要运行的sql脚本文件,具体步骤如下:

  1. 先登录一下MySQL,创建好要用到的数据库,我创建的数据库名称是mydatabase1
root@4994c041aa3a: mysql -uroot -p 
Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.36 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database mydatabase1;
  1. 退出MySQL,用运行sql脚本文件的方式重新登录
# 这里的mydatabase1就是第一步创建好的数据库,'<'后面的文件就是要运行的sql脚本文件路径
root@4994c041aa3a: mysql -uroot -p mydatabase1 < /home/mydatabase.sql
  1. 重新登录进去后发现文件已运行成功
root@4994c041aa3a: mysql -uroot -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.36 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| mydatabase1        |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use mydatabase1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> show tables;
+-----------------------------+
|    Tables_in_mydatabase1    |
+-----------------------------+
| t_disk                      |
| t_crl                       |
| t_menu                      |
| t_user                      |
+-----------------------------+
4 rows in set (0.00 sec)

补充:

# CentOS7下docker启动MySQL命令
docker pull mysql:5.7
docker run -tid --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7
docker exec -it mysql /bin/bash
mysql -uroot -p
Enter password: