30/jan/2012 Posté dans MySQL | 4 commentaires L’utilisation maximum de la mémoire vive par MySQL se calcule de la manière suivante d’après mysqltuner.pl :
key_buffer_size + max_tmp_table_size + ( read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size ) * max_connections
max_tmp_table_size : si tmp_table_size > max_heap_table_size -> max_heap_table_size sinon tmp_table_size
20/jan/2012 Posté dans MySQL | 0 commentaire export.sh
Les données sont exporté avec mysqldump et le paramètre -T
- -T : Creates tab separated textfile for each table to given path. (creates .sql and .txt files). NOTE: This only works if mysqldump is run on the same machine as the mysqld daemon.
Ce script doit donc etre executé directement sur le serveur MySQL
#!/usr/bin/env bash
DST='/var/backup/mysql/dump'
for bdd in `mysql --skip-column-names -B -e "show databases;" | egrep -v "^information_schema$|^mysql$"`; do
echo -ne $bdd
mysql --skip-column-names -B -e "SHOW CREATE DATABASE $bdd;" | cut -d" " -f2- > $DST/create-$bdd.sql
for table in `mysql --skip-column-names -B $bdd -e "show tables;"`; do
mkdir $DST/$bdd 2>/dev/null 1>&2
chown mysql:mysql $DST/$bdd
echo -ne "."
mysqldump -T $DST/$bdd/ $bdd $table
done
echo -ne "\r\n"
doneimport.sh
#!/usr/bin/env bash
SRC='/var/backup/mysql'
for bdd in `ls -1 $SRC`; do
echo -ne $bdd
for table in `ls -1 $SRC/$bdd | awk -F. '{print $1}' | sort | uniq`; do
mysql $bdd -e " SET foreign_key_checks = 0;
SOURCE $SRC/$bdd/$table.sql;
LOAD DATA INFILE '$SRC/$bdd/$table.txt'
INTO TABLE $table;
SET foreign_key_checks = 1;"
echo -ne "."
done
echo -ne "\r\n"
done 18/jan/2012 Posté dans MySQL | 0 commentaire Pour toutes les tables de toutes les bases
« Version » séquentiel
la convertion de la table suivante sera faite que si la precedente est fini (ingnorer les erreurs pour les tables deja en InnoDB
)
#!/usr/bin/env bash
for db in `mysql --batch --skip-column-names -e "show databases;" | egrep -v "mysql|information_schema|performance_schema|lost"`; do
echo "# "$db
for table in `echo "show tables" | mysql --batch --skip-column-names $db`; do
echo "-- "$table
mysql $db -e "ALTER TABLE $table ENGINE = InnoDB;"
done
done
« Version » Bourine
#!/usr/bin/env bash
for db in `mysql --batch --skip-column-names -e "show databases;" | egrep -v "mysql|information_schema|performance_schema|lost"`; do
echo "# "$db
for table in `echo "show tables" | mysql --batch --skip-column-names $db`; do
echo "-- "$table
mysql $db -e "ALTER TABLE $table ENGINE = InnoDB;" &
done
done
Pour toutes les tables d’une base
Vous pouvez le faire de manière soft (Table par table)
#!/usr/bin/env bash
DATABASENAME="votrebdd"
for i in `echo "show tables" | mysql --batch --skip-column-names $DATABASENAME`; do
mysql $DATABASENAME -e "ALTER TABLE `$i` ENGINE = InnoDB;"
done
Ou en version “Multithread” (Bourine)
#!/usr/bin/env bash
DATABASENAME="votrebdd"
for i in `echo "show tables" | mysql --batch --skip-column-names $DATABASENAME`; do
mysql $DATABASENAME -e "ALTER TABLE `$i` ENGINE = InnoDB;" &
done
18/jan/2012 Posté dans MySQL | 0 commentaire Le format des log binaires RAW a un gros inconviant, lorsque vous voulez rejouer des requetes a partir des log binaires, l’extraction de celle ci est plus complexe.
#!/bin/sh
LIST=$(ls -1 /var/log/mysql/mysql-bin.* | grep -v index | awk -F "." '{print $2}')
DIRDST="/mnt/pad/"
DIRSRC="/var/log/mysql"
DATABASE="votrebdd"
echo -n > $DIRDST"/"result.txt
for i in $LIST; do
echo -ne $i
mysqlbinlog --database=$DATABASE --base64-output=DECODE-ROWS --verbose --start-datetime="2012-01-06 00:00:00" --stop-datetime="2012-01-06 13:00:00" $DIRSRC"/mysql-bin."$i | grep "^###" $DIRDST"/"result.txt
echo -ne "\tdone\r\n"
doneSupprimez ou modifiez les parametres suivant en fonction de vos besoin :
- –start-datetime : Date de debut d’extraction
- –stop-datetime : Apres cette date, les logs ne seront plus extrait
Le résultat est presque injectable directement dans MySQL, il nécessite encore quelque traitement
18/jan/2012 Posté dans PostgreSQL | 0 commentaire Préparation
Vérifier l’encodage des bases :
srv-src:~$ su - postgres
postgres@srv-src:~$ psql -l
Liste des bases de données
Nom | Propriétaire | Encodage
-----------+--------------+----------
bdd1 | user1 | UTF8
{...}
(9 lignes)Migration
- Dumper l’intégralité des données :
pg_dumpall > outputfile
- Initialiser le nouvel emplacement en UTF8:
/usr/local/pgsql/bin/initdb --locale=UTF8 -D /usr/local/pgsql/data
Le dossier doit être comme cela :
drwx------ 5 postgres postgres 4096 4 nov. 15:25 base
drwx------ 2 postgres postgres 4096 4 nov. 15:25 global
drwx------ 2 postgres postgres 4096 4 nov. 15:25 pg_clog
-rw------- 1 postgres postgres 3652 4 nov. 15:25 pg_hba.conf
-rw------- 1 postgres postgres 1631 4 nov. 15:25 pg_ident.conf
drwx------ 4 postgres postgres 4096 4 nov. 15:25 pg_multixact
drwx------ 2 postgres postgres 4096 4 nov. 15:25 pg_stat_tmp
drwx------ 2 postgres postgres 4096 4 nov. 15:25 pg_subtrans
drwx------ 2 postgres postgres 4096 4 nov. 15:25 pg_tblspc
drwx------ 2 postgres postgres 4096 4 nov. 15:25 pg_twophase
-rw------- 1 postgres postgres 4 4 nov. 15:25 PG_VERSION
drwx------ 3 postgres postgres 4096 4 nov. 15:25 pg_xlog
-rw------- 1 postgres postgres 16903 4 nov. 15:25 postgresql.conf
lrwxrwxrwx 1 root root 36 4 nov. 15:28 server.crt -> /etc/ssl/certs/ssl-cert-snakeoil.pem
lrwxrwxrwx 1 root root 38 4 nov. 15:29 server.key -> /etc/ssl/private/ssl-cert-snakeoil.key
- Importer les données :
/usr/local/pgsql/bin/psql -d postgres -f outputfile