【问题标题】:How do I import an SQL file using the command line in MySQL?如何在 MySQL 中使用命令行导入 SQL 文件?
【发布时间】:2013-07-14 00:37:58
【问题描述】:

我有一个从phpMyAdmin 导出的.sql 文件。我想使用命令行将它导入到不同的服务器中。

我有一个Windows Server 2008 R2 安装。我把.sql文件放在C盘上,我试过这个命令

database_name < file.sql

它不工作。我收到语法错误。

  • 如何才能顺利导入此文件?
  • 我需要先创建数据库吗?

【问题讨论】:

  • 这些重复的家伙是怎么回事?这确实是一个有其目的的有用问题
  • @ValentinoPereira 你在确定重复的人之前检查过原始问题日期
  • 在我检查了下面的所有答案之后,我必须说你错过了对于那些想要帮助的人来说非常重要的线索。当您将数据转储出数据库时,您未能指定确切的命令。

标签: mysql sql command-line import


【解决方案1】:

试试:

mysql -u username -p database_name < file.sql

检查MySQL Options

注意1:最好使用SQL文件的全路径file.sql

注意2:使用-R--triggers保留原数据库的例程和触发器。默认情况下不会复制它们。

注意 3 如果 MySQL 尚不存在并且导出的 SQL 不包含 CREATE DATABASE(使用 --no-create-db 或 @ 导出),您可能必须从 MySQL 创建(空)数据库987654328@ 选项),然后才能导入。

