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?
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?
Réponses:
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 !!!
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
.
mysqldump MYDATABASE > mydump.sql
utilisez ensuite sed pour remplacer l'ancien nom de la base de données par un nouveau comme celui-ci
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
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 '
mysqladmin create MYNEWDATABASE
mysql MYNEWDATABASE < mydump.sql
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.
cat mydump.sql | grep "MYDATABASE"
et
2) nous pouvons ajouter un peu de `pour le rendre plus sûr comme ceci:
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
si quelqu'un d'autre a des suggestions concrètes, je serai ravi de modifier ma réponse dans 4 ans.
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
), vérifiez toutes les occurrences de MYDATABASE avec cat 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.
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 par CREATE 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
dbfile="yoursqldumpfile.sql";
dbname="current_db_name";
dbnewname="new_db_name";
dbnewfile="/tmp/$dbnewname.sql";
cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile
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.
--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!
mysqldump --no-create-db old_db_name --single-transaction --compress --order-by-primary --host old_db_host -u old_db_user -pOld_db_password | mysql --host new_host -u new_user -pnewpassword new_db_name
--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.
-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.