আমি কীভাবে একটি বড় মাইএসকিউএল ব্যাকআপ ফাইলটিকে একাধিক ফাইলে বিভক্ত করব?


14

আমার কাছে 250 এমবি ব্যাকআপ এসকিউএল ফাইল রয়েছে তবে নতুন হোস্টিংয়ের সীমা মাত্র 100 এমবি ...

এমন কোনও প্রোগ্রাম রয়েছে যা আপনাকে একটি এসকিউএল ফাইলটিকে একাধিক এসকিউএল ফাইলগুলিতে বিভক্ত করতে দেয়?

দেখে মনে হচ্ছে লোকেরা ভুল প্রশ্নের জবাব দিচ্ছে ... তাই আমি আরও স্পষ্ট করে বলব:

আমার কাছে কেবল 250 এমবি ফাইল রয়েছে এবং কেবলমাত্র পিএইচপিএমইএডমিন ব্যবহার করে নতুন হোস্টিং রয়েছে যা বর্তমানে ডাটাবেসে কোনও ডেটা নেই। আমার 250 এমবি ফাইলটি নিয়ে নতুন হোস্টে আপলোড করতে হবে তবে 100 এমবি এসকিউএল ব্যাকআপ ফাইল আপলোড আকারের সীমা রয়েছে। আমার কেবল একটি ফাইল খুব বেশি বড় হওয়া দরকার এবং এটিকে প্রতিটি সম্পূর্ণ বৈধ এসকিউএল বিবৃতি সম্বলিত একাধিক ফাইলে বিভক্ত করা উচিত (কোনও বিবৃতি দুটি ফাইলের মধ্যে ভাগ করা যায় না)।


এটি একাধিক বৈধ এসকিউএল ফাইল হতে হবে? আমি ফাইলটি 100MB অংশগুলিতে বেশ কয়েকটি সংরক্ষণাগারে জিপ করব এবং এটি আপলোড করব।
নিফলে

হ্যাঁ, এটি একাধিক বৈধ এসকিউএল ফাইল হতে হবে ... যতক্ষণ না একটি ফাইলে একটি বিবৃতি অর্ধেক এবং অন্য একটি ফাইলে অন্য অর্ধেক না থাকে।
ব্রায়ান টি হান্নান

উত্তর:


5

থেকে আমি কিভাবে ছোট ফাইল মধ্যে mysqldump থেকে আউটপুট বিভক্ত করেন?

প্রথমে স্কিমাটি ফেলে দিন (এটি অবশ্যই 2Mb তে ফিট করে, না?)

mysqldump -d --all-databases

এবং এটি পুনরুদ্ধার।

এর পরে কেবলমাত্র পৃথক statementsোকানো বিবৃতিগুলিতে ডেটা ডাম্প করুন, যাতে আপনি ফাইলগুলি বিভক্ত করতে পারেন এবং সেগুলি রিমোট সার্ভারে যুক্ত না করে পুনরুদ্ধার করতে পারেন

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

সদুপদেশ! নিখুঁত জ্ঞান তোলে। টেবিলের মধ্যে জটিল নির্ভরশীলতা থাকলে সত্যই ভাল যাতে স্কিমা এবং ডেটা উভয়ের রফতানির বিভাজন কাজ করে না।
রিড রিচার্ডস

7

ব্যাকআপ ফাইলটি বিভক্ত করার সহজ উপায় হল একটি সফ্টওয়্যার ব্যবহার করা sqldumpsplitter, যা আপনাকে ডিবি ফাইলকে একাধিক ডিবি ফাইলগুলিতে বিভক্ত করতে দেয় allows এখানে ডাউনলোড করুন

অথবা অন্যথায় এই টার্মিনাল কমান্ডটি ব্যবহার করুন।

বিভক্ত -l 600 ./path/to/source/file.sql ./path/to/dest/file-

