All:

I created this script to analyze the tables on a periodic basis.  It
accounts for changes in the schema by using a database table called SysTable
in each db to be analyzed.

Create table SysTable
        TableName varchar(255) not null
);

We run this once per week now using a CRON job.   

A quick overview: 
        1.  Empty SysTable if it was previously used.
        2.  Get a list of tables in a file
        3.  Load those into SysTable
        4.  Create the analyze statements
        5.  Run them and place the result in a log file.

if [ ! -d /dba] ; then 
        mkdir /dba
fi

mysql db1name -e 'truncate SysTable'
mysql db1name -s -e 'show tables' > /dba/tables_db1name.txt
mysql db1name -e 'load data infile "/dba/tables_db1name.txt" into table
SysTable' 
mysql db1name -s -e 'select concat("analyze table db1name.", TableName,";")
from SysTable' > /dba/analyze_db1name.sql

mysql db2name -e 'truncate SysTable'
mysql db2name -s -e 'show tables' > /dba/tables_db2name.txt
mysql db2name -e 'load data infile "/dba/tables_db2name.txt" into table
SysTable' 
mysql db2name -s -e 'select concat("analyze table db2name.", TableName,";")
from SysTable' > /dba/analyze_db2name.sql

cat analyze_*.sql > analyze.sql
mysql db1name < analyze.sql > analyze.log
rm /dba/tables_*.txt
rm /dba/analyze*.sql

Of course, this can be done with filenames in unix as well using ls, cut and
cat on the .frms in the data directory.  However, the side-effect of having
a table of table names in each data base can be quite desirable.  Consider
that you can add the check table command to this script and
periodically/automatically check the tables too. 

Hope some of you out there find this useful.

Best Regards,
Boyd E. Hemphill
MySQL Certified Professional
[EMAIL PROTECTED]
Triand, Inc.
www.triand.com
O:  (512) 248-2287
M:  (713) 252-4688



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

Reply via email to