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:
- Çok satırlı INSERT'ler. Tek bir
INSERT INTO ... VALUESbinlerce satıra yayılabilir.sedvegrepgibi satır odaklı araçlar bu satırları ikiye böler ve ayrıştırılamayan bir dosya üretir. - Ters tırnaklar ve özel karakterler. Sütun değerleri, dizeler içinde
--, noktalı virgül, ters tırnak, tırnak ve satır sonu içerir. Kalıbınız, hiçbir zaman ayırıcı olması amaçlanmayan veri içindeki metinle eşleşir. - Alt dize olarak tablo adları.
user'ı ayıklamak, adı diğerlerinin alt dizesi olarak geçtiği içinuser_roles,user_sessionsvepassword_user'ı da yakalar. - Yorum ve başlıkların kayması. Tam yorum metni MySQL, MariaDB ve PostgreSQL sürümleri arasında değişir ve
pg_dumpaynı başlıkları hiç kullanmaz — bu yüzden aynı komut sessizce hiçbir şey döndürmez. - Foreign key farkındalığı yok.
orders'ı kusursuz dilimleseniz bile, satırlarıusers'a referans verir.sed'in bundan haberi yoktur, bu yüzden ayıklanan dosya bir foreign key hatasıyla içe aktarılamaz.
Sonunda awk'ı grep'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:
.sqldump'ı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.- 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.
- İstediğiniz tabloları seçin.
users,ordersveproducts'ı işaretleyin ya da bütün grupları tek seferde çıkarmak için*_logsgibi bir regex / hariç tutma kalıbı yazın. - 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:
*_logsya da*_sessionsgibi hariç tutma kalıpları, onlarca tablonun işaretini elle kaldırmadan denetim ve oturum gürültüsünü ayıklar.- Regex filtreleri önek, sonek ya da herhangi bir kalıpla eşleştirmenizi sağlar — örneğin
shop_*ile eşleşen her şeyi tutun. - Canlı önizleme, seçimi değiştirdikçe çıktıda tam olarak hangi tabloların yer alacağını gösterir.
- Tahmini çıktı boyutu, dışa aktarmadan önce ayıklanan dosyanın ne kadar büyük olacağını söyler, böylece yerelde sığacağını bilirsiniz.
- Foreign key bağımlılıkları otomatik olarak dahil edilebilir, böylece
orders'ı seçmek sessizceusers'ı da yanında getirir ve ayıklanan dosya kısıtlama hataları olmadan içe aktarılır.
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 indirSı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