Alte Daten verschieben
Hi,
ich würde gerne alte Daten aus einer Datenbank in eine andere verschieben.
Als Ansätze hab ich bis jetzt:
mysqldump -uuser -ppass -w"timestamp < NOW() - INTERVAL 1 DAY" database
table1 table2 > archive.dmp
echo "DELETE FROM table1,table2 WHERE timestamp < NOW() - INTERVAL 1 DAY" |
mysql -uuser -ppassword database
Es ist ja offensichtlich, dass zwischen "mysqldump" und "mysql" eine
Zeitdifferenz existiert, die suboptimal ist.
Wie verhindere ich das?
Danke und Gruß, Helmut
--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
Re: Alte Daten verschieben
Hallo Helmut,
> Es ist ja offensichtlich, dass zwischen "mysqldump" und "mysql" eine
> Zeitdifferenz existiert, die suboptimal ist.
>
> Wie verhindere ich das?
now() nur einmal abfragen und das Ergebnis verwenden.
Siegfried
--
http://www.schmidt.ath.cx
Re: Alte Daten verschieben
Siegfried Schmidt <usenet-57 [at] schmidt.ath.cx> wrote:
>> Es ist ja offensichtlich, dass zwischen "mysqldump" und "mysql" eine
>> Zeitdifferenz existiert, die suboptimal ist.
>>
>> Wie verhindere ich das?
>
> now() nur einmal abfragen und das Ergebnis verwenden.
Ich verwende ja einmal mysqldump, und einmal mysql, wie kann ich die
Variable denn übergeben/zwischenspeichern? Meine SQL Künste halten sich in
Grenzen...
--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
Re: Alte Daten verschieben
Am Mon, 14 Jan 2008 20:43:13 +0100 schrieb Helmut Schneider:
> Siegfried Schmidt <usenet-57 [at] schmidt.ath.cx> wrote:
[...]
>> now() nur einmal abfragen und das Ergebnis verwenden.
>
> Ich verwende ja einmal mysqldump, und einmal mysql, wie kann ich die
> Variable denn übergeben/zwischenspeichern? Meine SQL Künste halten sich
> in Grenzen...
Indem du das ganze in ein Shell-Script verpackst, und in diesem vor den
beiden genannten Aufrufen das Datum in eine Variable speicherst, welche
du dann verwendest.
Norbert
Re: Alte Daten verschieben
Helmut 'Ingrid' Schneider <jumper99 [at] gmx.de> wrote:
> Siegfried Schmidt <usenet-57 [at] schmidt.ath.cx> wrote:
>
>>> Es ist ja offensichtlich, dass zwischen "mysqldump" und "mysql" eine
>>> Zeitdifferenz existiert, die suboptimal ist.
>>>
>>> Wie verhindere ich das?
>>
>> now() nur einmal abfragen und das Ergebnis verwenden.
>
> Ich verwende ja einmal mysqldump, und einmal mysql, wie kann ich die
> Variable denn übergeben/zwischenspeichern? Meine SQL Künste halten sich
> in Grenzen...
set [at] date = NOW();
insert into database2.table (select * from database1.table where timestamp <
[at] date - interval 1 day);
delete from database1.table where timestamp < [at] date - interval 1 day;
Stimmt das so?
--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
Re: Alte Daten verschieben
Norbert Tretkowski <norbert [at] tretkowski.de> wrote:
> Am Mon, 14 Jan 2008 20:43:13 +0100 schrieb Helmut Schneider:
>> Siegfried Schmidt <usenet-57 [at] schmidt.ath.cx> wrote:
> [...]
>>> now() nur einmal abfragen und das Ergebnis verwenden.
>>
>> Ich verwende ja einmal mysqldump, und einmal mysql, wie kann ich die
>> Variable denn übergeben/zwischenspeichern? Meine SQL Künste halten sich
>> in Grenzen...
>
> Indem du das ganze in ein Shell-Script verpackst, und in diesem vor den
> beiden genannten Aufrufen das Datum in eine Variable speicherst, welche
> du dann verwendest.
[root [at] BSDHelmut ~]# echo "select now();" | mysql -uuser -ppass
now()
2008-01-14 23:00:21
[root [at] BSDHelmut ~]# DATE=$(date "+%Y-%m-%d %H:%M:%S"); echo "select * from
database.table where timestamp < $DATE - INTERVAL 1 day;"
select * from database.table where timestamp < 2008-01-14 23:00:31 -
INTERVAL 1 day;
[root [at] BSDHelmut ~]# DATE=$(date "+%Y-%m-%d %H:%M:%S"); echo "select * from
database.table where timestamp < $DATE - INTERVAL 1 day;" |
mysql -uuser -ppass
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for the right
syntax to use near '23:00:48 - INTERVAL 1 day' at line 1
[root [at] BSDHelmut ~]#
Ich hab (offensichtlich nicht) alle Variationen von DATE mit einfachen,
doppelten, gar keinen Anführungszeichen durch, habs mit [...]; echo "set
[at] DATE="$DATE"" versucht, aber es kommt immer nur die Uhrzeit an. Eigentlich
könnt es mir egal sein, da mir mein SQL Syntax eh viel besser gefällt, aber
sei bitte so nett, und sag mir, wo der Wurm steckt.
--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
Re: Alte Daten verschieben
Hallo Helmut,
> [root [at] BSDHelmut ~]# echo "select now();" | mysql -uuser -ppass
> now()
> 2008-01-14 23:00:21
DATE=´mysql -s -s -uuser -ppass --exec="select now();"´
> [root [at] BSDHelmut ~]# DATE=$(date "+%Y-%m-%d %H:%M:%S"); echo "select *
> from database.table where timestamp < $DATE - INTERVAL 1 day;" |
> mysql -uuser -ppass
echo "select * from database.table where timestamp < '$DATE' - INTERVAL 1
day;" | mysql -uuser -ppass
Siegfried
--
http://www.schmidt.ath.cx
Re: Alte Daten verschieben
Siegfried Schmidt <usenet-57 [at] schmidt.ath.cx> wrote:
>> [root [at] BSDHelmut ~]# echo "select now();" | mysql -uuser -ppass
>> now()
>> 2008-01-14 23:00:21
>
> DATE=´mysql -s -s -uuser -ppass --exec="select now();"´
>
>> [root [at] BSDHelmut ~]# DATE=$(date "+%Y-%m-%d %H:%M:%S"); echo "select *
>> from database.table where timestamp < $DATE - INTERVAL 1 day;" |
>> mysql -uuser -ppass
>
> echo "select * from database.table where timestamp < '$DATE' - INTERVAL 1
> day;" | mysql -uuser -ppass
Merci.
--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn