Ciao, quello che vi presento oggi è un piccolo script, che utilizzo per controllare e riparare tutti i db del server di ILDN.
Partendo dal presupporto che tutti i DB, posso generare nel tempo stati di incosistenza su qualche tabella, abbiamo dunque la necessita di un qualche servizio che in automatico si prenda cura di controllare e riparare tutte le tabelle ISAM dei nostri cari database.
Dunque lo script è il seguente:
#!/bin/bash # MysqlRebuild -- paolo@ildn.net # # The MysqlRebuild is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) any later # version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # details. # # You should have received a copy of the GNU General Public License along with # this program. If not, write to the Free Software Foundation, Inc., 59 Temple # Place - Suite 330, Boston, MA 02111-1307, USA. # MYSQL="/var/lib/mysql" MYSQL_INIT="/etc/init.d/mysql" DEBUG=1; . /lib/lsb/init-functions # apt-get install lsb-base (debian/ubuntu) root () { if [ x"`id -u`" != "x0" ] ; then log_failure_msg "Error: Only root can do this!" exit 1 fi return 0 } start_rebuild() { log_begin_msg "Starting mysqlrebuild..." #/etc/init.d/monit stop $MYSQL_INIT stop # myisamchk --silent -of $MYSQL/*/*.MYI // Pretty alternative :) cd $MYSQL for db in `ls`; do if [ $DEBUG = 1 ]; then echo "DB:" $db; fi cd $MYSQL/$db; myisamchk --silent -of *.MYI; done #/etc/init.d/monit start $MYSQL_INIT start log_end_msg 1 } start() { root start_rebuild } start
Stoppare il server Mysql (eventualmente anche il servizio di monitoraggio come monit)
* Lanciare myisamchk su tutte le tabelle dei vostri DB
* Riavviare il server Mysql
Il mio consiglio dunque è, metterlo in cron.weekly ad una qualche ora mattutina (4/5) in cui il traffico del vostro server è minimo.
Il codice sicuramente non è ottimizzato, ma fa il suo sporco lavoro
Spero vi sia utile.
Paolo
Commenti
Inviato da mizi65 il Lun, 06/11/2006 - 11:31.
correzioni
ho dovuto correggerlo così in 2 punti:
Inviato da paolo il Lun, 06/11/2006 - 13:24.
Re:: correzioni
Mi sembra quel gioco "cerca le differenze"
Ma non potresti evidenziare i cambiamenti e specificare il perchè ?
Grazie
Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network
Inviato da mizi65 il Lun, 06/11/2006 - 22:03.
Re:: correzioni
hai ragione, ma non avendo numeri di riga a disposizione ho creduto fosse + facile mettere il codice intero e lasciare che ognuno giochi con diff
Cmq una modifica è stata qui:
#/etc/init.d/monit stop MYSQL_INIT stop
diventato
mancava il $
l'altro è
che è diventato
altrimenti mi trovava solo il primo db
mi sono accorto ora che nella mia versione di codice completo avevo dimenticato lo / fra $MYSQL e $db
Inviato da paolo il Gio, 09/11/2006 - 17:28.
Re:: correzioni
Perfetto cosi è molto più chiaro, aggiorno subito lo script
Paolo
Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network