2012-10-28 9 views
6

मेरे पास मेरे स्थानीय देव सर्वर पर एक बहुत बड़ी MySQL तालिका है: डेटा की 8 मिलियन से अधिक पंक्तियां। मैंने लोड डेटा इन्फ्लू का उपयोग करके तालिका को सफलतापूर्वक लोड किया।एक बड़ी MySQL तालिका को एकाधिक छोटी फ़ाइलों के रूप में निर्यात करें

अब मैं इस डेटा को निर्यात करना और इसे दूरस्थ होस्ट पर आयात करना चाहता हूं।

मैंने दूरस्थ डेटा में लोड डेटा स्थानीय INFILE की कोशिश की। हालांकि, लगभग 15 मिनट के बाद रिमोट होस्ट का कनेक्शन विफल हो जाता है। मुझे लगता है कि मेरे लिए डेटा को कई छोटी फाइलों में निर्यात करने का एकमात्र समाधान है।

मेरे निपटारे के उपकरण PhpMyAdmin, HeidiSQL और MySQL वर्कबेंच हैं।

मुझे पता है कि एक फ़ाइल के रूप में निर्यात कैसे करें, लेकिन एकाधिक फाइलें नहीं। मैं यह कैसे कर सकता हूँ? में db_name को

mysqldump -u user -p db_name > backupfile.sql 

backupfile से आयात: अपने mysql में db_name से backupfile.sql को

निर्यात:

+1

तुम बस के लिए आवश्यक तालिका mysqldump'ing और आयात के माध्यम से यह पुनर्निर्माण की कोशिश कर सकते। –

+0

क्या आप अपनी स्थानीय मशीन से MySQL मशीन से कनेक्ट कर सकते हैं? – Michael

+0

@ माइकल - हां, ज़ाहिर है। मैं डेटाबेस n¿maintenance के लिए HeidiSQL का उपयोग कर रहा हूँ। – Billy

उत्तर

4

mysqldump

आपका लाइनों पर एक नजर डालें (टर्मिनल से) होना चाहिए आपका mysql:

mysql -u user -p db_name < backupfile.sql 

आपके पास दो opti हैं

  1. स्प्लिट छोटी फ़ाइलों में उत्पादन पाठ फ़ाइल (के रूप में कई आप की जरूरत के रूप में, कई उपकरण ऐसा करने के लिए, उदाहरण के लिए: ऑन आदेश की जानकारी विभाजित करने के लिए में split)।
  2. निर्यात एक मेज हर बार तो जैसे db_name के बाद एक मेज नाम जोड़ने के लिए, विकल्प का उपयोग:

    mysqldump -u user -p db_name table_name > backupfile_table_name.sql

फ़ाइल (रों) (एक पाठ फ़ाइल) को संपीड़ित बहुत ही कुशल है और इसे अपने मूल आकार के लगभग 20% -30% तक कम कर सकता है।

फ़ाइलों को दूरस्थ सर्वर पर कॉपी करना scp (सुरक्षित प्रति) के साथ किया जाना चाहिए और एसएसएच (आमतौर पर) के साथ बातचीत होनी चाहिए।

शुभकामनाएं।

+0

"आउटपुट टेक्स्ट फ़ाइल को छोटी फ़ाइलों में विभाजित करें (जितना आपको चाहिए, इसे करने के लिए कई टूल)।" - क्या उपकरण? यह सवाल था: मैं इसे कैसे कर सकता हूं? – Billy

+0

संपादन पर एक नज़र डालें। एक उदाहरण के रूप में यूनिक्स का "विभाजन" जोड़ा गया, अधिकांश सिस्टम पर उपलब्ध होना चाहिए। –

2

एक एकल तालिका

mysqldump -u root -ppassword yourdb yourtable > table_name.sql 

आयात के लिए mysqldump दृष्टिकोण का एक उदाहरण के रूप में तो के रूप में सरल रूप में

mysql -u username -ppassword yourotherdb < table_name.sql 
+0

मुझे यह बड़े निर्यात/आयात के लिए विशेष रूप से तेज़ पाया गया है। ओपी के लिए अच्छा सुझाव। – CodeTalk

+0

हाँ, यह अच्छा है, हालांकि मेरे पास सर्वर पर एसएसएच पहुंच नहीं है। यह वास्तविक प्रश्न का उत्तर नहीं देता है। – Billy

+0

@ बिली आप अभी भी डंप फ़ाइल पर phpmyadmin आयात चला सकते हैं, अगर आपके पास phpmyadmin पहुंच है। आपके पास आंशिक आयात करने का विकल्प है, फिर सफलतापूर्वक होने वाली संख्या के रूप में छोड़ने के लिए प्रश्नों की संख्या निर्दिष्ट करके जारी रखें। –

1

उपयोग mysqldump एक फ़ाइल में तालिका डंप करने के लिए है। फिर फ़ाइल को ज़िप करने के लिए -z विकल्प के साथ tar का उपयोग करें। इसे अपने रिमोट सर्वर पर स्थानांतरित करें (ftp, sftp या अन्य फ़ाइल स्थानांतरण उपयोगिता के साथ)। फिर फ़ाइल को आयात करने के लिए दूरस्थ सर्वर पर फ़ाइल को अनार करें mysql का उपयोग करें।

मूल फ़ाइल को विभाजित करने या एकाधिक फ़ाइलों में निर्यात करने का कोई कारण नहीं है।

+1

आप सख्त क्वेरी टाइमआउट सेटिंग्स के आसपास कैसे काम करते हैं? – Vyktor

+0

