代码之家  ›  专栏  ›  技术社区  ›  Andrey Yasinishyn

mysqldump:找不到表:“|”

  •  2
  • Andrey Yasinishyn  · 技术社区  · 12 年前

    我尝试执行exp文件:

    #!/usr/bin/expect
    
    # mysql credentials and connection data
    current_db_name='webui_dev'
    new_db_name='db_2013'
    db_host='localhost'
    db_user='root'
    db_pass=''
    
    
    # using a here-document to pass commands to expect. 
    # (the commands could be stored in a file as well)
    expect <<EOF
      log_user 0
      spawn mysqldump -h "$db_host" -u "$db_user" -p "$current_db_name" | mysql -h "$db_host" -u "$db_user" -p "$new_db_name"
      expect "password:"
      send "$db_pass\r"
      log_user 1
      expect eof
    EOF
    

    我执行如果 -f 标志,然后我得到一个错误: mysqldump: Couldn't find table: "|"

    如果我尝试这种方法

    exp_internal 1
      spawn sh -c  "mysqldump -h \"$db_host\" -u \"$db_user\" -p \"$current_db_name\" | mysql -h \"$db_host\" -u \"$db_user\" -p \"$new_db_name\" "
    

    我得到一个输出

    expect: option requires an argument -- f
    usage: expect [-div] [-c cmds] [[-f] cmdfile] [args]
    parent: waiting for sync byte
    parent: telling child to go ahead
    parent: now unsynchronized from child
    spawn: returns {81914}
    
    expect: does "" (spawn_id exp7) match glob pattern "password:"? no
    
    expect: does "Enter password: " (spawn_id exp7) match glob pattern "password:"? yes
    expect: set expect_out(0,string) "password:"
    expect: set expect_out(spawn_id) "exp7"
    expect: set expect_out(buffer) "Enter password:"
    send: sending "\r" to { exp7 }
    
    Enter password: expect: timed out
    
    3 回复  |  直到 12 年前
        1
  •  3
  •   glenn jackman    12 年前

    当约翰尼斯说使用外壳时,他的意思是:

      spawn sh -c "mysqldump -h \"$db_host\" -u \"$db_user\" -p \"$current_db_name\" | mysql -h \"$db_host\" -u \"$db_user\" -p \"$new_db_name\""
    
        2
  •  1
  •   developerCK    12 年前

    mysqldump命令根据您给定的参数,并在数据库名称之后期望表名称出现

    所以它假设 | 是表名

    mysqldump [options] db_name [tbl_name ...]
    

    更新的答案

    为了转储一个或多个表的集合,

    shell> mysqldump [options] db_name [tbl_name ...]
    

    一组一个或多个完整的数据库

    shell> mysqldump [options] --databases db_name ...
    

    或者整个MySQL服务器,如下所示:

    shell> mysqldump [options] --all-databases
    
        3
  •  0
  •   sbgib    4 年前

    在我的Mac上,我使用了以下命令:

    mysqldump -u root -p [database_name] > /Users/rgavila/Documents/_WSCenter/Backup-Jul-5-2021.sql
    

    它很简单,只需包含一个V形(>)即可将文件推出到我想要的位置。

    屏幕在开始工作时静音了。