Bukan setiap kerja memerlukan keseluruhan pangkalan data. Apabila anda membina ciri secara setempat, jarang sekali anda mahu dump pengeluaran penuh memenuhi cakera anda dan mengambil masa sejam untuk diimport. Anda mahu segelintir jadual yang benar-benar disentuh oleh ciri itu.
Perkara yang sama berlaku apabila anda sedang menyahpepijat satu jadual — mengeluarkan semula isu data dalam orders tidak memerlukan 126 jadual yang lain — atau melakukan migrasi separa, di mana hanya beberapa jadual berpindah ke perkhidmatan baharu. Dalam kesemua kes ini soalannya sama: bagaimana saya mendapatkan hanya jadual-jadual ini daripada dump gergasi, dengan bersih dan pantas?
Pendekatan sed/grep dan mengapa ia gagal
Jawapan klasik ialah mengerat fail dengan sed antara pengepala bahagian yang ditulis mysqldump untuk setiap jadual:
# tarik keluar jadual users daripada fail mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Ia kelihatan bijak, dan pada dump kecil yang kemas ia mungkin berjaya sekali. Pada fail 7 GB sebenar ia berkecai dalam banyak cara yang halus:
- INSERT berbilang baris. Satu
INSERT INTO ... VALUESboleh merentangi beribu-ribu baris. Alat berorientasikan baris sepertiseddangrepmengerat baris tersebut separuh dan menghasilkan fail yang tidak boleh dihurai. - Backtick dan aksara khas. Nilai lajur mengandungi
--, koma bertitik, backtick, petikan dan baris baharu di dalam rentetan. Corak anda memadankan teks di dalam data yang memang tidak pernah dimaksudkan sebagai pembatas. - Nama jadual sebagai subrentetan. Mengekstrak
userturut menangkapuser_roles,user_sessionsdanpassword_user, kerana nama itu muncul sebagai subrentetan yang lain. - Komen dan pengepala berubah. Teks komen yang tepat berbeza antara versi MySQL, MariaDB dan PostgreSQL, dan
pg_dumplangsung tidak menggunakan pengepala yang sama — jadi arahan yang sama mengembalikan kekosongan tanpa amaran. - Tiada kesedaran kunci asing. Walaupun anda mengerat
ordersdengan sempurna, barisnya merujukusers.sedtidak tahu langsung, jadi ekstrak itu gagal diimport dengan ralat kunci asing.
Anda berakhir dengan menimbun awk atas grep atas sed, menguji pada subset, namun masih tidak mempercayai hasilnya. Ada cara yang lebih baik.
Ekstrak jadual dengan DumpCleaner
DumpCleaner menghurai dump dengan betul — ia memahami sempadan penyata, INSERT berbilang baris, backtick dan komen — jadi ia sentiasa mengerat pada baris yang betul. Mengekstrak jadual yang anda perlukan mengambil empat langkah:
- Seret dump
.sqlanda masuk. DumpCleaner menstrim fail itu, jadi dump 7 GB dibuka dengan memori malar dan bukan memuatkan keseluruhannya. - Baca senarai jadual yang dikesan automatik. Setiap jadual dihuraikan keluar dan disenaraikan dengan bilangan baris serta saiznya — tiada menatal berjuta-juta baris untuk mencari apa yang ada.
- Pilih jadual yang anda mahu. Tandakan
users,ordersdanproducts, atau taip corak regex / pengecualian seperti*_logsuntuk membuang seluruh kumpulan sekali gus. - Sertakan induk kunci asing dan eksport. Secara pilihan, tarik masuk jadual induk yang dirujuk secara automatik, kemudian eksport fail yang bersih dan boleh diimport.
Beberapa perkara menjadikan ini jauh kurang menyusahkan berbanding alat shell:
- Corak pengecualian seperti
*_logsatau*_sessionsmembuang bising audit dan sesi tanpa perlu menyahtanda berpuluh-puluh jadual secara manual. - Penapis regex membolehkan anda memadan mengikut awalan, akhiran atau sebarang corak — simpan semua yang sepadan dengan
shop_*, contohnya. - Pratonton langsung menunjukkan dengan tepat jadual mana yang akan berakhir dalam output apabila anda menukar pilihan.
- Anggaran saiz output memberitahu anda sebesar mana ekstrak itu sebelum anda mengeksport, jadi anda tahu ia akan muat secara setempat.
- Kebergantungan kunci asing boleh disertakan secara automatik, jadi memilih
orderssecara senyap membawausersbersamanya dan ekstrak itu diimport tanpa ralat kekangan.
Hanya jadual yang anda perlukan — tiada yang lain
DumpCleaner mengekstrak jadual tertentu daripada dump sebarang saiz — secara penstriman, dengan memori malar, dan dengan kunci asing diselesaikan untuk anda. Aplikasi asli macOS & iPadOS, pembelian sekali sahaja.
Muat turun di App StoreSoalan lazim
Bolehkah saya mengekstrak berbilang jadual sekali gus?
Ya. Tandakan seberapa banyak jadual yang anda suka — users, orders dan products bersama-sama — dan DumpCleaner menulis kesemuanya ke dalam satu fail dalam satu laluan.
Adakah ia mengekalkan kebergantungan kunci asing?
Secara pilihan, ya. Hidupkan sertakan kebergantungan kunci asing dan mana-mana jadual induk yang dirujuk oleh pilihan anda akan ditarik masuk secara automatik, jadi ekstrak itu diimport tanpa ralat kekangan.
Bolehkah saya mengecualikan jadual mengikut corak?
Ya. Gunakan corak pengecualian seperti *_logs atau *_sessions, atau ungkapan biasa (regex), untuk membuang seluruh kumpulan jadual dan bukan menyahtandanya satu demi satu.
Adakah ia berfungsi dengan PostgreSQL?
Ya. DumpCleaner membaca dump MySQL, MariaDB dan PostgreSQL (pg_dump), dan mengendalikan nama berkelayakan skema seperti public.users semasa mengekstrak jadual.
Berhenti bergelut dengan sed dan grep
Seret, pilih jadual anda, eksport. DumpCleaner menarik keluar tepat jadual yang anda perlukan — berserta kunci asingnya — daripada sebarang dump.
Muat turun di App Store