PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Output von mysqldump auf stdout



theton
06.11.2006, 12:12
Wie kann ich mysqldump beibringen, dass es seinen Output nicht auf stderr, sondern auf stdout ausgeben soll?

supersucker
06.11.2006, 12:14
mysqldump foobar 2>&1

klappt nicht?

theton
06.11.2006, 12:29
Nein, geht so nicht. Ich werde mal versuchen das Problem etwas genauer zu erläutern. Ich will z.B. die DB xrms sichern und mache das in einem Skript, das dann beispielsweise folgenden Code ausführt:


echo "Database xrms"
mysqldump -h db.server.net -u root -pmeinpasswort -l -c -v --quote-names xrms > xrms.sql

Dabei kommt dann auf stderr ein Output der Art


-- Retrieving table structure for table ControlledObject...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table ControlledObjectRelationship...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table GroupMember...
-- Sending SELECT query...
-- Retrieving rows...
...

während der echo-Befehl seinen Output auf stdout auswirft.
Diesen Output möchte ich nun zusammen mit anderem Output des Skripts (der auf stdout ausgegeben wird) in eine Logdatei schreiben. Da mysqldump aber auf stderr schreibt, kann ich momentan nur 2 getrennte Log-Dateien verwenden


./meindumpskript > backup.log 2> backup.err

In der backup.log landet jeglicher Output des Skripts (z.B. die echo-Befehle mit den DB-Namen), während in der backup.err nur der Output von mysqldump landet. Nun will ich das aber in einer einzigen Logdatei haben, so dass das Log nachher etwa so aussieht:


Database xrms
-- Retrieving table structure for table ControlledObject...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table ControlledObjectRelationship...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table GroupMember...
-- Sending SELECT query...
-- Retrieving rows...
...

Damit das aber geht, müsste der Output von mysqldump auf stdout ankommen, damit ich es mit einer einfachen Umleitung '>' in die backup.log umleiten kann.

supersucker
06.11.2006, 14:07
Hmm,

kannst du das Ganze nicht einfach an tee pipen?

So müsste das IMHO klappen.

theton
06.11.2006, 14:19
tee liest ja auch nur vom stdin, wenn ich nicht falsch informiert bin.

hoernchen
06.11.2006, 14:51
an sich gibts den parameter -q, wenn ich micht recht erinnere. der schupft nach stdout.

theton
06.11.2006, 15:59
Also in der Manpage ist nichts darüber zu finden, vor allem auch nicht, wie ich tee dazu bewegen könnte von stderr und nicht von stdout zu lesen.
Der Parameter -q von mysqldump sorgt lediglich dafür, dass der Output nicht gebuffert wird, sondern direkt an stdout geleitet wird. Das würde evtl. den Dump etwas beschleunigen, bringt mir aber nichts, wenn ich die "System-Meldungen" von mysqldump auf dem stdout haben will. Der Dump selbst landet ja eh immer auf stdout.
Evtl. ist das mit mysqldump ja auch der falsche Ansatz. Alternative Vorschläge zum Dumpen von MySQL-DBs sind daher auch willkommen. :)