Utilisation MySQLdump
mysqldump basics
se mettre dans le path du bin mysql puis
./mysqldump -u[login] -p[passwordCOLLEau-P] [db_name] > /tmp/[some-file-for-saving-the-datas] [enter password at the prompt]
à mettre dans un crontab si on veut bien faire les choses pour récupérer des données UTF8 en latin1 (p.ex. si on fait du 4.1 → 4.0)
mysqldump Database table --default-character-set=latin1 > insertRechDoc1.sql
erreur lock tables
mysqldump: Got error: 23: Out of resources when opening file './xxx/xxx.MYD' (Errcode: 24) when using LOCK TABLES
mysqldump –skip-lock-tables
Pour sauver toutes les bases en une fois
mysqldump -u[login] -p[password] --all-databases --add-drop-table #quotes vars /usr/local/mysql/bin/mysqldump -u root -p --add-drop-table --quote-names DBNAME > DBNAME.sql
Pour sauver toutes les bases sauf certaines
mysqldump permet pas d'exclure des bases de données!!!
astuce trouvée sur http://lists.nyphp.org/pipermail/talk/2004-October/012361.html, à tester
> mysqldump -A will export all of the databases. But, what if I want to > exclude a particular database? Is it possible? How, please? > > I looked at the documentation and the --help output. I'm hoping > there's an undocumented option. :) Come to think of it, you could do this: ls -al $mysql_dir | grep ^d | egrep -v '\.[\.]?' | grep -v $test | awk '{ mysqldump $9 }' | sh where $mysql_dir is the directory wherein your mysql databases reside and $test is the directory/database you don't want.
marche très bien, voici mon adaptation; voici un autre script plus riche qui fait la même chose
Autre exemple rapide et simple
foreach i (users pre_booking textpv LocalNumbers MainLicences companies) /usr/local/mysql/bin/mysqldump -h external.server.ch -u xxx -pPassword dbName $i | gzip > $i_`date +\%d_\%m_\%Y_\%H:\%M`.sql.gz end
mysqldumplocal.sh
Adapté dans ce script local: mysqldumplocal.sh
Pour sauver une seule table
mysqldump -u[login] -p[password] database table --add-drop-table --default-character-set=latin1 > database.table.sql
Pour sauver seulement la structure d'une base ou de tables
· --no-data, -d Do not write any table row information (that is, do not dump table contents). This is very useful if you want to dump only the CREATE TABLE statement for the table.
Autres sources
limesurvey
- un script plus élaboré placé dans un crontab pour un backup de limesurvey
#!/bin/bash #backup bases de donnée mysql limesurvey chemin="/www/limesurvey/backups" cd $chemin file="$chemin/$(date +'%Y%m%d_%Hh%M')_crus.sql" touch $file /usr/local/mysql/bin/mysqldump limesurvey > $file gzip $file find $chemin -mtime +10 -name "*.gz" -type f -exec rm {} \;
et le crontab
crontab -l # min (0-59) hours (0-23) day (1-31) month (1-12) day of week (0-6, 0=Sunday) 00 * * * * /www/limesurvey/backups/_backups.sh
Exporter et importer dans différents formats
SQL n'est pas le seul format de sortie dans lequel vous pouvez sauvegarder vos bases de données MySQL. Le programme mysqldump vous permet de sauvegarder des enregistrements dans divers formats, dont CSV ou tout autre format avec vos propres délimiteurs. Il vous suffit d'ajouter l'argument –fields-terminated-by à la ligne de commande mysqldump:
$ mysqldump -u root -p secret --no-create-info --tab=/tmp --fields-terminated-by=',' stocksdb
si on a ça:
mysqldump: Got error: 1: Can't create/write to file '/var/www/cocagne.ch/dev_dolibarr/cocagne_commandes.txt' (Errcode: 13 - Permission denied) when executing 'SELECT INTO OUTFILE'
il faut faire ça:
mysql mysql> GRANT FILE ON *.* TO 'root'@'localhost'; Query OK, 0 rows affected (0.00 sec) quit
mysqldump générera alors dans le répertorie /tmp un fichier qui contiendra les enregistrements issus de la table stocksdb, les champs étant séparés par une virgule. Si vous voulez que chaque ligne se termine par un séparateur particulier, vous pouvez aussi utiliser l'argument –lines-terminated-by pour marquer chaque ligne par un délimiteur donné.
Tout comme vous pouvez exporter des données dans différents formats, vous pouvez aussi les importer dans différents formats. Par exemple, si vous aviez un fichier séparé par des tabulations qui contient des enregistrements de table, comme suit:
1 DHDU 2589 77.56 2 YHOO 3200 45.65 3 WMT 100 53.29
vous pourriez utiliser l'outil mysqlimport pour lire les données dans une base de données MySQL, de la façon suivante:
$ mysqlimport -u root -p secret --fields-terminated-by='\t' test /tmp/portfolio.txt
Import
Pour récupérer:
mysql db_name < backup-file.sql
Backup avec PHP p. ex. sur serveur distant n'autorisant pas la connection ssh:
pour introduire un nouvel utilisateur
(nécessite droits root):
SET PASSWORD FOR user@host = password( 'new_password' )
fulltext et booléen, permutations automatiques etc.
possible avec mysql4 http://www.nexen.net/docs/mysql/annotee/fulltext-boolean.php http://www.phpindex.com/articles/articles_lire.php3?element=234
exemple: soit le string $chercherR="+texteObligatoire1 +texteObligatoire1 -texteAsauter" à trouver dans un champ intitulé "libelle" dans n'importe quel ordre $all = " SELECT structures_url.id,structures_libelle.id,url,id_url,libelle FROM `structures_url`, `structures_libelle` WHERE ((structures_url.id=structures_libelle.id_url) OR (id_url=0)) AND MATCH (libelle) AGAINST ('$chercherR' IN BOOLEAN MODE) ";
UPGRADES
4.0->4.1
http://dev.mysql.com/doc/mysql/fr/upgrading-from-4-0.html
http://dev.mysql.com/doc/mysql/fr/upgrading-grant-tables.html
http://dev.mysql.com/doc/mysql/fr/charset-conversion.html
http://dev.mysql.com/doc/mysql/fr/server-options.html
installer mysql4, copier bases, lancer démon puis
/usr/local/mysql/bin/ ./mysql_fix_privilege_tables –password=ROOTPASSWORD —————–
3.23->4.0
http://dev.mysql.com/doc/mysql/fr/upgrading-from-3-23.html http://dev.mysql.com/doc/mysql/en/mysqldump.html
4.1 -> 4.0
pour récupérer des données UTF8 en latin1 mysqldump Database table –default-character-set=latin1 > insertRechDoc1.sql