web-dev-qa-db-fra.com

Restaurer la base de données mysql avec un nom différent

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. D'autres meilleures méthodes?

42
Praveen Prasannan

Vous pouvez laisser mysqldump créer le vidage de telle manière qu'il ne crée ni ne sélectionne 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 vidage

mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql

Ceci ne sera pas mettre dans la CREATE DATABASE et les commandes USE dans le vidage ( 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) manières 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

$ 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 !!!

60
RolandoMySQLDBA

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 fait plusieurs millions de lignes). si vous voulez vider la base de données MYDATABASE.

mysqldump MYDATABASE > mydump.sql

puis utilisez 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 avec dans la nouvelle base de données MYNEWDATABASE '

mysqladmin create MYNEWDATABASE

mysql MYNEWDATABASE < mydump.sql

Edit: Comme certaines personnes sympas dans la section des commentaires l'ont souligné, cela peut être dangereux, si certaines des données sont également modifiées par cela ci-dessus, donc, pour trouver des moyens d'éviter cela.

1) Grep pour cela dans la décharge, avant de le changer, comme ça.

cat mydump.sql | grep "MYDATABASE"

et

2) nous pouvons en ajouter `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 suis heureux de modifier ma réponse dans 4 ans.

7
Sverre

Si le fichier est ce que vous avez en main et que vous le manipulez à partir d'un shell/d'une console, j'utiliserais sed pour effectuer des remplacements de chaîne sur les lignes commençant par CREATE DABATASE, CREATE TABLE, USE et éventuellement -- (commentaires mysqldump)

Remplacement du nom de la base de données sur les lignes qui correspondent aux commentaires Créer une base de données, Créer une table, Utiliser 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 la plupart des réponses mentionnées ici, il est plus facile si la sauvegarde mysqldump ne contenait pas de CREATE DATABASE et de ligne USE. Signification des options --all-databases, --databases ou leurs versions courtes -A ou -B n'ont pas été utilisés.

3
bksunday

Je l'ai fait une fois, il y a longtemps.

Lorsque vous exportez toutes vos données, il existe une option pour définir le nom de la base de données au début du fichier, quelque chose comme: "utiliser la base de données x"

Vous pouvez donc modifier cette déclaration.

3
Victor

Si vous effectuez un vidage en utilisant les deux règles suivantes:

  1. N'utilisez pas d'options telles que --databases, --database, et mettez simplement le nom de la base de données à la fin de la commande sans ces options.
  2. Incluez l'option --no-create-db

Si vous faites ce qui suit, alors mysqldump créera le SQL sans référencer la base de données, alors vous pouvez utiliser le nouveau nom de 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
2
Neo

Voici le script Shell qui vous permettra d'ajouter le suffixe/affixe à tous les noms de schéma à la volée.

http://snippets.dzone.com/posts/show/13749

1
shantanuo