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?
41
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:
PILIHAN 1
$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2
PILIHAN 2
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql
OPSI 3
$ 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 !!!
-Ddb2
seharusnya tidak memiliki tanda hubung di depannya. Setidaknya, saya mendapat kesalahan sintaksis MySQL ketika saya memasukkannya.ALTER DATABASE ... CHARACTER SET ...
di dalamnya yang melanggar impor saya. Sunting: Oracle pada dasarnya mengabaikan bug .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 database
MYDATABASE
.kemudian gunakan sed untuk mengganti nama database lama dengan yang baru seperti ini
maka Anda cukup membuat database baru dan mengimpornya lagi, dan itu akan membuat semua tabel dengan di databae baru MYNEWDATABASE '
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 ini.
1) Grep untuk ini di dump, sebelum Anda mengubahnya, seperti ini.
dan
2) kita dapat menambahkan beberapa `untuk membuatnya lebih aman seperti ini:
jika ada yang punya saran konkret, saya senang mengedit jawaban saya dalam 4 tahun ke depan.
sumber
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
) periksa semua kemunculan MYDATABASE dengancat mydump.sql | grep "MYDATABASE"
untuk memastikan hanya nama database yang diubah, data lain tetap tidak tersentuh.sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
# sunting uap yang berpotensi lebih aman. dump database saya tidak mengandung pernyataan USE atau CREATE DATABASE, tetapi nama db ada di dalam sql comments, views and triggers (MySQL 5.7) Ini TIDAK menggantikan nama database dalam komentar, tetapi mereka tidak berpengaruh pada database yang dihasilkan. Ini bekerja dengan baik untuk saya.Saya telah melakukan ini sekali, dulu sekali.
Ketika 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.
sumber
Jika file adalah apa yang Anda miliki di tangan dan Anda memanipulasi dari shell / console, saya akan menggunakan
sed
untuk melakukan penggantian string pada baris yang dimulai denganCREATE DABATASE
,CREATE TABLE
,USE
dan optionnally--
(mysqldump komentar)Mengganti nama db pada baris yang cocok dengan Buat Database, Buat Tabel, Gunakan dan mysqldump komentar
Tentu saja seperti banyak jawaban di sini yang disebutkan, lebih mudah jika cadangan mysqldump tidak mengandung CREATE DATABASE dan baris PENGGUNAAN. Berarti opsi
--all-databases
,--databases
atau versi singkatnya-A
atau-B
tidak digunakan.sumber
--no-create-db
dan tanpa--database
atau--databases
.Jika Anda melakukan dump menggunakan dua aturan berikut:
--databases
,--database
, dan hanya hanya menempatkan nama database pada akhir perintah tanpa opsi ini.--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!
sumber
--no-create-db
dan tanpa--database
atau--databases
.Berikut ini adalah skrip shell yang memungkinkan Anda untuk menambahkan suffix / affix ke semua nama skema dengan cepat.
http://snippets.dzone.com/posts/show/13749
sumber