Büyük bir MySql yedek dosyasını birden çok dosyaya nasıl bölerim?


14

Ben 250 MB yedekleme SQL dosyası var ama yeni barındırma sınırı sadece 100 MB ...

Bir SQL dosyasını birden fazla SQL dosyasına bölmenize izin veren bir program var mı?

Görünüşe göre insanlar yanlış soruyu cevaplıyor ... Bu yüzden daha fazla açıklığa kavuşacağım:

SADECE 250 MB dosya var ve sadece şu anda veritabanında veri yok phpMyAdmin kullanarak yeni barındırma var. 250 MB dosyasını alıp yeni ana bilgisayara yüklemem gerekiyor, ancak 100 MB SQL yedekleme dosyası yükleme boyutu sınırı var. Ben sadece çok büyük bir dosya almak ve her biri sadece tam geçerli SQL ifadeleri içeren hiçbir dosyaya bölmek gerekir (hiçbir ifade iki dosya arasında bölünebilir).


Birden çok geçerli SQL dosyası mı olmalı? Dosyayı 100MB'lık birkaç parça halinde arşivlerim ve yüklerim.
Nifle

Evet, birden fazla geçerli SQL dosyası olmalı ... bir dosyada bir ifadenin yarısını, diğer dosyada diğer yarısını içermediği sürece.
Brian T Hannan

Yanıtlar:


5

Kimden Çıktıyı mysqldump'tan daha küçük dosyalara nasıl bölerim?

