MySQL dump'ından tek bir tabloyu ayıklayın

127 tablolu 7 GB'lık bir dump'ınız var ama yerelde bunlardan yalnızca üçüne ihtiyacınız var — users, orders, products. İşte alışılmış sed/grep numaralarının neden bozulduğu ve istediğiniz tabloları (foreign key'leriyle birlikte) tam olarak nasıl birkaç tıkla çekip alacağınız.

Her iş tüm veritabanını gerektirmez. Yerelde bir özellik geliştirirken nadiren tam bir üretim dump'ının diskinizi doldurmasını ve içe aktarımının bir saat sürmesini istersiniz. İstediğiniz, özelliğin gerçekten dokunduğu birkaç tablodur.

Aynı şey tek bir tabloyu hata ayıklarken de geçerlidir — orders'taki bir veri sorununu yeniden üretmek diğer 126 tabloyu gerektirmez — ya da yalnızca birkaç tablonun yeni bir servise taşındığı bir kısmi geçiş yaparken. Tüm bu durumlarda soru aynıdır: bu tabloları devasa bir dump'tan temiz ve hızlı bir şekilde yalnızca bunları nasıl alırım?

sed/grep yaklaşımı ve neden bozulur

Klasik cevap, dosyayı mysqldump'ın her tablo için yazdığı bölüm başlıkları arasında sed ile dilimlemektir:

# users tablosunu bir mysqldump dosyasından çekip çıkarın
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql

Zekice görünüyor ve küçük, düzenli bir dump'ta bir kez işe bile yarayabilir. Ama gerçek bir 7 GB'lık dosyada birçok ince noktada dağılır:

Sonunda awkgrep'in, grep'i sed'in üzerine yığar, alt kümelerde test eder ve yine de sonuca güvenemezsiniz. Daha iyi bir yol var.

DumpCleaner ile tabloları ayıklayın

DumpCleaner dump'ı düzgün ayrıştırır — ifade sınırlarını, çok satırlı INSERT'leri, ters tırnakları ve yorumları anlar — bu yüzden her zaman doğru satırlardan keser. İhtiyacınız olan tabloları ayıklamak dört adım sürer:

  1. .sql dump'ınızı sürükleyin. DumpCleaner dosyayı akış halinde işler, böylece 7 GB'lık bir dump tüm dosyayı yüklemek yerine sabit bellekle açılır.
  2. Otomatik algılanan tablo listesini okuyun. Her tablo ayrıştırılır ve satır sayısı ve boyutuyla listelenir — ne olduğunu bulmak için milyonlarca satır arasında kaydırmaya gerek yok.
  3. İstediğiniz tabloları seçin. users, orders ve products'ı işaretleyin ya da bütün grupları tek seferde çıkarmak için *_logs gibi bir regex / hariç tutma kalıbı yazın.
  4. Foreign key üst tablolarını dahil edin ve dışa aktarın. İsterseniz referans verilen üst tabloları otomatik olarak dahil edin, ardından temiz, içe aktarılabilir bir dosya dışa aktarın.

Birkaç şey bunu shell araçlarından çok daha az uğraştırıcı kılar:

Yalnızca ihtiyacınız olan tablolar — başka hiçbir şey

DumpCleaner, her boyuttaki dump'tan belirli tabloları ayıklar — akış tabanlı, sabit bellekle ve foreign key'ler sizin için çözülmüş olarak. Yerel macOS & iPadOS uygulaması, tek seferlik satın alma.

App Store'dan indir

Sıkça sorulan sorular

Aynı anda birden fazla tablo ayıklayabilir miyim?

Evet. İstediğiniz kadar tabloyu işaretleyin — users, orders ve products'ı birlikte — DumpCleaner hepsini tek geçişte tek bir dosyaya yazar.

Foreign key bağımlılıklarını korur mu?

İsteğe bağlı olarak, evet. Foreign key bağımlılıklarını dahil et seçeneğini açın; seçiminizin referans verdiği herhangi bir üst tablo otomatik olarak dahil edilir, böylece ayıklanan dosya kısıtlama hataları olmadan içe aktarılır.

Tabloları kalıba göre hariç tutabilir miyim?

Evet. Bütün tablo gruplarını teker teker işaretini kaldırmak yerine ayıklamak için *_logs ya da *_sessions gibi hariç tutma kalıpları veya bir düzenli ifade kullanın.

PostgreSQL ile çalışır mı?

Evet. DumpCleaner MySQL, MariaDB ve PostgreSQL (pg_dump) dump'larını okur ve tabloları ayıklarken public.users gibi şema nitelikli adları işler.

sed ve grep ile boğuşmayı bırakın

Sürükleyin, tablolarınızı seçin, dışa aktarın. DumpCleaner ihtiyacınız olan tabloları — foreign key'leriyle birlikte — herhangi bir dump'tan tam olarak çekip çıkarır.

App Store'dan indir