mysqldump: impossible de trouver la table: “|”
J'essaie d'exécuter le fichier 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
Je exécuter si avec -f
drapeau, et j'obtiens une erreur: mysqldump: Couldn't find table: "|"
si je tente cette approche
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\" "
Je obtenir un résultat
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
spawn
ne pas exécuter la commande via un shell, c'est donc le traitement de|
comme un littéral argument, pas un oléoduc de shell.- est-il une solutions?.
- Oui, exécutez la commande via un shell.
- Je créer ce fichier programambly, et de l'exécuter programambly. Donc, nee de s'attendre à une invite de mot de passe.
Vous devez vous connecter pour publier un commentaire.
Lorsque Johannes est à dire utiliser un shell, il signifie:
Enter password:
ignorant monexpect "password:"
exp_internal 1
aprèslog_user
avoir attendons de vous montrer pourquoi le match échoue.mysqldump prend les commandes de paramètre que vous avez donné et après le nom de base de données-il s'attendre à nom de la table pour y être
c'est donc en supposant que | est un nom de table
mise à jour de réponse
pour le dump d'un ensemble d'une ou plusieurs tables,
un ensemble d'une ou de plusieurs bases de données complètes
ou l'ensemble d'un serveur MySQL—comme indiqué ici:
mysqldump -h [server] -u [user] -p[password] db1 | mysql -h [server] -u [user] -p[password] db2
est la solution standard pour les db clonage!mysqldump -h [server] -u [user] -p[password] db1 | mysql -h [server] -u [user] -p[password] db2
vous-même. Je l'utilise depuis de nombreuses années, et je sais que cette commande fonctionne.