2011-11-13 21:32

Voila le petit script sh que j’ai fait pour faire ça. Il existe la commande MySQL LOAD DATA INFILE, mais cette commande ne crée pas la structure de la table.

#!/bin/sh

MYSQL_ARGS="--defaults-file=/etc/mysql/debian.cnf"
DB="mbctest"
DELIM=";"

CSV="$1"
TABLE="$2"

[ "$CSV" = "" -o "$TABLE" = "" ] && echo "Syntax: $0 csvfile tablename" && exit 1

FIELDS=$(head -1 "$CSV" | sed -e 's/'$DELIM'/` varchar(255),\n`/g' -e 's/\r//g')
FIELDS='`'"$FIELDS"'` varchar(255)'

#echo "$FIELDS" && exit

mysql $MYSQL_ARGS $DB -e "
DROP TABLE IF EXISTS $TABLE;
CREATE TABLE $TABLE ($FIELDS);

LOAD DATA INFILE '$(pwd)/$CSV' INTO TABLE $TABLE
FIELDS TERMINATED BY '$DELIM'
IGNORE 1 LINES
;
"

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

(Voir le commentaire “Posted by John Swapceinski on September 5 2011 5:33am”)

2011-11-13 21:32 · Tags: , ,
2011-03-13 21:42

Voici les quelques lignes que j’utilise pour sauvegarder mes bases de données MySQL sur mon serveur Debian :

#!/bin/sh
# This will dump all your databases

DATE=$(date +%Y%m%d%H%M)

for DB in $(echo "show databases" | mysql --defaults-file=/etc/mysql/debian.cnf -N)
do
        mysqldump --defaults-file=/etc/mysql/debian.cnf $DB > /backup/mysql/${DB}_${DATE}.sql

        gzip /backup/mysql/${DB}_${DATE}.sql
done

# purge old dumps
find /backup/mysql/ -name "*.sql*" -mtime +8 -exec rm -vf {} \;

Vous pouvez le lancer via un cron :

11 1 * * * /usr/local/bin/mysqldump.sh > /tmp/mysqldump.log

De cette manière, toute erreur affichée par le script sera envoyée par mail à l’utilisateur root (adresse configurée dans /etc/aliases).

Sous une autre distribution que Debian, s’il n’existe pas un fichier de mot de passe équivalent dans /etc/mysql/, vous devrez en créer un.

2011-03-13 21:42 · Tags: , ,