【问题标题】:Easily import a MySQL --tab dump轻松导入 MySQL --tab 转储
【发布时间】:2012-07-13 16:07:50
【问题描述】:

我已经使用--tab 选项转储了一个 MySQL 数据库,该选项为每个表创建 2 个文件(一个带有 create table 的 SQL 文件和一个带有数据的制表符分隔值文件)。

有没有一种简单的方法可以将此目录文件导入 MySQL 服务器?我在mysqlimport 中找不到选项。

【问题讨论】:

    标签: mysql mysqldump mysqlimport


    【解决方案1】:
    for i in `ls *.sql`; do 
      sql_file=$i; 
      table_name=`echo $sql_file | sed "s/.sql$//"`
      mysql -u root database_name < $sql_file
      echo "LOAD DATA LOCAL INFILE '$table_name.txt' INTO TABLE $table_name" | mysql -u root database_name
    done
    

    【讨论】:

      【解决方案2】:

      您可以通过多种方式做到这一点 - 最直接的是

      mysql db < sql_structure_file
      

      这将创建表格。然后做(从mysql客户端)

      LOAD DATA LOCAL INFILE tab_delimited_file INTO TABLE 
      

      (带有适当的名称、分隔符等)

      【讨论】:

        【解决方案3】:

        我正在使用这个 bash 脚本,它首先导入所有 sql 文件来构建表,然后是 txt 文件。数据是使用后台进程并行加载的——基本上模拟了mysqlimport 中的多线程选项。用法是这样的:

        ./import_table.sh database_name /path/to/dump/files
        

        脚本:

        #!/bin/bash
        
        DIR=$(echo $2 | sed 's/\/$//')
        
        function import_sql() {
            mysql $1 < $2;
            echo "mysql $1 < '$2'";
        }
        
        function import_txt() {
            mysqlimport --silent $1 $2;
            echo "mysqlimport --silent $1 '$2'";
        }
        
        for filename in $DIR/*.sql; do
            [ -e "$filename" ] || continue
            import_sql $1 $filename &
        done
        wait
        echo 'ALL SQL IMPORTED';
        
        for filename in $DIR/*.txt; do
           [ -e "$filename" ] || continue
           import_txt $1 $filename &
        done
        wait
        echo 'ALL TXT IMPORTED';
        

        【讨论】:

          猜你喜欢
          • 2012-03-11
          • 2020-11-01
          • 2018-04-16
          • 2012-02-18
          • 1970-01-01
          • 2017-09-27
          • 2011-12-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多