Alte Daten verschieben

Alte Daten verschieben

am 14.01.2008 20:13:10 von Helmut Schneider

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

am 14.01.2008 20:30:31 von Siegfried Schmidt

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

am 14.01.2008 20:43:13 von Helmut Schneider

Siegfried Schmidt 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 14.01.2008 22:07:35 von Norbert Tretkowski

Am Mon, 14 Jan 2008 20:43:13 +0100 schrieb Helmut Schneider:
> Siegfried Schmidt 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

am 14.01.2008 22:29:54 von Helmut Schneider

Helmut 'Ingrid' Schneider wrote:
> Siegfried Schmidt 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 @date = NOW();
insert into database2.table (select * from database1.table where timestamp <
@date - interval 1 day);
delete from database1.table where timestamp < @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

am 14.01.2008 23:15:29 von Helmut Schneider

Norbert Tretkowski wrote:
> Am Mon, 14 Jan 2008 20:43:13 +0100 schrieb Helmut Schneider:
>> Siegfried Schmidt 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@BSDHelmut ~]# echo "select now();" | mysql -uuser -ppass
now()
2008-01-14 23:00:21
[root@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@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@BSDHelmut ~]#

Ich hab (offensichtlich nicht) alle Variationen von DATE mit einfachen,
doppelten, gar keinen Anführungszeichen durch, habs mit [...]; echo "set
@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

am 15.01.2008 01:44:23 von Siegfried Schmidt

Hallo Helmut,

> [root@BSDHelmut ~]# echo "select now();" | mysql -uuser -ppass
> now()
> 2008-01-14 23:00:21

DATE=´mysql -s -s -uuser -ppass --exec="select now();"´

> [root@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

am 15.01.2008 11:02:34 von Helmut Schneider

Siegfried Schmidt wrote:

>> [root@BSDHelmut ~]# echo "select now();" | mysql -uuser -ppass
>> now()
>> 2008-01-14 23:00:21
>
> DATE=´mysql -s -s -uuser -ppass --exec="select now();"´
>
>> [root@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