@ विक्टर कृपया, मुझे अपने प्रश्न को थोड़ा और समझाएं। मुझे यहां कुछ जानकारी याद आ रही है।मेरा पहला त्वरित उत्तर यह है कि मुझे किसी भी क्वेरी टाइमआउट की उम्मीद नहीं है। "mysql" कमांड स्थानीय मशीन पर "xxx.sql" फ़ाइल (निर्यात का परिणाम) संसाधित करेगा जहां आयात होने जा रहा है। "xxx.sql" फ़ाइल में आयात की जा रही तालिका के लिए "सम्मिलित करें" कमांड शामिल हैं (लगभग 8 मिलियन ऐसे आदेश/कथन की अपेक्षा करें, यानी तालिका के पंक्तियों की संख्या के बराबर)। मुझे किसी भी टाइमआउट के कारण इन "डालने" कमांड विफल होने का कोई कारण नहीं दिखता है। –

+0

यह एक साझा होस्ट है - मुझे कमांड लाइन पर MySQL तक पहुंच नहीं है। – Billy

3

मैंने पाया कि phpMyAdmin में उन्नत विकल्प मुझे कितने पंक्तियां निर्यात करने का चयन करने के लिए अनुमति देते हैं, के साथ साथ प्रारंभ बिंदु। यह मुझे रिमोट होस्ट पर टेबल प्राप्त करने के लिए आवश्यक कई डंप फ़ाइलों को बनाने की अनुमति देता है।

मैं अपने php.ini सेटिंग्स को समायोजित करने के लिए किया था, के साथ साथ phpMyAdmin config 'ExecTimeLimit' डंप फ़ाइलों को पैदा करने के रूप में स्थापित करने के लिए कुछ समय (प्रत्येक में 500,000 पंक्तियों) लेता है।

मैं HeidiSQL का उपयोग आयात करते हैं।

+0

के माध्यम से छोटी फ़ाइलों को आयात कर सकता हूं धन्यवाद, यह मेरी समस्या का समाधान करता है। –

15

मैं सिर्फ था कि एक आयात/50 लाखों लोगों की रिकॉर्ड के साथ एक (विभाजित) तालिका के निर्यात, यह सिर्फ 2 मिनट मेरी धीमी डेस्कटॉप पर आयात करने के लिए एक यथोचित तेजी से मशीन और 15 मिनट से निर्यात करने के लिए की जरूरत है। फ़ाइल को विभाजित करने की कोई आवश्यकता नहीं थी।

mysqldump अपने दोस्त, और जानते हुए भी है आप डेटा का एक बहुत यह

@host1:~ $ mysqldump -u <username> -p <database> <table> | gzip > output.sql.gz 
@host1:~ $ scp output.sql.gz host2:~/ 
@host1:~ $ rm output.sql.gz 
@host1:~ $ ssh host2 
@host2:~ $ gunzip < output.sql.gz | mysql -u <username> -p <database> 
@host2:~ $ rm output.sql.gz 
+1

व्यापक उपयोग उदाहरण जो काम करता था। धन्यवाद। –

0

संपीड़ित करने के लिए आप mysqldump कमांड लाइन उपकरण का उपयोग कर के साथ सहज नहीं हैं, तो बेहतर है कि, यहाँ दो जीयूआई उपकरण कर सकते हैं कि कर रहे हैं उस समस्या के साथ आपकी मदद करें, हालांकि आपको उन्हें FTP पर सर्वर पर अपलोड करने में सक्षम होना चाहिए!

Adminer एक स्लिम और बहुत ही कुशल डीबी प्रबंधक उपकरण में कम से कम PHPMyAdmin के रूप में के रूप में शक्तिशाली है और केवल एक एकल फाइल है कि सर्वर जो यह अत्यंत स्थापित करने के लिए आसान हो जाता है पर अपलोड किया है है। यह पीएमए की तुलना में बड़ी टेबल/डीबी के साथ बेहतर तरीके से काम करता है।

MySQLDumper तो यह आपके द्वारा वर्णित स्थिति के साथ कोई समस्या नहीं होगा विकसित विशेष रूप से निर्यात करने के लिए एक उपकरण/आयात बड़े टेबल/डीबीएस है। केवल dowside है कि यह थोड़ा अधिक कठिन के रूप में वहाँ अधिक फ़ाइलों और फ़ोल्डरों (~ ~ 1.5MB में 350 फ़ाइलें) कर रहे हैं स्थापित करने के लिए है, लेकिन यह एक समस्या FTP के माध्यम से इसे अपलोड करने की भी नहीं होना चाहिए, और यह निश्चित रूप से मिल जाएगा काम किया :)

तो मेरी सलाह पहले Adminer कोशिश करने के लिए हो सकता है और यह है कि एक भी MySQLDumper तरीका अपनाते हैं विफल रहता है।

1

How do I split a large MySQL backup file into multiple files?

आप mysql_export_explode उपयोग कर सकते हैं https://github.com/barinascode/mysql-export-explode

<?php 
#Including the class 

include 'mysql_export_explode.php'; 
$export = new mysql_export_explode; 

$export->db = 'dataBaseName'; # -- Set your database name 
$export->connect('host','user','password'); # -- Connecting to database 
$export->rows = array('Id','firstName','Telephone','Address'); # -- Set which fields you want to export 
$export->exportTable('myTableName',15); # -- Table name and in few fractions you want to split the table 
?> 

At the end of the SQL files are created in the directory where the script is executed in the following format 
--------------------------------------- 
myTableName_0.sql 
myTableName_1.sql 
myTableName_2.sql 
... 
संबंधित मुद्दे