【讨论】:

    【解决方案2】:

    mysqldump 的常见用途是备份整个数据库:

    mysqldump db_name > backup-file.sql
    

    您可以像这样将转储文件加载回服务器:

    Unix

    mysql db_name < backup-file.sql
    

    Windows命令提示符下也是这样:

    mysql -p -u [user] [database] < backup-file.sql
    

    PowerShell

    cmd.exe /c "mysql -u root -p db_name < backup-file.sql"
    

    MySQL 命令行

    mysql> use db_name;
    mysql> source backup-file.sql;
    

    【讨论】:

    • 只有我一个从来没有在mysql中使用过&lt;操作符吗? (ubuntu18/20)
    • 不知道为什么 Windows 示例包含参数 -u-p 而 Unix 示例没有。 mysql 的接口在两者上是相同的,因此您很可能在 Unix 中需要与此处为 Windows 提供的相同的命令。
    【解决方案3】:

    转到您拥有 MySQL 的目录。

     c:\mysql\bin\> mysql -u username -p password database_name <
     filename.sql
    

    同样要转储所有数据库,使用-all-databases 选项,无需再指定数据库名称。

    mysqldump -u username -ppassword –all-databases > dump.sql
    

    或者您可以使用一些 GUI 客户端(例如 SQLyog)来执行此操作。

    【讨论】:

    • 它是否适用于奇怪的破折号 (–) - 靠近 "all-databases"(也在第一版中)?
    【解决方案4】:

    我们可以使用这个命令从命令行导入SQL:

    mysql -u username -p password db_name < file.sql
    

    例如,如果用户名是root,密码是password。您的数据库名称为bank,SQL 文件为bank.sql。然后,只需这样做:

    mysql -u root -p password bank < bank.sql
    

    记住您的 SQL 文件在哪里。如果您的 SQL 文件位于 Desktop 文件夹/目录中,则转到桌面目录并输入如下命令:

    cd ~/Desktop
    mysql -u root -p password bank < bank.sql
    

    如果您在Project 目录中并且您的SQL 文件在Desktop 目录中。如果你想从Project 目录访问它,那么你可以这样做:

    cd ~/Project
    mysql -u root -p password bank < ~/Desktop/bank.sql
    

    【讨论】:

    • -ppassword 之间不能有空格
    • 日本。这是行不通的。正确的是mysql -u root -p"password" bank &lt; bank.sql
    • 为什么你不能在一行中回答? mysql -u username -ppassword db_name &lt; file.sql
    • 虽然这与此问题/答案完全无关,但当您使用非平凡的数据库时,最好不要以纯文本形式在同一命令中输入密码。不指定密码作为命令的一部分将提示您输入可以安全输入的密码
    • 尤其是因为.bash_history
    【解决方案5】:

    关于导入大文件所花费的时间:最重要的是,由于MySQL的默认设置为autocommit = true,因此需要更多时间。您必须在导入文件之前将其关闭,然后检查导入的工作原理。

    你只需要做以下事情:

    mysql> use db_name;
    
    mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
    

    【讨论】:

    • 有没有办法在用于导入的 mysql 命令的单个命令行中做到这一点?
    • 我同意这是最佳答案autocommit=0 部分在速度方面创造了天壤之别。
    • autocommit=0 可以处理更大的文件吗?比如 8gb 的 sql 文件。
    • 并不总是需要关闭autocommit。值得在编辑器中检查数据库转储,它可能已经以 SET autocommit=0; 开头。
    • @Volomike { echo "SET autocommit=0;";猫 db.sql;回声“提交;”;} | mysql -u what -p - 用于 posix 兼容的命令行,不确定 windows
    【解决方案6】:
    mysql --user=[user] --password=[password] [database] < news_ml_all.sql
    

    【讨论】:

      【解决方案7】:

      有时定义的端口以及该数据库的服务器IP address 也很重要...

      mysql -u user -p user -h <Server IP address> -P<port> (DBNAME) < DB.sql
      

      【讨论】:

        【解决方案8】:

        导入数据库

        1. 开车去:

           d:
          
        2. MySQL 登录

           c:\xampp\mysql\bin\mysql -u root -p
          
        3. 它会要求密码。输入:

           pwd
          
        4. 选择数据库

           use DbName;
          
        5. 提供文件名

           \.DbName.sql
          

        【讨论】:

        • 在 Windows 上,大概?为什么一定要换驱动D:?文件DbName.sql 是否假定位于驱动器D: 的根目录?你能详细说明吗?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 问题/答案应该看起来像今天写的)。
        【解决方案9】:

        添加--force option

        mysql -u username -p database_name --force < file.sql
        

        【讨论】:

          【解决方案10】:

          出于备份目的,制作一个 BAT 文件并使用 Task Scheduler 运行此 BAT 文件。它将备份数据库;只需复制以下行并粘贴到 Notepad 中,然后保存 .bat 文件,然后在您的系统上运行它。

          @echo off
          for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
          for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
          for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
          for /f %%i in ('time /t') do set DATE_TIME=%%i
          for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i
          
          "C:\Program Files\MySQL\mysql server 5.5\bin\mysqldump" -u username -ppassword mysql>C:/%DATE_DAY%_%DATE_TIME%_database.sql
          

          【讨论】:

            【解决方案11】:

            转到您拥有 MySQL 可执行文件的目录。 -u 输入用户名,-p 提示输入密码:

            C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql
            

            【讨论】:

            • 我认为,当您为您的意图添加一些解释时,这对 OP 和其他问题会更有帮助。
            • 只有在 Windows 环境变量中定义了 mysql.exe 时才有效。如果没有,您应该键入 mysql.exe 文件的所有路径。你的语法是错误的。例如:“d:\wamp\bin\mysql\mysql5.5.8\bin\mysql.exe -u YOUR_USERNAME -p DB_NAME wpy.me/en/blog/…
            【解决方案12】:

            我认为它可能对使用Mac OS X的人有用:

            /Applications/xampp/xamppfiles/bin/mysql -u root -p database < database.sql
            

            xampp 替换为mamp 或其他网络服务器。

            【讨论】:

              【解决方案13】:

              如果您在 Mac OS X 上使用 MAMP,这可能会有所帮助:

              /applications/MAMP/library/bin/mysql -u MYSQL_USER -p DATABASE_NAME < path/to/database_sql/FILE.sql
              

              MYSQL_USER 默认为 root。

              【讨论】:

                【解决方案14】:
                1. 打开 MySQL 命令行
                2. 输入你的mysql bin目录的路径并按Enter
                3. 将您的 SQL 文件粘贴到 mysql 服务器的 bin 文件夹中。
                4. 在 MySQL 中创建数据库。
                5. 使用您要导入 SQL 文件的特定数据库。
                6. 键入source databasefilename.sql回车
                7. 您的 SQL 文件上传成功。

                【讨论】:

                • 输入你的mysql bin目录的路径并按下
                【解决方案15】:

                以下步骤有助于将file.sql 上传到 MySQL 数据库。

                第一步:将file.sql.zip上传到任意目录并解压
                注意sudo apt-get install unzipsudo apt-get unzip file.sql.zip
                第 2 步:现在导航到该目录。示例:cd /var/www/html

                第 3 步:mysql -u username -p database-name &lt; file.sql
                输入密码,等待上传完成。

                【讨论】:

                  【解决方案16】:

                  以下命令适用于我在命令行 (cmd) 上 WAMP 上的 Windows 7。

                  d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql
                  

                  【讨论】:

                    【解决方案17】:

                    要一次导入多个 SQL 文件,请使用:

                    # Unix-based solution
                    for i in *.sql ; do mysql -u root -pPassword DataBase < $i ; done
                    

                    对于简单的导入:

                    # Unix-based solution
                    mysql -u root -pPassword DataBase < data.sql
                    

                    对于WAMP

                    REM mysqlVersion - replace with your own version
                    C:\wamp\bin\mysql\mysqlVersion\bin\mysql.exe -u root -pPassword DataBase < data.sql
                    

                    对于 XAMPP:

                    C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql
                    

                    【讨论】:

                      【解决方案18】:

                      要导入单个数据库,请使用以下命令。

                      mysql -u username -p password dbname < dump.sql
                      

                      要导入多个数据库转储,请使用以下命令。

                      mysql -u username -p password < dump.sql
                      

                      【讨论】:

                        【解决方案19】:

                        如果.sql文件包含CREATE DATABASE IF NOT EXISTS db_nameUSE db_name语句,则不需要在命令行中指定数据库的名称。

                        如果 .sql 文件中提到的数据库不存在,请确保您连接的是有权创建数据库的用户。

                        【讨论】:

                          【解决方案20】:

                          如果您的文件夹有多个 SQL 文件,并且您已安装 Git Bash,您可以使用此命令导入多个文件:

                          cd /my-project/data
                          
                          cat *.sql | /c/xampp/mysql/bin/mysql -u root -p 1234 myProjectDbName
                          

                          【讨论】:

                            【解决方案21】:

                            导出特定数据库:

                            mysqldump --user=root --host=localhost --port=3306 --password=test -B CCR KIT > ccr_kit_local.sql
                            

                            这将导出 CCR 和 KIT 数据库...

                            将所有导出的数据库导入特定的 MySQL 实例(您必须在转储文件所在的位置):

                            mysql --user=root --host=localhost --port=3306 --password=test < ccr_kit_local.sql
                            

                            【讨论】:

                              【解决方案22】:

                              我一直遇到没有创建数据库的问题。

                              我是这样解决的:

                              mysql -u root -e "CREATE DATABASE db_name"
                              mysql db_name --force < import_script.sql
                              

                              【讨论】:

                                【解决方案23】:

                                在所有答案中,对于上述问题,这是最好的一个:

                                 mysql> use db_name;
                                 mysql> source file_name.sql;
                                

                                【讨论】:

                                • 但是still very slow(?).
                                • @PeterMortensen - 取决于数据的大小,否则通常很快。
                                【解决方案24】:

                                对我有用的解决方案如下:

                                Use your_database_name;
                                SOURCE path_to_db_sql_file_on_your_local;
                                

                                【讨论】:

                                • 在将我的 sql 文件放入正确的 /bin 目录视图 Windows 资源管理器后,这对我使用 MySQL 命令行客户端有效。谢谢
                                • 有点慢但不会停在中间也不要说MySQL服务器已经消失了。
                                【解决方案25】:

                                我认为值得一提的是,您还可以使用zcat 加载 gzipped(压缩) 文件,如下所示:

                                zcat database_file.sql.gz | mysql -u username -p -h localhost database_name
                                

                                【讨论】:

                                  【解决方案26】:

                                  关于信息,我只是有默认的 root + 没有密码。它不适用于所有以前的答案。

                                  • 我创建了一个具有所有权限和密码的新用户。成功了。

                                  • -ppassword 没有空格。

                                  【讨论】:

                                    【解决方案27】:

                                    要将数据库转储到 SQL 文件中,请使用以下命令。

                                    mysqldump -u username -p database_name > database_name.sql
                                    

                                    要将 SQL 文件导入数据库(确保与 SQL 文件位于同一目录或提供文件的完整路径),请执行以下操作:

                                    mysql -u username -p database_name < database_name.sql
                                    

                                    【讨论】:

                                      【解决方案28】:

                                      在命令行上提供凭据不是一个好主意。上面的答案很好,但忽略了

                                      mysql --defaults-extra-file=etc/myhost.cnf database_name < file.sql
                                      

                                      其中 etc/myhost.cnf 是一个包含主机、用户、密码的文件,您避免在命令行上暴露密码。这是一个示例,

                                      [client]
                                      host=hostname.domainname
                                      user=dbusername
                                      password=dbpassword
                                      

                                      【讨论】:

                                      • 命令行是不稳定的(除非你有键盘记录器或背后的人我希望它在本地执行时是安全的),而文件是永久性的,因此应该是更高的风险,尤其是。当它是纯文本时
                                      • ...但是,mysql 命令确实会发出警告“mysql: [警告] 在命令行界面上使用密码可能不安全。”
                                      【解决方案29】:

                                      我正在使用带有 PowerShell 5 的 Windows 10,我发现几乎所有“类 Unix”的解决方案都不适合我。

                                      > mysql -u[username] [database-name] < my-database.sql
                                      At line:1 char:31
                                      + mysql -u[username] [database-name] < my-database.sql
                                      +                               ~
                                      The '<' operator is reserved for future use.
                                          + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
                                          + FullyQualifiedErrorId : RedirectionNotSupported
                                      

                                      我最终使用了这个命令:

                                      > type my-database.sql | mysql -u[username] -h[localhost] -p [database-name]
                                      

                                      而且效果很好,希望对您有所帮助。

                                      感谢@Francesco Casulaanswer,顺便说一句。

                                      【讨论】:

                                        【解决方案30】:

                                        类似于vladkras's answer to How do import an SQL file using the command line in MySQL?

                                        对我来说主要区别:

                                        1. 数据库必须先存在
                                        2. -p 和密码之间没有空格

                                        shell> mysql -u root -ppassword #note: no space between -p and password
                                        mysql> CREATE DATABASE databasename;
                                        mysql> using databasename;
                                        mysql> source /path/to/backup.sql
                                        

                                        我正在使用 MariaDB 运行 Fedora 26。

                                        【讨论】:

                                        • 但这不是来自命令行的问题精神。它以交互方式使用 MySQL shell。
                                        猜你喜欢
                                        • 2017-06-15
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        相关资源
                                        最近更新 更多