Comment pouvons-nous restaurer la base de données mysql avec un nom différent du fichier mysqldump. Je ne veux pas ouvrir le fichier de vidage et le modifier. Toute autre meilleure méthode?
41
Vous pouvez laisser mysqldump créer le dump de manière à ne pas créer ou sélectionner la base de données.
EXEMPLE: Vous videz la base de données db1 et la chargez dans la base de données db2
Cela mettra dans la CREATE DATABASE et les commandes USE dans le dump
mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql
Cela ne mettra pas dans CREATE DATABASE et les commandes USE dans le dump ( c'est ce que vous voulez )
mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
Vous pouvez le charger dans une autre base de données (telle que db2) de l’une des quatre (4) façons suivantes:
OPTION 1
$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2
OPTION 2
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql
OPTION 3
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql
OPTION 4
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql
Essaie !!!
-Ddb2
ne devrait pas avoir un trait d'union devant lui. Au moins, j'ai eu une erreur de syntaxe MySQL quand je l'ai incluse.ALTER DATABASE ... CHARACTER SET ...
qui rompt mon import. Edit: Oracle ignore fondamentalement le bogue .Je suis un grand fan de dump, edit et insert. mais vous n'avez pas besoin d'ouvrir le fichier texte (fichier de vidage) pour le changer (c'est particulièrement utile quand il compte plusieurs millions de lignes). si vous voulez vider la base de données
MYDATABASE
.utilisez ensuite sed pour remplacer l'ancien nom de la base de données par un nouveau comme celui-ci
alors vous pouvez simplement créer la nouvelle base de données et l'importer à nouveau, et il créera toutes les tables dans la nouvelle base de données MYNEWDATABASE '
Edit: Comme certains intervenants sympathiques de la section des commentaires l’ont souligné, cela peut être dangereux si certaines des données sont également modifiées par ce qui précède, ce qui permet de trouver des moyens de l’éviter.
1) Grep pour cela dans le dump, avant de le changer, comme ceci.
et
2) nous pouvons ajouter un peu de `pour le rendre plus sûr comme ceci:
si quelqu'un d'autre a des suggestions concrètes, je serai ravi de modifier ma réponse dans 4 ans.
la source
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
), vérifiez toutes les occurrences de MYDATABASE aveccat mydump.sql | grep "MYDATABASE"
pour vous assurer que seul le nom de la base de données a été modifié, les autres données restent inchangées.sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
# édition de vapeur potentiellement plus sûre. mon dump de base de données ne contient aucune instruction USE ou CREATE DATABASE, mais le nom de la base de données se trouve dans les commentaires, les vues et les déclencheurs SQL (MySQL 5.7). Cela ne remplace PAS le nom de la base de données dans les commentaires, mais ceux-ci n'ont aucun effet sur la base de données résultante. Cela a bien fonctionné pour moi.Je l'ai fait une fois, il y a longtemps.
Lorsque vous exportez toutes vos données, il est possible de définir le nom de la base de données au début du fichier, sous la forme suivante: "use database x"
Donc, vous pouvez changer cette déclaration.
la source
Si le fichier est ce que vous avez en main et vous manipuler à partir d' un shell / console, je l' utilise
sed
pour faire des remplacements de chaîne sur les lignes commençant parCREATE DABATASE
,CREATE TABLE
,USE
et optionnellement--
(commentaires mysqldump)Remplacement du nom de la base de données sur les lignes qui correspondent aux commentaires Create Database, Create Table, Use et mysqldump
Bien sûr, comme de nombreuses réponses le mentionnent, il est plus facile si la sauvegarde mysqldump ne contient ni CREATE DATABASE ni une ligne USE. Ce qui signifie que les options
--all-databases
,--databases
ou leurs versions courtes-A
ou-B
n'ont pas été utilisées.la source
--no-create-db
et sans--database
ou--databases
.Si vous effectuez une sauvegarde en utilisant les deux règles suivantes:
--databases
,--database
et tout simplement mettre le nom de base de données à la fin de la commande sans ces options.--no-create-db
Si vous procédez comme suit, mysqldump créera le code SQL sans faire référence à la base de données. Vous pourrez alors utiliser le nouveau nom de la base de données à la fin de votre commande mysql lors de l'importation!
la source
--no-create-db
et sans--database
ou--databases
.Voici le script shell qui vous permettra d’ajouter un suffixe / affixe à tous les noms de schéma à la volée.
http://snippets.dzone.com/posts/show/13749
la source