Mysql : convertir un select en csv

Actuce

Cette astuce permet de générer un fichier csv directement à partir d’une requête mysql.

1
SELECT champ1, champ3, champ6, champ7 FROM matable INTO OUTFILE '/var/www/replication/transfert.csv' FIELDS ESCAPED BY '' TERMINATED BY ';';

Petit bémol les champs vide sont remplacé par NULL systématiquement.

Perso j’utilise généralement cette astuce dans des bash donc derrière je fais un rechercher/remplacer pour virer les NULL du type :

#conversion des champs NULL en espace
sed -i 's/NULL/ /g' /var/www/replication/transfert.csv

Export mysql vers sqlite3 en shell

Ce tuto permet d’exporter certain champs d’une table mysql et de les importer dans une table sqlite3.

Prérequis :

  • Un dossier /var/www/replication/ qui contiendra nos scripts.
  • Un dossier /var/www/db/ qui contient les base de données sqlite dont address_book.db qui nous intéresse.
  • Une base de donnée mysql avec une table dont on veut exporter des champs

Le dossier replication contiendra 3 fichiers :

  • replication.sh : le bash que l’on exécutera
  • importer.sql : qui contient les actions sqlite3
  • transfert.csv : généré dynamiquement pour le transfert

replication.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
#definition des variables
date=`date "+%F-%H%M%S"`
localDir=/var/www/replication
dbDir=/var/www/db
dbLogin=monlogin
dbPswd=monpasswordmysql
 
#suppression du csv
rm $localDir/transfert.csv
#export mysql en csv
mysql --user=$dbLogin --pass=$dbPswd --database=<span style="color: #ff6600;">nombase</span> --execute="select <span style="color: #ff6600;">champ1, champ3, champ6, champ7</span> from <span style="color: #ff6600;">matable</span> INTO OUTFILE '/var/www/replication/transfert.csv' FIELDS ESCAPED BY '' TERMINATED BY ';';"
 
#conversion des champs NULL en espace
sed -i 's/NULL/ /g' $localDir/transfert.csv
 
#import du csv dans sqlite3
sqlite3 $dbDir/address_book.db ".read "$localDir"/importer.sql"
 
exit 0

importer.sql

1
2
3
4
DELETE FROM contact;
.MOD csv
.separator ;
.import /var/www/replication/transfert.csv contact

transfert.csv

Il contiendra des données au format csv.

Crontab quelques astuces

Quelque astuces :

Réfs : http://doc.ubuntu-fr.org/cron

Format d’un cron

* * * * *  [user] [type d'exécution] [fichier || commande]

Il y a cinq champs, séparés par un espace ou une tabulation, dont chacun est paramétré soit par, un nombre, une étoile (*), ou le texte approprié. Les champs sont, dans l’ordre, minute, heure, jour du mois, mois et jour de la semaine. Le mois et le jour de la semaine permettent l’utilisation d’une abréviation (suivant les jours et mois en anglais), telle que jan pour janvier (January) ou thu pour jeudi (Thursday).

Syntaxe pour exécuter une commande toutes les 5 mins

*/5 * * * * root /bin/sh /var/www/replication/replication.sh

Syntaxe pour exécuter une commande toutes les jours à 21h30

30 21 * * * root /bin/sh /var/www/replication/replication.sh

Syntaxe pour exécuter un fichier .sh

* * * * * root /bin/sh /var/www/replication/replication.sh
Attention dans votre script.sh si vous appelez des fichiers à bien les appeler avec leur url absolue ! 

PHP : connaitre l’IP publique de son serveur

Petite fonction php pour connaitre l’IP publique de son serveur.

Attention il ne s’agit pas de l’IP du client mais bien celle du serveur. Utile si vous êtes dans un réseau.

/**
 * function monIP : to know the public IP of server
 * @param  
 * @return IPv4 address or false 
 */
function monIP(){
    preg_match('/((\d{1,3}\.){3}\d{1,3})/', file_get_contents("http://www.monip.org/"), $matches);
    if(isset($matches[0])) return $matches[0];
    else return false;
}
 
//Ex : echo monIP();

SQL CAST: comparer des colonnes de type différents

En SQL pour comparer par exemple des nombres qui sont stockés dans des colonnes de type vachar, vous risquez d’avoir des problème (surtout avec MS SQL). Une astuce :

CAST (matable AS type_à_utiliser_pour_comparer)

Exemple de type :

  • real
  • int
  • decimal(9,7)
  • float

ex :  soit les colonnes TarifA et TarifB

SELECT * FROM matable WHERE (CAST(TarifA AS REAL) - CAST(TarifB AS REAL))> 0;

Perso pour comparer des nombre je prends le type real pour tous.

Shell : script de sauvegarde de dossier

Script qui génère un tar.gz du named.conf et du dossier zones tous les jours à 3h du matin et supprime les sauvegardes de plus de 2 mois.

 

Créer le fichier backup_01.sh

1
nano /var/www/test/backup01/backup_01.sh
  • copier dedans le code ci-dessous :

 

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
 
#definition des variables
dir=/var/www/test/dir01
bkdir=/var/www/test/backup01
date=`date "+%F-%H%M%S"`
 
#suppression des sauvegardes de plus de 2 mois
find . -maxdepth 1 -type f -user root -ctime +59 -name "bkp01_*.tar.gz" -exec rm {}  \;
#generation de la sauvegarde journaliere
tar -zcvf $bkdir/bkp01_ns01_$date.tar.gz $dir/

 

Editer le fichier /etc/crontab

nano /etc/crontab
  • ajouter la ligne ci-dessous :
0 3 * * * root /bin/sh /var/www/test/backup01/backup_01.sh
  • Le script s’exécutera tous les jours à 3h du matin avec le compte root

Liferay : Changer le port d’afficher de :8080 => :80

Changer le port d’afficher de :8080 => :80

Dans $LIFERAY_HOME/conf/server.xml

Changer la ligne :

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8" />

En

<Connector port="80" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8" />