2017-02-22 2 views
0

Ich benutze InfiniDB (nicht nach Wahl). Wenn ich die Linux-Shell verwenden, ich bin ganz gut mit einer Datenbank verbinden können:mysql hängt bei der Anmeldung

<user>@<host>:~$ /usr/local/Calpont/mysql/bin/mysql -u <user> -p -h <host> 
Enter password: <password> 

Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 1725 
Server version: 5.1.39 MySQL Community/Calpont InfiniDB Community 2.2.11-1 Fin                    al (COSS LA) 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> use <database_name> 
Database changed 
mysql> 

Aber wenn ich ein Bash-Skript verwenden, hängt es:

<user>@<host>:~$ bash -x /home/aliceell/db_export.sh 
+ DB=al05_09 
+ export_dir=/tmp/ 
++ /usr/local/Calpont/mysql/bin/mysql -u <user> -p -h <host> <db_name> 
Enter password: 

Es reagiert nicht, nachdem ich meine eingeben Passwort und drücken Sie "Enter". Ich muss ctrl-C benutzen, um rauszukommen. Hier

ist der Code, den ich habe:

DB=<db_name> 
export_dir="/tmp/" 

err_exit() 
{ 
echo -e 1>&2 
exit 1 
} 

mysql_data_dir=$(/usr/local/Calpont/mysql/bin/mysql -u <user> -p -h <host> <db_name>) #it hangs at this stage 

if ! (mysqlshow $DB 1>/dev/null); then 
    echo ERROR: unable to access database 
    exit 1 
fi 

echo "connected" 

if ! [ -w $export_dir ]; then 
    echo ERROR: export dir is not writable 
    exit 1 
fi 

ExportTable() 
{ 
/usr/local/Calpont/mysql/bin/mysql -u <user> -p -h <host> <db_name>" 
    SELECT * INTO OUTFILE '/tmp/$T.csv' 
    FIELDS TERMINATED BY '|' 
    LINES TERMINATED BY '\n' 
    FROM $T 
" 
} 

/usr/local/Calpont/mysql/bin/mysql -u <user> -p -h <host> <db_name> "show tables" | 
while read T; do 
    echo exporting $T 
    ExportTable || err_exit 
    sudo mv $mysql_data_dir/$DB/$T.psv $export_dir/ || err_exit 
done 

Ich bin neu zu bash und versuchen, es zu Schleife zu verwenden, um alle Tabellen in meiner Datenbank und exportieren (similar to this script), aber es hat keinen Sinn, wenn ich nicht einmal mit der Datenbank verbinden kann ...

Vielen Dank im Voraus für Ihre Hilfe.

+0

Wie sieht 'db_export.sh' eigentlich aus? – chepner

+0

Es sieht aus wie das Skript, das ich im Post verlinkt habe. Ich habe meinen Beitrag bearbeitet, um den Code hinzuzufügen. Außer dass ich/usr/local/Calpont/mysql/bin/mysql anstatt nur mysql benutzen muss, weil es so für infinidb (afaik) funktioniert. – ale19

Antwort

1

Die Befehlsersetzung, die Sie mysql_data_dir zuweisen, wird nicht interaktiv ausgeführt, daher muss der Befehl mysql ausgeführt werden, seine Ausgabe generieren und beenden, bevor die Ausgabe an die Shellvariable zurückgegeben wird. Schauen Sie sich genau Ihren linked example (Auszug unten) an und Sie werden sehen, dass sein mysql Befehl genau diese Art von Befehlszeile ist; Es enthält einen mysql Befehl, der ausgeführt und in einen awk Befehl für die Nachbearbeitung weitergeleitet wird.

mysql_data_dir=$(mysql $myopts "show variables like 'datadir'" | awk '{sub(/\/$/,"");print$NF}') 

Was Sie tun müssen, ist herauszufinden, was Ihr „one-liner“ mysql Befehl ist und setzen die in Ihrem $().

+0

Ah, danke! Ich wusste nicht, dass die Syntax so funktionierte. Ich habe den Befehl gefunden, den ich brauchte, und jetzt kann ich mich verbinden. Leider kann ich nicht scheinen, den SELECT INTO OUTFILE-Befehl auszuführen: Es scheint die $ T-Variable nicht korrekt zu verwenden. Wenn ich es ausführe, bekomme ich "exporting/usr/local/Calpont/mysql/bin/mysql Ver 14.14 Distrib 5.1.39, für unknown-linux-gnu (x86_64) mit readline 5.1 Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc .... "und listet alle Optionen für MySQL auf. Aber es exportiert tatsächlich nichts ... Hast du eine Chance, dass du weißt, was passiert? – ale19

+0

Ich fügte den Rest des Codes meinem Beitrag hinzu, nur für den Fall, dass jemand hilft – ale19

+0

Sind Sie sicher, dass die Ausgabe des mysql-Befehls, den Sie in Ihre Schleife leiten, nur Tabellennamen erzeugt? Es könnte einige Überschriftenzeilen haben, die übersprungen werden müssen, damit Ihr Code funktioniert. Auch, wenn meine Antwort, oben, Ihre Basisfrage beantwortet, markieren Sie bitte die Antwort als richtig. –

-1

Sie können das Kennwort normalerweise in die Befehlszeile einfügen.

/usr/local/Calpont/mysql/bin/mysql -u [user] -p [PWD] h [host] [db_name]

HINWEIS: Es muss kein Leerzeichen zwischen -p und das Passwort.

Wenn Ihr Kennwort bestimmte Interpunktionszeichen hat, müssen Sie es möglicherweise in Anführungszeichen setzen.

Offensichtlich ist dies der am wenigsten sichere Weg, um es zu tun, aber es ist das einfachste.

+0

Ich kann mein Passwort gut eingeben, also glaube ich nicht, dass dies das Problem ist ... Ich habe es trotzdem versucht, nur für den Fall und es hängt immer noch, nachdem ich das Programm ausgeführt habe ... – ale19

Verwandte Themen