Sauvegarder le server MySQL

Je veux sauvegarder toutes les bases de données, users et etc sur notre server MySQL.

Je suis tombé sur la command mysqldump et crois que je peux l'utiliser comme ça? (Essayer de sauvegarder un server REMOTE sur notre machine LOCAL)

 mysqldump -h web-server.com -u root -p root --all-databases > "/backups/mysql/`date +%Y%m%d`.sql" 

Toutefois:

  1. J'ai peur de courir avec peu de connaissances sur ce qui se passe (nous avons beaucoup de données sur la database MySQL et nous ne pouvons pas nous permettre de le perdre!). Donc, la première question est la suivante: est-ce que cela fera ce que je veux? Connectez-vous au server distant (situé sur web-server.com par exemple) et sauvegardez toutes les bases de données mysql sur le path /backups/mysql sur la machine LOCAL?

  2. Je ne suis pas convaincu que cela conservera également toutes les informations de l'user pour chaque database intacte en cas d'échec du server MySQL. L'information d'user est-elle simplement stockée dans une autre database dans les bases de données MySQL? Ou est-ce une fonction du server lui-même? Dans ce cas, y a-t-il une façon différente de sauvegarder la database pour y inclure datatables user?

1) Oui, cela va vider le contenu de toutes les bases de données comme une série de commands INSERT sql afin que vous puissiez restaurer le tout avec mysql < backup.sql . Pour des raisons de souplesse, je vous recommand de le faire par database plutôt que d'utiliser toutes les --all-databases de --all-databases car vous obtenez un gros file contenant TOUT et il n'est pas facile de faire des searchs.

Vous pouvez regarder la page de manuel de mysqldump pour voir s'il y a d'autres options que vous voudriez utiliser.

2) Les informations user et le contrôle d'access sont stockés dans la database mysql ; --all-databases incluent celle-là.

Si vous exécutez mysqldump distance et souhaitez un file de vidage distinct pour chaque database, vous devrez gérer une list des bases de données à sauvegarder. Si vous exécutez mysqldump localement sur le server de database, vous pouvez parcourir les bases de données qui existent dans le mysql données mysql (tel que /var/lib/mysql ). Si mysqldump doit être exécuté à distance, vous pouvez écrire un script qui se connecte via SSH, récupère une list des bases de données, puis se déconnecte et exécute mysqldump avec les noms de bases de données.

Je n'utiliserais pas toutes les --all-databases sans spécifier les noms des bases de données individuelles et utiliserais aussi l'option --add-drop-database . Cela inclura également les instructions SQL dans le file de vidage pour créer la database si elle n'existe pas ou la supprimer si elle existe et la recréer. De l' man 1 mysqldump :

 --add-drop-database Add a DROP DATABASE statement before each CREATE DATABASE statement. This option is typically used in conjunction with the --all-databases or --databases option because no CREATE DATABASE statements are written unless one of those options is specified. 

Il s'agit d'un script rapide et corrompu conçu pour s'exécuter localement sur le server de database qui sauvegardera les bases de données spécifiées dans la variable $DB résultant en un file de vidage pour chaque database. Il supprime également tous les files de vidage précédents datant de plus de 15 jours.

 #!/bin/sh PATH=/bin:/usr/bin DATE="`date +%Y%m%d`" DB="mysql drupal drupaldev" DUMP_DIR="/u01/mysql_dump" for db in `echo $DB` do mysqldump -u root --password=password --databases --add-drop-database $db > $DUMP_DIR/$db.$DATE.dmp gzip -9 $DUMP_DIR/$db.$DATE.dmp find $DUMP_DIR/* -mtime +14 -exec rm -f '{}' \; done