Import/Export MySQL "rapide"

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 exécuté directement sur le serveur MySQL

Export

#!/bin/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"
done

Import

#!/bin/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

Configuration de Varnish

Mise en place du dépôt Varnish et installation

Pour cela, il faut :

  • Installer la clef PGP du dépôt Varnish
  • Ajouter le dépôt Varnish
  • Installer Varnish
curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-3.0" >> /etc/apt/sources.list.d/varnish.list
apt-get update
apt-get install varnish```

# Activation de varnish et configuration du port 80 a la place du port 6081

```sh
sed -i "#START#s#no#yes#" /etc/default/varnish-
sed -i "s#-a :6081#-a :80#" /etc/default/varnish
sed -i "s#/etc/varnish/default.vcl#/etc/varnish/production.vcl#" /etc/default/varnish

Le fichier de configuration

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

Appelé au début d’une requête, après que la requête complète est été reçue et analysée.

[Lire]

Convertir toutes les tables MyISAM en InnoDB

Pour toutes les tables de toutes les bases

“Version” séquentiel

la conversion de la table suivante sera faite que si la précédente est fini (ignorer les erreurs pour les tables déjà 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 " Bourrin

#!/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)

#!/bin/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” (Bourrin)

#!/bin/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

Extraire les requêtes SQL depuis un binlog au format RAW

Le format des log binaires RAW a un gros inconvenant, lorsque vous voulez rejouer des requêtes 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"
done

Supprimez ou modifiez les paramètres suivant en fonction de vos besoin :

[Lire]

Procéder a une mise a jour de PostgreSQL

Préparation

Vérifier l’encodage des bases :

su - postgres
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

Configurer php dans un alias

Dans le cas ou vous devez faire un alias, pour que l’exécution de php fonctionne, vous devez modifié le documentroot au niveau des paramètres fastcgi

Exemple :

root /var/www/somesite;

location /pma/ {
    alias /usr/share/phpmyadmin/;
}

location ~ ^/pma/(.+\.php)$ {
    alias /usr/share/phpmyadmin/$1;
    include        fastcgi_params;
    fastcgi_pass   php;
    fastcgi_param  DOCUMENT_ROOT      /usr/share/phpmyadmin;
}

Gérer la mise en cache des fichiers static

Vous pouvez procéder de la manière suivante

location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
    expires 24h;
    log_not_found off;
}

Sécuriser vos Vhosts

Uniquement les requêtes GET HEAD et POST sont autorisé

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 444;
}

Pour ne pas loger les accès aux fichiers favicon.ico et robots.txt

location = /favicon.ico {
    log_not_found off;
    access_log off;
}
location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

L’accès aux fichiers caché peuvent être dangereux tel qu’un .bash_history contant un mot de passe tapé par erreur ou un .my.cnf avec un compte MySQL, l’accès a tous les fichiers caché est donc interdit :

[Lire]

Utilisation de la compression gzip

Liste de paramètre possible pour activer la compression Gzip au niveau de “http”

gzip            on;
gzip_min_length 1000;
gzip_vary       on;
gzip_comp_level 6;
gzip_proxied    any;
gzip_types      text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers    16 8k;
gzip_disable    "MSIE [1-6].(?!.*SV1)";

Configurer vos logs

Ajouter la ligne ci-dessous dans vos “server”, la variable $host reprend le hostname demandé

access_log  /var/log/nginx/$host-access.log;

Pour configurer la rotation des logs sous FreeBSD, ajouter la ligne ci-dessous dans le fichier de configuration /etc/newsyslog.conf

/var/log/nginx/*.log www:root   640  7     *    @T00    GJ        /var/run/nginx.pid 30