এখানে, আপনার বিভক্ত ফাইলগুলিতে আপনি যে লাইনের ইচ্ছা রাখতে চান তা 600 is এবং দুটি আর্গুমেন্ট যথাক্রমে উত্স এবং ফাইলগুলির গন্তব্য।

দ্রষ্টব্য: আপনাকে অবশ্যই বিভক্ত ফাইলগুলি পরীক্ষা করতে হবে, আপনি কোনও কমান্ড বিভক্ত করবেন না।


1
সঠিক নির্দেশে ইঙ্গিত দেওয়ার জন্য ধন্যবাদ! তবে পরিবর্তে splitআমি ব্যবহারের পরামর্শ দিই csplit। এটি নির্দিষ্ট লাইন সংখ্যার পরে ঠিক বিভক্ত হবে না, INSERTউদাহরণস্বরূপ মানগুলির তালিকার অভ্যন্তরে হতে পারে । আপনি বিভক্ত করতে লাইন সনাক্ত করতে একটি রেজেক্স পাস করতে পারেন । এটি নিম্নলিখিত উপায়ে ব্যবহার করুন, উদাহরণস্বরূপ : sp csplit -k dump.sql '/ T টেবিল তৈরি করুন। * /' '{900}' `এটি প্রতিটি create table …বিবৃতি দেওয়ার আগে আপনার ডাম্প ফাইলকে বিভক্ত করবে । এটি আপনার প্রয়োজনে পরিবর্তন করুন। (এর {900}পরিবর্তে আমি যেভাবে পাস করেছি {*}কারণ আমি একটি ত্রুটি পেয়েছি "সিএসপি্লিট: *}: খারাপ পুনরাবৃত্তি গণনা" , ম্যাকোএসের ক্ষেত্রে কেবল একটি সমস্যা?)
অরভিদ

3

আমি মাইএসকিএলডাম্পস্লিটার (শেল স্ক্রিপ্ট) লিখেছিলাম , যা দ্রুত এবং সহজ উপায়ে নির্দেশিত ডাটাবেস / টেবিলগুলি বিভক্ত করে। কীভাবে mysqldump থেকে এক্সট্রাক্ট করা যায় তার সমস্ত সম্ভাব্য ব্যবহারের কেস দেখুন ।

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

2

এই কোডটি আপনি যা চান ঠিক তা করবে (এবং এটি ওপেন সোর্স):

https://web.archive.org/web/20160313044916/http://rodo.nl/index.php?page=mysql-splitter

এটি আপনাকে যে কোনও এসকিউএল ফাইলকে কয়েকটি ছোট ফাইলগুলিতে বিভক্ত করতে দেয় (আপনি সর্বাধিক আকার নির্ধারণ করতে পারেন) এসকিউএল সিনট্যাক্সটি সঠিক রাখা হবে এবং এটি 'একাধিক সন্নিবেশ' ক্যোয়ারী সিনট্যাক্সের সাথে কাজ করে।

আশাকরি এটা সাহায্য করবে!


0

1) আপনার কাছে অন্য কোনও পদ্ধতি দ্বারা ফাইলটি আপলোড করার বিকল্প আছে যেমন: scp বা ftp এবং তারপরে স্থানীয় ফাইল থেকে পুনরুদ্ধার করবেন?

2) আপনার আইএসপি ফাইলটি সিডি-তে নেবে এবং এটি আপনার জন্য লোড করবে?

3) আপনি কোনও স্থানীয় সার্ভারে ফাইলটি পুনরুদ্ধার করতে পারবেন এবং তারপরে স্বতন্ত্র আকারকে নীচে রাখতে নির্দিষ্ট মানদণ্ড ব্যবহার করে এ থেকে ব্যাকআপ ফাইলগুলির একটি সিরিজ তৈরি করতে পারেন?

4) আপনি ফাইল নিজে নিজেই বিভক্ত করতে পারেন তারপর ফাইলগুলির শেষে এসকিউএল কমান্ডগুলি পরিপাটি করে?


আমি বিকল্প 2, 3 এবং 4 সম্পর্কে ভাবছিলাম 2 2 শেষ সমাধান হবে। 3 সম্ভবত পরবর্তী কাজটি আমি করার চেষ্টা করতে যাচ্ছি। 4 আমার প্রথম চিন্তা ছিল, তবে আমি নোটপ্যাড বা কোনও সম্পাদক বি / সি-তে বড় ফাইলও খুলতে পারি না সমস্ত পাঠ্যের 250 এমবি ফাইল খুলতে কয়েক ঘন্টা সময় লাগে ... সমস্ত নোটপ্যাডের মতো অ্যাপ্লিকেশন হিমায়িত হয় এবং কখনই ফিরে আসে না।
ব্রায়ান টি হান্নান

@ ব্রায়ান: 4 was my first thought, but I can't even open the large file in notepad or any editor - নোটপ্যাড ++ এগুলি সূক্ষ্মভাবে পরিচালনা করতে পারে। অন্যথায় superuser.com
সেকশনগুলি

আপনি যদি স্বয়ংক্রিয়ভাবে ফাইলটি বিভক্ত করতে চান এবং তারপরে আরও ছোট ছোট টুকরাগুলি পরিষ্কার করতে চান তবে সুইস ফাইল ছুরি ইউটিলিটির ( স্টল্লওয়ার্কস / দেবদেবস / সুইস- ফাইলে- কনিফ.এইচটিএমএল ) বিভাজন বিকল্পটি দেখুন
Linker3000

0

আপনি Eclipse এ একটি বৃহত ফাইল বিভক্ত করতে পারেন। আমি উইন্ডোজটিতে একটি 105 গিগাবাইট ফাইল সফলভাবে চেষ্টা করেছি:

আপনার প্রকল্পে কেবল মাইএসকিউএলডাম্পস্প্লিটার লাইব্রেরি যুক্ত করুন: http://dl.bintray.com/verace/MySQLDumpSplitter/jar/

কীভাবে আমদানি করবেন সে সম্পর্কে দ্রুত নোট:

- 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

আমারও এই সমস্যাটি ছিল এবং একটি অত্যন্ত মেমোরি এবং সিপিইউ দক্ষ কোডের কোড কোড করার সিদ্ধান্ত নিয়েছে যা একটি একক। এসকিউএল ফাইলকে কয়েকটি (এক-টেবিল প্রতি এক টাকায়) বিভক্ত করে।

আমি এটি লিখতে হয়েছিল যেহেতু আমার কাছে পাওয়া অন্য কোনও সমাধান যথেষ্ট ভাল পারফর্ম করছে না। সত্যিকারের 16 গিগাবাইটের ডাম্পে আমি এটি 2 মিনিটেরও কম সময়ে বিভক্ত করতে সক্ষম হয়েছি।

কোড এবং নির্দেশাবলী গিথুবে প্রকল্পের পৃষ্ঠায় পাওয়া যায়


0

আপনি বাশ বা পার্ল স্ক্রিপ্ট চালাতে পারলে কয়েকটি বিকল্প রয়েছে। Yoodey.com থেকে এটি ব্যবহার করে দেখুন

#!/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

ফাইলটি বিভক্ত করার পরিবর্তে, আপনি আপনার স্থানীয় মেশিনে একটি মাইএসকিউএল ক্লায়েন্ট ব্যবহার করতে এবং এটি দূরবর্তী মাইএসকিউএল ডিবিতে সংযুক্ত করতে পারেন। আমি হাইডিএসকিউএল ব্যবহার করেছি এবং এটি খুব ভাল পেয়েছি।

অবশ্যই ইন্টারনেটে 250MB এসকিউএল স্টেটমেন্ট পাঠাতে কিছুটা সময় নিতে পারে।

আপনি বিগডাম্পও চেষ্টা করে দেখতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.