CyberTek - the future at the present!

Archive for the ‘mysql’ Category

Script per salvataggio databases di mysql

Posted by: (Set 21)

Oggi vi presento un comodo database ingrado di automatizzare il salvataggio dei nosri database mysql, in aggiunta allo script originale si può aggiungere al termine del salvataggio e compressione dei singoli databases in poche righe la copia su un server remoto e un messaggio di report nella nostra casella email.

 

#!/bin/bash
# Shell script to backup MySql database
# To backup Nysql databases file to /backup dir and later pick up by your
# script. You can skip few databases from backup too.
# For more info please see (Installation info):
# http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/01/mysql-backup-script.html
# Last updated: Aug – 2005
# ——————————————————————–
# This is a free shell script under GNU GPL version 2.0 or above
# Copyright (C) 2004, 2005 nixCraft project
# Feedback/comment/suggestions : http://cyberciti.biz/fb/
# ————————————————————————-
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
#Updated Sep – 2007 by CyberTek – http://www.cybertek.it

# ————————————————————————-

MyUSER="SET-MYSQL-USER-NAME" # USERNAME
MyPASS="SET-PASSWORD" # PASSWORD
MyHOST="localhost" # Hostname

# Linux bin paths, change this if it can't be autodetected via which command
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"

# Backup Dest directory, change this if you have someother location
DEST="/backup"

# Main directory where backup will be stored
MBD="$DEST/mysql"

# Get hostname
HOST="$(hostname)"

# Get data in dd-mm-yyyy format
NOW="$(date +"%d%m%Y")"

# File to store current backup file
FILE=""
# Store list of databases
DBS=""

# DO NOT BACKUP these databases
IGGY="test"

[ ! d $MBD ] && mkdir p $MBD || :

# Only root can access it!
$CHOWN 0.0 R $DEST
$CHMOD 0600 $DEST

# Get all database list first
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"

for db in $DBS
do
skipdb=1
if [ "$IGGY" != "" ];
then
for i in $IGGY
do
[ "$db" == "$i" ] && skipdb=1 || :
done
fi

if [ "$skipdb" == "-1" ] ; then
FILE="$MBD/$db.$HOST.$NOW.gz"
# do all inone job in pipe,
# connect to mysql using mysqldump for select mysql database
# and pipe it out to gz file in backup dir :)
$MYSQLDUMP u $MyUSER h $MyHOST p$MyPASS $db | $GZIP 9 > $FILE
fi

done 

# copy on remote server
echo '*******************Example_Backup*******************' > /root/mybackup.txt
echo \ >> /root/mybackup.txt
date >> /root/mybackup.txt
echo \ >> /root/mybackup.txt
echo '*********************Details*********************' >> /root/mybackup.txt
#ricordati che nel comando scp puoi non specificare la password se hai autorizzato una key sul sistema di destinazione
#diversamente dovrai farlo