İlk önce şemayı dökün (kesinlikle 2Mb'ye sığar, hayır?)

mysqldump -d --all-databases

ve geri yükleyin.

Daha sonra, verileri yalnızca ayrı ekleme deyimlerine dökerek dosyaları uzak sunucuda birleştirmeye gerek kalmadan bölebilir ve geri yükleyebilirsiniz

mysqldump --all-databases --extended-insert=FALSE --no-create-info=TRUE

İyi tavsiye! Mantıklı gelir. Tablolar arasında karmaşık bağımlılıklar olduğunda gerçekten iyi, böylece hem şemanın hem de verilerin dışa aktarılmasının bölünmesi işe yaramaz.
Reed Richards

7

Yedek dosyasını bölmenin en basit yolu sqldumpsplitter, db dosyasını birden çok db dosyasına bölmenizi sağlayan bir yazılım kullanmaktır . Buradan indirin

Veya bu terminal komutunu kullanın.

bölünmüş -l 600 ./path/to/source/file.sql ./path/to/dest/file-

Burada 600, bölünmüş dosyalarınızda olmasını istediğiniz satır sayısıdır. Ve iki argüman sırasıyla dosyaların kaynağı ve hedefidir.

NOT: bölünmüş dosyaları kontrol etmeniz gerekir, herhangi bir komutu bölmezsiniz.


1
Doğru yönde ipucu verdiğin için teşekkürler! Ama kullanmak yerine kullanmanızı splitöneririm csplit. Belirli bir satır numarasından hemen sonra bölünmez; bu INSERT, örneğin bir değer listesinin arasında olabilir . Bölünecek çizgileri tanımlamak için normal ifadeyi iletebilirsiniz . Aşağıdaki şekilde kullanın, örnek : `csplit -k dump.sql '/ ^ CREATE TABLE. * /' '{900}' 'Bu, döküm dosyanızı her create table …ifadeden önce böler . Bunu ihtiyaçlarınıza göre değiştirin. (Bu arada "csplit: *}: hatalı tekrar sayısı" hatası alıyorum {900}, bunun yerine MacOS'ta bir sorun olabilir?){*}
Arvid

3

yazdım Hızlı ve kolay bir şekilde talimat verildiği gibi veritabanları / tabloları böler mysqldumpsplitter (kabuk script) . Mysqldump'tan nasıl çıkarılacağı ile ilgili tüm olası kullanım durumlarını görün .

sh mysqldumpsplitter.sh --source mysqldump-file.sql --extract DB --match_str database-name


0

1) Dosyayı başka bir yöntemle yükleme seçeneğiniz var mı: örn. Scp veya ftp ve ardından yerel dosyadan geri yükleme?

2) ISS'niz dosyayı CD'ye alıp sizin için yükleyecek mi?

3) Dosyayı yerel bir sunucuya geri yükleyebilir ve daha sonra belirli boyutları kullanarak belirli ölçütleri kullanarak bir dizi yedekleme dosyası oluşturabilir misiniz?

4) Dosyayı manuel olarak bölebilir ve dosyaların sonunda SQL komutlarını toparlayabilir misiniz?


Seçenek 2, 3 ve 4 hakkında düşünüyordum. 2 son çare olurdu. 3 aslında yapmaya çalışacağım bir sonraki şey. 4 ilk düşüncemdi, ancak büyük dosyayı not defterinde veya herhangi bir düzenleyicide açamıyorum b / c, tüm metnin 250 MB'lık bir dosyasını açmak saatler sürüyor ... tüm not defteri benzeri uygulamalar donuyor ve asla geri dönmüyor.
Brian T Hannan

@Brian: 4 was my first thought, but I can't even open the large file in notepad or any editor - Notepad ++ onları iyi idare edebilir. başka superuser.com/questions/34749/…
Sathyajith Bhat

Dosyayı OTOMATİK OLARAK bölmek ve sonra daha küçük parçaları toplamak istiyorsanız, İsviçre Dosya Bıçağı yardımcı programının bölme seçeneğine bir göz atın ( stahlworks.com/dev/swiss-file-knife.html )
Linker3000

0

Eclipse'de büyük bir dosyayı bölebilirsiniz. Windows'da 105GB'lık bir dosyayı başarıyla denedim:

MySQLDumpSplitter kütüphanesini projenize eklemeniz yeterlidir : http://dl.bintray.com/verace/MySQLDumpSplitter/jar/

İçe aktarma hakkında hızlı not:

- In Eclipse, Right click on your project --> Import
- Select "File System" and then "Next"
- Browse the path of the jar file and press "Ok"
- Select (thick) the "MySQLDumpSplitter.jar" file and then "Finish"
- It will be added to your project and shown in the project folder in Package Explorer in Eclipse
- Double click on the jar file in Eclipse (in Package Explorer)
- The "MySQL Dump file splitter" window opens which you can specify the address of your dump file and proceed with split.

0

Ben de bu sorunu vardı ve birkaç (tablo başına bir) tek bir .sql dosyasını böler son derece bellek ve CPU verimli bir kod parçası karar verdi.

Bulduğum başka bir çözüm yeterince iyi olmadığından yazmak zorunda kaldım. Gerçek bir 16GB dökümünde 2 dakikadan daha kısa sürede bölünmeyi başardım.

Kod ve talimatlar github'daki proje sayfasında bulunabilir


0

Bir bash veya perl betiği çalıştırabiliyorsanız birkaç seçenek vardır. Bunu yoodey.com'dan deneyin

#!/usr/bin/perl -w
#
# splitmysqldump - split mysqldump file into per-database dump files.
use strict;
use warnings;
my $dbfile;
my $dbname = q{};
my $header = q{};
while (<>) {    

# Beginning of a new database section:
    # close currently open file and start a new one
    if (m/-- Current Database\: \`([-\w]+)\`/) {
    if (defined $dbfile && tell $dbfile != -1) {
        close $dbfile or die "Could not close file!"
    }
    $dbname = $1;
    open $dbfile, ">>", "$1_dump.sql" or die "Could not create file!";
    print $dbfile $header;
    print "Writing file $1_dump.sql ...\n";
    }
    if (defined

$dbfile && tell $dbfile != -1) {
    print $dbfile $_;
    }
    # Catch dump file header in the beginning
    # to be printed to each separate dump file.
    if (!

$dbname) { $header .= $_; }
}
close $dbfile or die "Could not close file!"

-1

Dosyayı bölmek yerine, yerel makinenizde bir MySQL istemcisi kullanabilir ve uzak MySQL DB'ye bağlayabilirsiniz. Kullandığım HeidiSQL ve çok iyi bulduk.

Elbette 250MB SQL ifadelerinin Internet üzerinden gönderilmesi biraz zaman alabilir.

BigDump'ı da deneyebilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.