Shawn:
Thank you for your reply. I did not know you could reference a Database in a select 
clause, I thought you
could only reference tables.
I do have a followup question. I assume once I have created the dbArchYesterday that
mysqld has the database in memory.Is there way to:
1. write the database to disk,
2. unload the database from memory, if it is in memory,
    in order to file utilities such as tar and gzip to archive and compress the
    database into to a tgz file? 
 
Thank you,
raymond
PS: Is there a document that describes how mysql loads and unloads tables and 
databases in memory?
 

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: Friday, July 30, 2004 9:03
To: Jacob, Raymond A Jr
Cc: [EMAIL PROTECTED]
Subject: Re: How do you archive db daily?



Why not keep your server running and just use scripted SQL to migrate the records from 
one DB to the other? 

CREATE DATABASE dbArchYesterday; 

USE dbArchYesterday; 

CREATE TABLE table1 like dbActive.table1; 
CREATE TABLE table2 like dbActive.table2; 
CREATE TABLE table3 like dbActive.table3; 
CREATE TABLE table4 like dbActive.table4; 

INSERT table1(list of columns to load) 
SELECT list of columns to read 
FROM dbActive.table1 
WHERE alertdate between 'yesterday 00:00:00' and 'yesterday 23:59:59'; 

INSERT table2(list of columns to load) 
SELECT list of columns to read 
FROM dbActive.table2 
WHERE alertdate between 'yesterday 00:00:00' and 'yesterday 23:59:59'; 

INSERT table3(list of columns to load) 
SELECT list of columns to read 
FROM dbActive.table3 
WHERE alertdate between 'yesterday 00:00:00' and 'yesterday 23:59:59'; 

INSERT table4(list of columns to load) 
SELECT list of columns to read 
FROM dbActive.table4 
WHERE alertdate between 'yesterday 00:00:00' and 'yesterday 23:59:59'; 

DELETE FROM dbActive.Table1 
WHERE alertdate between 'yesterday 00:00:00' and 'yesterday 23:59:59'; 

DELETE FROM dbActive.Table2 
WHERE alertdate between 'yesterday 00:00:00' and 'yesterday 23:59:59'; 

DELETE FROM dbActive.Table3 
WHERE alertdate between 'yesterday 00:00:00' and 'yesterday 23:59:59'; 

DELETE FROM dbActive.Table4 
WHERE alertdate between 'yesterday 00:00:00' and 'yesterday 23:59:59'; 


That way you never have to stop your server and you can transform any data you need to 
change during the move. This process also allows you to build additional  summary 
tables during the move, if you want them.  By scripting the entire thing and replacing 
my (hopefully) obvious placeholders with live names and dates, this should perform 
rather well with little or no intervention on your part.  Another advantage to 
scripting this process is that you can monitor each stage and abort the deletes at the 
end if things did not go well. 

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine 


"Jacob, Raymond A Jr" <[EMAIL PROTECTED]> wrote on 07/29/2004 06:26:26 PM:

> I am running MySql 3.23.58-1 on a snort database containing IDS alerts.
> At 12:00am I would like move the previous day's alerts from four tables to 
> a backup database named for the previous day.
> Has anyone implemented such a backup schedule? And if so can someone 
> send me a script?
> 
> I had the following ideas on the subject:
> 1.a. mysql shutdown.
>    b. cp -r database /..../2004-07-29
>    c. mysqlstart 
>       /* I need a single user mode for the delete to work */
>    d. echo "Delete iphdr; Delete tcphdr;Delete acid_event; Delete 
> event"  | mysql -p xxx -u yyyy 
>    e. go to multiuser mode.
> 
> 2. a. Assuming logging turned on 
>         mysqlhotcopy snortdb
>         ( echo "Delete iphdr; Delete tcphdr;Delete acid_event; 
> Delete event" ; mysqlbinlog snort.log ) | mysql -p xxx -u yyy
> 
> 3.  a. $ mysql -p xxx -u yyy
>         1.  if a week then  purge tables:
>                 $mysql> Delete iphdr;
>          ....( repeat for the rest of the tables.)
> 
>        
>         2.  mysql -p xxx -u yyy
>         mysql > Select iphdr.*
>                      from iphdr, event_id
>                      into outfile /.../backup/2004-07-29/iphdr.txt
>                      where timestamp.event_id < 2004-07-29;
>          mysql> Delete iphdr;
>          ....( repeat for the rest of the tables.)
> 
>         mysql > use backsnort_db
>                      Select iphdr.*
>                      from iphdr, event_id
>                      Load infile /.../backup/2004-07-29/iphdr.txt
>          ....( repeat for the rest of the tables.)
> 
>         mysql > exit
>    
>      b. tar cvf   backsnort_db
> 
> That is my best shot if anyone has a more elegant solution I would appreciate
> hearing about it.
> 
> Thank you,
> Raymond


Reply via email to