En train de créer une solution automatisée pour sauvegarder et restaurer un serveur MySQL entier , je suis tombé sur la mysql
base de données qui semble contenir des comptes d'utilisateurs, des autorisations, des métadonnées, ce genre de chose. Cette base de données doit-elle être sauvegardée? Est-ce que la sauvegarde et la tentative de restauration vont casser les choses?
J'ai eu un sacré temps sur Google pour "mysql sauvegarder la base de données mysql" comme vous pouvez l'imaginer.
mysql
backup
database
backup-restoration
database-backup
Daniel Beardsley
la source
la source
Réponses:
Voici quelque chose d'intéressant à considérer: La sauvegarde de la
mysql
base de données vous limite considérablement dans la mesure où vous ne pouvez restaurer une telle base de données que dans la même version de mysql à partir de laquelle vous avez exécuté la sauvegarde. Voici pourquoi:Voici mysql.user de MySQL 5.0.45
Voici mysql.user de MySQL 5.1.32
Voici mysql.user de MySQL 5.5.12
Si vous tentez une restauration de mysql.user vers une version de MySQL à laquelle il n'était pas destiné, cela produira des problèmes d'autorisation aléatoire. La façon de sauvegarder les autorisations utilisateur mysql d'une manière indépendante de la version consiste à vider les autorisations utilisateur dans SQL. De cette façon, les subventions utilisateur sont entièrement portables. Il y a deux façons d'y parvenir:
OPTION 1: Utiliser MAATKIT
mk-show-grant générera le SQL nécessaire quelle que soit l'instance mysql à laquelle vous vous connectez. (Gardez à l'esprit que MAATKIT est en cours de migration vers Percona Toolkit. Cet outil sera très probablement appelé pt-show-grant).
OPTION # 2: Script le dumping des subventions SQL
J'ai écrit ma propre émulation de mk-show-grant. Il exclura les utilisateurs anonymes. Cela ressemble à ceci:
L'utilisation de l'une de ces options créera une sauvegarde plus stable des autorisations utilisateur.
SUR UNE NOTE SÉPARÉE
Maintenant, si vous utilisez cette option de sortie de journal
la base de données mysql remplira le journal lent (si activé) comme une table mysql dans le schéma mysql plutôt que comme un fichier texte. Donc, faire des sauvegardes physiques inclura de tels journaux basés sur une table mysql. Croyez-moi, cela ne vaut pas l'espace disque si le journal général et le journal des requêtes lentes sont activés et s'accumulent dans le schéma mysql. Restez avec les options de vidage de MySQL Grants.
MISE À JOUR 2011-09-19 15:54 EDT
Il existe un facteur très important dans la maintenance des sauvegardes des autorisations MySQL via les subventions SQL:
Chaque utilisateur sort son mot de passe dans un format MD5 modifié. Pour mysql 4.0 et les versions antérieures, il s'agit d'une chaîne hexadécimale de 16 caractères. Pour mysql 4.1+, il est de 41 caractères (un astérisque suivi d'une chaîne hexadécimale de 40 caractères).
Avant de restaurer un vidage SQL Grants, recherchez dans le fichier de vidage SQL Grants des mots de passe hexadécimaux à 16 caractères. Si vous en voyez un, vous devez ajouter ce qui suit à /etc/my.cnf (ou my.ini pour Windows) sur le serveur mysql sur lequel vous allez restaurer:
La directive old_password permet aux mots de passe de 16 et 41 caractères de coexister et de s'authentifier correctement dans la même instance mysql en cours d'exécution. Tout mot de passe créé à l'avenir comportera 16 caractères.
Le redémarrage de MySQL n'est pas requis. Exécutez simplement ceci:
la source
SHOW GRANTS
génération SQL en utilisantQUOTE()
, comme ceci:SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';') FROM mysql.user WHERE user<>'';
Oui, vous voulez vraiment sauvegarder la
mysql
base de données - elle fait partie intégrante de votre service. Bien que vous puissiez reconstruire son contenu à partir d'autres informations, la difficulté de le faire est prohibitive si vous essayez de revenir rapidement en service.la source
Vous pouvez restaurer la base de données mysql entre les versions, au moins des versions assez récentes. Il existe un outil appelé
mysql_upgrade
inclus dans les nouvelles versions de MySQL qui mettra à niveau les tables système pour vous.http://dev.mysql.com/doc/refman/5.0/en/mysql-upgrade.html
la source
Tant que vous restaurez dans une version similaire de mysql, vous pouvez restaurer la base de données mysql à partir d'une sauvegarde. En cas de doute, faites simplement une différence entre les schémas de base de données mysql (celui de la sauvegarde et celui du nouveau serveur mysql).
la source