Cool idea, but I don't think you can really do
it. When I try, mysql just gives me back the
syntax stuff.  <sigh>  I'm a bit perplexed - I
would have thought this would be a semi-common
issue in db maintenance, but no one seems to have
set this up.  I'm still trying, please send any
other ideas/suggestions my way...   thx!!

--- Dan Greene wrote:
> you may be able to put both statements to a
> text file, let's call it deleteold.sql
> 
> then your cron job would be :
> 
> mysql (put your connect stuff here) <
> deleteold.sql
> 
> > From: Scott H
> > Well, it sort of helps.  But that section is
> > about future enhancements intended for mysql.
> > I need to set something up now, with the
> current
> > stable version.  One thing I read (can't find
> it
> > now) indicated that the current version (I'm
> > actually running 4.0.15a) has "limited"
> support for subqueries - but I don't know 
> >exactly how far that goes. 
> > 
> > So let me set the stage a bit more - I'll
> assume
> > for now there is no reasonably simple way to
> work
> > with the actual size of the database on disk,
> and
> > instead will go with the idea that I can
> expect
> > the size of any one record to be of some
> average.
> >  So, according to Dan's suggestion, if I do a
> > little math, and control the number of
> records, I
> > can control the size of the db --
> approximately. 
> > That's fine.  Thus if have "seq" as an
> > autoincrement field, and I wanted to stay
> around 
> > say 1000 records, deleting the oldest
> records, I
> > would need to run a cron job that would
> somehow
> > nest or relate these 2 sql statements:
> > 
> > select (@aa:=seq) as low_seq from logtable
> order
> > by seq limit 1000,1
> > 
> > delete from logtable where seq < @aa
> > 
> > I've tried putting this into a subquery
> format
> > but no luck.  But I'm a noob, so I keep
> trying,
> > thinking I might hit on the right syntax. 
> Or, is
> > there some way to pull the value of "low_seq"
> > into an environment variable and use it in a
> > script file to run the 2nd statement?  Other
> > ideas?
> > 
> > thanks,  scott
> > 
> > --- Michael McTernan wrote:
> > > >From the manual:
> > > 
> > > 1.8.4.1 Subqueries
> > > 
> > > Subqueries are supported in MySQL version
> 4.1.
> > > See section 1.6.1 Features
> > > Available in MySQL 4.1.
> > > 
> > > Hope that helps,
> > > 
> > > Mike
> > > 
> > > > From: Scott H
> > > > OK, I *THINK* I follow you here.  Couple
> of
> > > > questions.  I'm reading an online
> tutorial
> > > trying
> > > > to figure this out, and I am led to
> believe
> > > mysql
> > > > can't do nested queries, aka sub-queries.
> But
> > > you
> > > > say it can? Is this recent?  And I don't
> have
> > > a
> > > > timestamp field, I have an autoincrement
> > > field,
> > > > but what do you mean by the "(@aa:=id)"
> > > thing?  I
> > > > don't follow that.  thanks.
> > > >
> > > > --- Dan Greene
> > > <[EMAIL PROTECTED]>
> > > > wrote:
> > > > > What I would do is a classical
> > > guesstimate....
> > > > >
> > > > > find the average size per record (data
> file
> > > > > size + index file(s) size / # records
> in
> > > table)
> > > > >
> > > > > using that, find the data used per day
> > > > >
> > > > > using that, figure out how many days,
> on
> > > > > average it takes to hit 20GB
> > > > >
> > > > > let's say it's 89 days.
> > > > >
> > > > > right off the top, take 10% off for
> safety,
> > > now
> > > > > we're at 80 days
> > > > >
> > > > > presuming your table has a timestamp
> field:
> > > > >
> > > > > delete from log_table WHERE
> TO_DAYS(NOW())
> > > -
> > > > > TO_DAYS(date_col) > 80
> > > > >
> > > > > if you don't have a timestamp field,
> but
> > > you do
> > > > > have an autoincrement id field:
> > > > >
> > > > > figure out number of records on average
> =
> > > 20gb
> > > > > (say it's 2M)
> > > > > again, use 10% for safety (1.8M)
> > > > >
> > > > > select (@aa:=id) as low_id from
> logtable
> > > order
> > > > > by id limit 18000000,1
> > > > > delete from logtable where id < @aa
> > > > >
> > > > > (do subqueries work with a limit
> clause?)
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Scott H
> > > > > [mailto:[EMAIL PROTECTED]
> > > > > > Sent: Wednesday, November 12, 2003
> 11:19
> > > AM
> > > > > > To: Dan Greene; MySQL Mailing List
> > > > > > Subject: RE: maintaining size of a db
> > > > > >
> > > > > >
> > > > > > Yes sir, exactly.  It's just that's
> what
> > > I'm
> > > > > > looking for, and can't figure out.  I
> can
> > > set
> > > > > up
> > > > > > a cron job, but what exactly would
> the
> > > SQL
> > > > > delete
> > > > > > statement be that would allow me to
> > > delete
> > > > > old
> > > > > > records in such a way that the db
> > > maintains
> > > > > an
> > > > > > approximately constant size on disk?
> > > > > (Failing
> > > > > > that perhaps a delete statement that
> > > would
> > > > > just
> > > > > > have it maintain a constant # of
> records?
> > > > > > ...maybe this would be much simpler?)
> > > > > >
> > > > > > --- Dan Greene wrote:
> > > > > > > cronjob a sql script that runs a
> delete
> > > > > > > statement for old jobs daily
> > > > > > >
> > > > > > > > --- Egor Egorov wrote:
> > > > > > > > > Scott H wrote:
> > > > > > > > >> Can't seem to find this one in
> the
> > > > > manual
> > > > > > > or
> > > > > > > > >> archives - how do I control a
> db
> > > to
> > > > > > > maintain
> > > > > > > > >> its size to an arbitrary
> value,
> > > say 20
> > > > > GB?
> > > > > > > I
> > > > > > > > >> want to just rotate records,
> > > deleting
> > > > > > > those
> > > > > > > > >> that are oldest.
> > > > > > > > >
> > > > > > > > > You can't restrict size of the
> > > database
> > > > > > > only
> > > > > > > > > with MySQL, use disk quotas.
> > > > > > > >
> > > > > > > > No!  That would just stop mysql
> right
> > > in
> > > > > its
> > > > > > > > tracks (so to speak...) when it
> got
> > > too
> > > > > > > large.
> > > > > > > > But I want old records sloughed
> off
> > > and
> > > > > the
> > > > > > > db to
> > > > > > > > continue running.  (This is for a
> > > central
> > > > > > > syslog
> > > > > > > > box.)



__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to