Saya ingin menyalin database produksi langsung ke dalam database pengembangan lokal saya. Apakah ada cara untuk melakukan ini tanpa mengunci basis data produksi?
Saat ini saya menggunakan:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
Tapi itu mengunci setiap tabel saat dijalankan.
Jawaban:
Apakah
--lock-tables=false
opsi ini berfungsi?Menurut halaman manual , jika Anda membuang tabel InnoDB Anda dapat menggunakan
--single-transaction
opsi:Untuk innodb DB :
sumber
Ini sudah terlambat, tetapi bagus untuk siapa saja yang mencari topik. Jika Anda bukan innoDB, dan Anda tidak khawatir tentang penguncian saat membuang, cukup gunakan opsi:
sumber
--single-transaction
.FLUSH TABLES WITH READ LOCK
hal-hal yang diingat .Jawabannya bervariasi tergantung pada mesin penyimpanan apa yang Anda gunakan. Skenario yang ideal adalah jika Anda menggunakan InnoDB. Dalam hal ini Anda dapat menggunakan
--single-transaction
flag, yang akan memberi Anda snapshot yang masuk akal dari database pada saat dump dimulai.sumber
--skip-add-locks
membantu sayasumber
--skip-add-locks
hanya akan membuat pengembalian sampah lebih cepat. Ini bukan jawaban yang benar.Untuk membuang tabel besar, Anda harus menggabungkan opsi --single-transaction dengan --quick.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
sumber
Untuk tabel InnoDB gunakan flag
--single-transaction
MySQL DOCS
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
sumber
--skip-lock-tables
.Jujur, saya akan menyiapkan replikasi untuk ini, seolah-olah Anda tidak mengunci tabel Anda akan mendapatkan data yang tidak konsisten dari dump.
Jika dump membutuhkan waktu lebih lama, tabel yang sudah dibuang mungkin telah berubah bersama dengan beberapa tabel yang hanya akan dibuang.
Jadi kunci meja atau gunakan replikasi.
sumber
Ini hampir terlambat dibandingkan dengan orang yang mengatakan dia terlambat seperti dia dengan jawaban asli, tetapi dalam kasus saya (MySQL via WAMP pada Windows 7), saya harus menggunakan:
sumber
sumber
Saat menggunakan MySQL Workbench, di Ekspor Data, klik Opsi Lanjut dan hapus centang opsi "kunci-tabel".
sumber
Karena tidak satu pun dari pendekatan ini bekerja untuk saya, saya hanya melakukan:
Ini akan mengecualikan keduanya
LOCK TABLE <x>
danUNLOCK TABLES
perintah.Catatan: Semoga data Anda tidak mengandung string di dalamnya!
sumber
Karena https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables :
sumber
Jawaban terlambat lainnya:
Jika Anda mencoba untuk membuat salinan panas dari database server (dalam lingkungan linux) dan mesin database dari semua tabel adalah MyISAM yang harus Anda gunakan
mysqlhotcopy
.Menurut dokumentasi:
The
LOCK TABLES
waktu tergantung dari waktu server dapat menyalin file MySQL (itu tidak membuat dump).sumber
Hari ini Bahkan saya menghadapi masalah yang sama tetapi saya tidak memiliki akses ke command line. Jadi saya membuka file sql di Notepad editor dan menghapus baris di bawah ini dari tabel
maka saya diimpor ke lingkungan pengembangan saya. Bekerja dengan baik. semoga bisa membantu seseorang
sumber