Saya ingin menulis naskah yang salinan database saya saat ini sitedb1
untuk sitedb2
di contoh database mysql yang sama. Saya tahu saya bisa membuang sitedb1 ke skrip sql:
mysqldump -u root -p sitedb1 >~/db_name.sql
dan kemudian mengimpornya ke sitedb2
. Apakah ada cara yang lebih mudah, tanpa membuang database pertama ke file sql?
Jawaban:
Seperti yang dikatakan manual di Menyalin Database, Anda dapat menyalurkan dump langsung ke klien mysql:
Jika Anda menggunakan MyISAM, Anda dapat menyalin file, tetapi saya tidak akan merekomendasikannya. Agak cerdik.
Terintegrasi dari berbagai jawaban baik lainnya
Baik perintah
mysqldump
maupunmysql
menerima opsi untuk mengatur detail koneksi (dan banyak lagi), seperti:Juga, jika database baru belum ada, Anda harus membuatnya sebelumnya (misalnya dengan
echo "create database new_db_name" | mysql -u <dbuser> -p
).sumber
mysqldump -uroot -p database1 | mysql -uroot -p database2
. Saya diminta untuk kedua pws tetapi hanya bisa dimasukkan ke dalam satu. Terlihat cepat seperti ini:Enter password: Enter password:
. Setelah memberikan pw pertama, proses menunggu selamanya.Menggunakan Utilities MySQL
Utilitas MySQL berisi alat
mysqldbcopy
yang bagus yang secara default menyalin DB termasuk semua objek terkait ("tabel, tampilan, pemicu, peristiwa, prosedur, fungsi, dan hibah tingkat basis data") dan data dari satu server DB ke server yang sama atau yang lain Server DB. Ada banyak opsi yang tersedia untuk menyesuaikan apa yang sebenarnya disalin.Jadi, untuk menjawab pertanyaan OP:
sumber
mysqldump
solusi berbasis gagal.sudo apt-get install mysql-utilities
, tapi ini sangat rapi. Bisakah saya meninggalkan kata sandi dan diminta untuk memasukkannya?mysqldbcopy
Anda meminta kata sandi; setidaknya saya tidak dapat menemukan hal seperti itu di dokumentasi. Anda dapat membangun fungsionalitas ini sendiri. Dalam Bash yang bisa terlihat seperti ini:mysqldbcopy --source=root:"$(read -sp 'Source password: ' && echo $REPLY)"@localhost --destination=root:"$(read -sp 'Destination password: ' && echo $REPLY)"@localhost sitedb1:sitedb2
--force
kemysqldbcopy
perintah karena saya sudah menciptakan database tujuan. Terima kasih!sumber
Anda perlu menjalankan perintah dari terminal / command prompt.
misalnya:
mysqldump -u root test_db1 | mysql -u root test_db2
Ini menyalin test_db1 ke test_db2 dan memberikan akses ke 'root' @ 'localhost'
sumber
Cara terbaik dan mudah adalah dengan memasukkan perintah-perintah ini di terminal Anda dan mengatur izin untuk pengguna root. Bekerja untukku ..!
sumber
mysqldump -u <user> -p <pwd> db_name | mysql -u <user> -p <pwd> new_db_name
bisa bermasalah dengan basis data besar.Anda bisa menggunakan (dalam kodesemu):
Alasan saya tidak menggunakan sintaks CREATE TABLE ... SELECT ... adalah untuk menjaga indeks. Tentu saja ini hanya menyalin tabel. Tampilan dan prosedur tidak disalin, meskipun dapat dilakukan dengan cara yang sama.
Lihat CREATE TABLE .
sumber
Pertama buat duplikat basis data:
Pastikan semua izin sudah ada dan:
sumber
Anda dapat melakukan sesuatu seperti berikut ini:
sumber
Pernyataan ini ditambahkan di MySQL 5.1.7 tetapi ternyata berbahaya dan dihapus di MySQL 5.1.23. Itu dimaksudkan untuk mengaktifkan pemutakhiran basis data pra-5.1 untuk menggunakan pengkodean yang diterapkan pada 5.1 untuk memetakan nama basis data ke nama direktori basis data. Namun, penggunaan pernyataan ini dapat mengakibatkan hilangnya konten basis data, itulah mengapa ia dihapus. Jangan gunakan RENAME DATABASE di versi sebelumnya yang hadir.
Untuk melakukan tugas memutakhirkan nama database dengan pengkodean baru, gunakan ALTER DATABASE db_name sebagai ganti NAMA DIRECTORY DATA UPGRADE: Sebagai gantinya: http://dev.mysql.com/doc/refman/5.1/en/alter-database.html
sumber
Cara mudah untuk melakukannya jika Anda menginstal phpmyadmin :
Buka database Anda, pilih tab "operasi", dan Anda dapat melihat blok "salin database ke". Gunakan itu dan Anda dapat menyalin basis data.
sumber
Seperti yang disebutkan dalam jawaban Greg ,
mysqldump db_name | mysql new_db_name
adalah cara gratis, aman, dan mudah untuk mentransfer data antar database. Namun, ini juga sangat lambat .Jika Anda mencari untuk membuat cadangan data, tidak mampu kehilangan data (dalam database ini atau lainnya), atau menggunakan tabel selain
innodb
, maka Anda harus menggunakannyamysqldump
.Jika Anda mencari sesuatu untuk pengembangan, minta semua basis data Anda dicadangkan di tempat lain, dan nyaman dibersihkan dan diinstal ulang
mysql
(mungkin secara manual) ketika semuanya berjalan salah, maka saya mungkin punya solusi untuk Anda.Saya tidak dapat menemukan alternatif yang baik, jadi saya membuat skrip untuk melakukannya sendiri. Saya menghabiskan banyak waktu untuk melakukan ini untuk pertama kalinya dan itu benar-benar membuat saya sedikit takut untuk mengubahnya sekarang. Database Innodb tidak dimaksudkan untuk disalin dan ditempelkan seperti ini. Perubahan kecil menyebabkan ini gagal dengan cara yang luar biasa. Saya tidak punya masalah sejak saya menyelesaikan kode, tetapi itu tidak berarti Anda tidak akan melakukannya.
Sistem diuji pada (tetapi mungkin masih gagal):
Apa yang dilakukannya
sudo
hak istimewa dan verifikasi Anda memiliki ruang penyimpanan yang cukup untuk mengkloning basis dataBagaimana membandingkannya dengan
mysqldump
Pada basis data 3gb, menggunakan
mysqldump
danmysql
akan memakan waktu 40-50 menit pada mesin saya. Dengan menggunakan metode ini, proses yang sama hanya akan memakan waktu ~ 8 menit.Bagaimana kami menggunakannya
Kami memiliki perubahan SQL yang disimpan di samping kode kami dan proses pemutakhiran terotomasi untuk produksi dan pengembangan, dengan setiap rangkaian perubahan membuat cadangan dari basis data untuk dipulihkan jika ada kesalahan. Satu masalah yang kami temui adalah ketika kami sedang mengerjakan proyek jangka panjang dengan perubahan basis data, dan harus mengganti cabang di tengahnya untuk memperbaiki satu atau tiga bug.
Di masa lalu, kami menggunakan database tunggal untuk semua cabang, dan harus membangun kembali basis data setiap kali kami beralih ke cabang yang tidak kompatibel dengan perubahan database baru. Dan ketika kami beralih kembali, kami harus menjalankan upgrade lagi.
Kami mencoba
mysqldump
menduplikasi database untuk cabang yang berbeda, tetapi waktu tunggu terlalu lama (40-50 menit), dan sementara itu kami tidak dapat melakukan hal lain.Solusi ini mempersingkat waktu klon basis data menjadi 1/5 waktu (bayangkan kopi dan istirahat kamar mandi alih-alih makan siang yang panjang).
Tugas umum dan waktu mereka
Berpindah antar cabang dengan perubahan basis data yang tidak kompatibel membutuhkan waktu lebih dari 50 menit pada satu basis data, tetapi tidak ada waktu sama sekali setelah waktu pengaturan awal dengan
mysqldump
atau kode ini. Kode ini kebetulan ~ 5 kali lebih cepat darimysqldump
.Berikut adalah beberapa tugas umum dan kira-kira berapa lama waktu yang dibutuhkan untuk setiap metode:
Buat cabang fitur dengan perubahan database dan segera bergabung:
mysqldump
: 50-60 menitBuat cabang fitur dengan perubahan basis data, alihkan ke
master
untuk perbaikan bug, edit di cabang fitur, dan gabungkan:mysqldump
: 50-60 menitBuat cabang fitur dengan perubahan basis data, alihkan ke
master
untuk perbaikan bug 5 kali saat mengedit di cabang fitur di antara, dan gabungkan:mysqldump
: 50-60 menitKode
Jangan gunakan ini kecuali Anda sudah membaca dan memahami semua yang di atas.
Jika semuanya berjalan lancar, Anda akan melihat sesuatu seperti:
sumber
Selain jawaban Greg , ini adalah cara termudah dan tercepat jika
new_db_name
belum ada:sumber
Jika Anda memiliki pemicu dalam database asli Anda, Anda dapat menghindari kesalahan "Pemicu sudah ada" dengan memiparkan pengganti sebelum mengimpor:
sumber
Saya tidak berpikir ada metode untuk melakukan ini. Ketika PHPMyAdmin melakukan ini, ia membuang DB lalu memasukkannya kembali dengan nama baru.
sumber