মাইএসকিউএল ডাটাবেসগুলি আমদানি করার সময় একটি অগ্রগতি সূচক পান


21

আমি প্রায়শই মাইএসকিউএল ডেটাবেস আমদানি করি এবং এতে কিছুটা সময় নিতে পারে। যা আছে তাতে কোনও অগ্রগতি সূচক নেই। এক দেখাতে পারে, একরকম? হয় রেকর্ড আমদানি করা, এমবি আমদানি করা, বা টেবিলগুলি আমদানি করা ... কেবল অপেক্ষা অপেক্ষা আরও ভাল is কেউ ধারণা?

আমি এই আদেশটি ব্যবহার করি:

mysql -uuser -p -hhost database < largefile.sql

ফাইলগুলি 40-300 এমবি এর মধ্যে থাকে এবং হোস্টটি স্থানীয় নেটওয়ার্কের মধ্যে থাকে।



@ এসআর_ আমার মনে pvহয় প্রশ্নকর্তা ঠিক এর জন্য অনুসন্ধান করেন। আমি কেবল এটি আরপিএমফোজের মাধ্যমে সেন্টোজে ইনস্টল করেছি। যদি আকার- পরিমাপক দেওয়া হয় এটি এমনকি একটি ইটিএও দেখায়।
নিলস

pvকৌতুক আসলেই করেছিল! যদি কেউ এই উত্তর দিতে পারে তবে আমি এটি গ্রহণ করতে পারি!
মনিকা

উত্তর:


31

বলা হয় দুর্দান্ত সরঞ্জাম pv

# On Ubuntu/Debian system
$ sudo apt-get install pv

# On Redhat/CentOS
$ sudo yum install pv

তাহলে যেমন আপনি এটি ব্যবহার করতে পারেন

$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname

আমার সর্বশেষ সংস্করণ জন্য দয়া করে আপডেট 2 পরীক্ষা করুন

PS: এই ব্লগ দেখুন http://blog.larsstrand.org/2011/12/tip-pipe-viewer.html

আপডেট: মনে হচ্ছে উপরের লিঙ্কটি নষ্ট হয়ে গেছে তবে আমি এখানে একই নিবন্ধটি পেয়েছি http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html

আপডেট 2: সম্পূর্ণ অগ্রগতি বারের সাথে আরও ভাল সমাধান। এটি করতে আপনার pvবিকল্পগুলি 2 বিল্ড ব্যবহার করতে হবে । একটি হ'ল --progressঅগ্রগতি বারটি নির্দেশ করা এবং দ্বিতীয়টি সামগ্রিক ফাইলটি কত বড় --sizeতা বলা tellpv

pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES

.. সমস্যাটি .gzমূল ফাইলের আকারের। আপনার নিজের ফাইলটি আনপ্যাক না করে কোনওভাবে আনপ্যাক করা মূল ফাইলের আকারের প্রয়োজন, অন্যথায় আপনি এই ফাইলটি দুবার আনপ্যাক করার জন্য মূল্যবান সময় হারাবেন (প্রথমবারের জন্য pvএবং দ্বিতীয়বারের জন্য zcat)। তবে ভাগ্যক্রমে আপনার কাছে gzip -lবিকল্প রয়েছে যাতে আমাদের জিপিড ফাইল সম্পর্কে সঙ্কুচিত তথ্য রয়েছে। দুর্ভাগ্যক্রমে আপনি এটি টেবিল বিন্যাসে রেখেছেন যাতে এটি ব্যবহারের আগে আপনাকে উত্তোলন করতে হবে। সমস্ত একসাথে নীচে দেখা যাবে:

gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'

উফ .. সুতরাং আপনাকে শেষ কাজটি করতে হবে কেবল সমস্ত একত্রিত করা।

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname

এটিকে আরও সুন্দর করার জন্য আপনি NAME এর মতো প্রগ্রেস যুক্ত করতে পারেন

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass dbname

সর্বশেষ ফলাফল:

Importing.. : [===========================================>] 100%

আপডেট 3: দ্রুত ব্যবহারের জন্য কাস্টম ফাংশন তৈরি করুন।

mysql_import() {
  zcat $2 | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass $1
}

ব্যবহার:

mysql_import dbname /path/to/our/database.sql.gz

এটি কোথায় রাখবেন তা যদি আপনি জানেন না তবে এই উত্তরটি পড়ুন: /unix//a/106606/20056

আপনি এলিয়াসগুলির মধ্যে ফাংশন যুক্ত করতে পারেন। সুতরাং আপনি যেমন ~/.bash_aliasesফাইল ব্যবহার করতে পারেন ।


এটা সত্যিই দারুন.
ডেভ

1
আরও ভাল ফলাফল সহ একটি লাইনার এটি হ'ল:pv --progress --name 'DB Import in progress' -tea /path/to/our/database.sql.gz | zcat | mysql -h db_host -u db_user -pdb_password db_name
ডেনিস পিৎসালিস


7

আমি সবসময় মাইএসকিএল শেল থেকে ডেটাবেস আমদানি করি। এটি কোনও অগ্রগতি সূচক সরবরাহ করে না, তবে এটি (দ্রুত) এটি সম্পাদন করছে এমন ক্রিয়াগুলি স্ক্রোল করে যাতে আমি জানি যে এটি কাজ করছে।

# mysql -u user -p -h host database
> source /path/to/some/largefile.sql;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.