it-swarm.asia

Kembalikan database mysql dengan nama berbeda

Bagaimana cara mengembalikan database mysql dengan nama berbeda dari file mysqldump. Saya tidak ingin membuka file dump dan mengeditnya. Adakah metode lain yang lebih baik?

42

Anda dapat membiarkan mysqldump membuat dump sedemikian rupa sehingga tidak membuat atau memilih database.

CONTOH: Anda membuang basis data db1 dan memuatnya ke basis data db2

Ini akan dimasukkan ke dalam CREATE DATABASE dan perintah USE di dump

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

Ini tidak akan dimasukkan ke dalam CREATE DATABASE dan perintah USE di dump ( inilah yang Anda inginkan )

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

Anda dapat memuatnya ke database lain (seperti db2) dengan salah satu dari empat (4) cara:

OPSI 1

$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2

OPSI 2

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql

OPSI

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql

OPSI 4

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql

Cobalah !!!

60
RolandoMySQLDBA

Saya penggemar berat dump, edit, dan masukkan. tetapi Anda tidak perlu membuka file teks (dump file) untuk mengubahnya (ini sangat berguna ketika panjangnya beberapa milion). jika Anda ingin membuang basis data MYDATABASE.

mysqldump MYDATABASE > mydump.sql

kemudian gunakan sed untuk mengganti nama database lama dengan yang baru seperti ini

sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql

maka Anda cukup membuat database baru dan mengimpornya lagi, dan itu akan membuat semua tabel dengan di databae baru MYNEWDATABASE '

mysqladmin create MYNEWDATABASE

mysql MYNEWDATABASE < mydump.sql

Sunting: Seperti yang ditunjukkan oleh beberapa orang Baik di bagian komentar, ini bisa berbahaya, jika beberapa data juga diubah oleh ini di atas, jadi, untuk menggabungkan cara untuk menghindari hal ini.

1) Grep untuk ini di dump, sebelum Anda mengubahnya, seperti ini.

cat mydump.sql | grep "MYDATABASE"

dan

2) kita dapat menambahkan beberapa `untuk membuatnya lebih aman seperti ini:

sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql

jika ada yang punya saran konkret, saya senang mengedit jawaban saya dalam 4 tahun ke depan.

7
Sverre

Jika file tersebut adalah apa yang Anda miliki dan Anda memanipulasinya dari Shell/konsol, saya akan menggunakan sed untuk melakukan penggantian string pada baris yang dimulai dengan CREATE DABATASE, CREATE TABLE, USE dan secara opsional -- (komentar mysqldump)

Mengganti nama db pada baris yang cocok Buat Basis Data, Buat Tabel, Gunakan dan mysqldump komentar

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


Tentu saja seperti banyak jawaban di sini yang menyebutkan, lebih mudah jika cadangan mysqldump tidak mengandung CREATE DATABASE dan jalur GUNAKAN. Berarti opsi --all-databases, --databases atau versi singkatnya -A atau -B tidak digunakan.

3
bksunday

Saya telah melakukan ini sekali, dulu sekali.

Saat Anda mengekspor semua data Anda, ada opsi untuk mengatur nama database di awal file, sesuatu seperti: "menggunakan database x"

Jadi, Anda dapat mengubah deklarasi ini.

3
Victor

Jika Anda melakukan dump menggunakan dua aturan berikut:

  1. Jangan gunakan opsi seperti --databases, --database, dan cukup letakkan nama database di akhir perintah tanpa opsi ini.
  2. Sertakan opsi --no-create-db

Jika Anda melakukan hal berikut ini maka mysqldump akan membuat SQL tanpa mereferensikan database, maka Anda dapat menggunakan nama database baru di akhir perintah mysql Anda selama impor!

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

Berikut ini adalah skrip Shell yang memungkinkan Anda untuk menambahkan akhiran/imbuhan ke semua nama skema dengan cepat.

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

1
shantanuo