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?
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 !!!
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.
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.
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.
Si vous effectuez un vidage en utilisant les deux règles suivantes:
--databases
, --database
, et mettez simplement le nom de la base de données à la fin de la commande sans ces options.--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
Voici le script Shell qui vous permettra d'ajouter le suffixe/affixe à tous les noms de schéma à la volée.