scp /backup/mysql/* root@example.dom:/home/backup/example/mysql/
ls -oh /backup/mysql/ >> /root/mybackup.txt
echo '*************************************************' >> /root/mybackup.txt
#invia una email  col report del lavoro eseguito
mail -s "Example Backup" example@example.dom < /root/mybackup.txt

#remove after upload
rm -f /backup/mysql/*

Published in: development, mysql, scripts, tips

MySQL Sidu (client mysql via web)

Posted by: (Lug 3)

 Naturalmente il prodotto non è ancora ingrado di competere per potenzialità con phpMyAdmin, ma a voltela semplicità e la leggerezza potrebbero essere il nostromotivo di scelta. Se dobbiamo intragrare un client mysql via web forse possiamo rivolgerci a questo prodotto. Per andare al sito di Sidu fai click qui.

 

sidu

 

 

  • Ordinamento e filtraggio delle tabelle del database.
  • Possibilità di connettersi a hosts e databases locali e remoti.
  • Accesso sicuro per prevenire accessi non autorizzati ai dati.
  • Funzionamento con utenti e sessioni multiple contemporanee.
  • Caching dei db e delle tabelle per consentire una visualizzazione veloce.
Published in: mysql, tips, www

Ottimizzare MySQL

Posted by: (Giu 19)

Non parleremo ora di come creare delle tabelle ottimizzate per dar risultati migliori. Ricordo solamente che i campi indicizzati migliorano molto i tempi di esecuzione. Parleremo invece di alcuni piccoli accorgimenti per rendere più performante MySQL che solitamente viene installato nella maggior parte delle distro senza troppi parametri di tuning. Le info sono riferite a distro Linux ma posso essere facilmente adattate anche ad altri OS.

Il file di configurazione si trova solitamente in /etc/my.ini.

Eempio di my.ini:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
set-variable    = key_buffer=64M
set-variable    = max_user_connections=100
set-variable    = query_cache_size=64M
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

 

buffers: l'incremeto di qualunque buffer permetterà di ottenere un database molto più veloce. Impostate quindi i buffers in base alla quantità di memoria disponibile, tenendo presente i consumi effettuati dal sistema operativo e da altri applicativi e servizi in uso. Se si alloca troppa memoria pur non avendone a disposizione si può incappare in peggioramento generale delle prestazioni del sistema stesso.

Wait_timeout: rappresenta il tempo che trascorre prima che venga chiusa automaticamente una connessione a Mysql a causa dell'inattività. Abbassare il numero fa migliorare le prestazioni. In questo caso si deve giocare anche sul tipo di connessioni e sulla loro presunta durata per tarare al meglio il parametro.

back_log: controlla quante connessioni simultanee è in grado di reggere Mysql mentre crea nuovi thread. Minore è il numero, maggiore sarà la velocità. Attenzione, è facile degradare le prestazioni non settando correttamente tale parametro, utilizzatelo solo in caso di reale necessità.

Max_user_connections: imposta il numero massimo di connessioni contemporanee consentite ad un utente. È molto utile nei sistemi in cui allo stesso server MySQL hanno accesso più utenti in contemporanea.

Delayed_queue_size: numero di righe accodabili con INSERT DELAYED. Meno saranno le righe accodabili, più veloce sarà Mysql.

Sort_buffer_size: imposta la dimensione del buffer destinato all'implementazione delle clausole ORDER BY e GROUP BY. Per rendere le query più performanti conviene impostare questo parametro ad un valore superiore a 2M.

Table_cache: controlla il numero di tabelle aperte per tutti i thread; aumentando questa variabile, aumenteranno le tabelle caricate contemporaneamente e l'esecuzione di Mysql sarà molto più veloce. Attenzione a questo parametro, i sistemi operativi hanno un limite di puntatori a files apribili contemporaneamente, se si supera tale limite si può incorrere in anomalia del sistema.

Thread_cache_size: imposta il numero di thread da mantenere in cache. Questa funzionalità rende l'uso di thread molto performante.

 

Il comando SHOW STATUS ci aiuta a monitorare in tempo reale quelle variabili, che più di altre ci aiutano a capire quali sono le ottimizzazioni più significative che possiamo apportare:

  • Handler_read_first: indica quante volte il primo record è stato letto dall'indice di una tabella. Se questo accade frequentemente, significa che la tabella non è stata indicizzata correttamente.
  • Innodb_buffer_pool_wait_free: indica il numero di volte che MySQL deve attendere il flushing delle pagine di memoria. Se il valore restituito è alto allora il buffer pool size non è stato correttamente configurato per l'ammontare delle operazioni di scrittura a cui è sottoposto il server.
  • Key_reads: indica il numero di volte che MySQL accede al file system per gli indici del database. Questa operazione rallenta la velocità di esecuzione delle query, per cui se questo valore è alto allora vuol dire che la key buffer è troppo piccolo e va aumentato.
  • Max_used_connections: indica il numero massimo di connessioni che MySQL ha dovuto aprire contemporaneamente durante l'ultimo avvio. Questo da un lato rappresenta un vero benchmark (aiuta a decidere il numero massimo di connessioni che il server può supportare) e dall'altro si presenta come un pratico analizzatore di traffico.
  • Open_tables: indica l'attuale numero di tabelle aperte. Questo valore va analizzato in combinazione con la dimensione della cache della tabella. Di regola la dimensione della table_cache deve essere impostato maggiore di questa variabile. Se il valore della open_tables è molto più basso di table_cache, per evitare problemi di performance, conviene dunque ridurre anche la dimensione della cache. Se invece il valore della open_tables è molto alto e si avvicina alla dimensione della cache allora conviene aumentare table_cache.
  • Select_full_join: indica il numero di full join che MySQL ha eseguito per soddisfare le richieste dei client. Un alto valore indica che anziché usare gli indici, MySQL è stato forzato ad eseguire delle full join. Questo suggerisce la necessità di effettuare una forte indicizzazione di tali tabelle.
  • Slow_queries: indica il numero di query che hanno impiegato più tempo del solito per essere eseguite. Un valore alto ci deve portare ad analizzare lo Slow Query Log per identificare quali sono le slow query da ottimizzare.
  • Threads_connected: indica il numero totale dei client che sono connessi al server in un tal istante.
  • Created_tmp_disk_tables: indica il numero delle tabelle temporanee, che sono state create sul disco anziché in memoria. Visto che accedere alle tabelle su disco è solitamente un'operazione più lenta rispetto a quelle in memoria, il contenuto della variabile sarà inversamente proporzionale alla velocità con cui le query eseguono il comando CREATE TEMPORARY TABLE.
  • Uptime: indica da quanti secondi è attivo il servizio.
Published in: mysql, tips
Powered by pmar s.r.o.