भौतिक फ़ाइलों से MySQL डेटाबेस को पुनर्स्थापित करना


139

क्या भौतिक डेटाबेस फ़ाइलों से MySQL डेटाबेस को पुनर्स्थापित करना संभव है। मेरे पास एक निर्देशिका है जिसमें निम्नलिखित फ़ाइल प्रकार हैं:

client.frm
client.MYD
client.MYI

लेकिन लगभग 20 और तालिकाओं के लिए।

मैं आमतौर पर 1 SQL फ़ाइल में सब कुछ पाने के लिए mysqldump या इसी तरह के उपकरण का उपयोग करता हूं ताकि इन प्रकार की फाइलों से निपटने का तरीका क्या हो?


मेरे पास एक ही मुद्दा है: एक्सटेंशन FRM, MYD और MYI के साथ कई फाइलें। मेरे पास ib_logfile0, ib_logfile1 और ibdata1 फाइलें भी हैं। मैं एक रनिंग सर्वर तक नहीं पहुँच सकता या डंप नहीं बना सकता। मैंने एक नया MySQL सर्वर चलाने और फ़ाइलों का उपयोग करने की कोशिश की, लेकिन मैंने सुसाइड नहीं किया ... क्या किसी के पास एक स्पष्ट तरीका है?
flo5783

जवाबों:


132

एक MySQL MyISAM तालिका तीन फ़ाइलों का संयोजन है:

  • FRM फ़ाइल तालिका परिभाषा है।
  • MYD फ़ाइल वह जगह है जहाँ वास्तविक डेटा संग्रहीत किया जाता है।
  • MYI फ़ाइल वह जगह है जहाँ तालिका पर बनाए गए अनुक्रमित संग्रहीत किए जाते हैं।

आपको उन्हें अपने डेटाबेस फ़ोल्डर में कॉपी करके पुनर्स्थापित करने में सक्षम होना चाहिए (लिनक्स में, डिफ़ॉल्ट स्थान है /var/lib/mysql/)

सर्वर नहीं चल रहा है, तो आपको इसे करना चाहिए।


64
यह केवल MyISAM तालिकाओं के लिए सही है। InnoDB अपने टेबल और इंडेक्स को एक सिंगल टेबलस्पेस * में संग्रहीत करता है, जो डिफ़ॉल्ट रूप से 3 फाइलों ibdata1, ib_logfile0, और ib_logfile1 से मिलकर बनता है। डेटाबेस को पुनर्स्थापित करने के लिए, आपको उन फ़ाइलों की भी आवश्यकता होगी। * प्रति-टेबल टेबलस्पेस संभव हैं, लेकिन डिफ़ॉल्ट नहीं
कुल्हाड़ी।

21
वह कहता है कि उसके पास .frm .myi और .myd फाइलें हैं। मैंने तब मान लिया था कि यह MyISAM टेबल था।
विंसेंट

5
मूल्यवान जवाब, लेकिन मुझे चीजों को ठीक करने के लिए एक कदम और आगे जाना था: चूंकि मुझे फ़ाइलों को पुनर्स्थापित करने के लिए रूट के रूप में लॉग इन करना था, mysqlइसलिए mysqldप्रक्रिया चलाने वाले उपयोगकर्ता उन तक पहुंच नहीं सकते थे। chmod -R mysql:mysql .Mysql डेटा निर्देशिका पर करना त्वरित और आसान है, लेकिन यह पता लगाना, इससे पहले कि मेरे सभी resoterd DBs को लगता है कि कोई तालिकाओं में थोड़ा अधिक समय नहीं लगा था।
एडुक पास्कल सेप

10
herenvardo मुझे लगता है कि आपको चोदने का मतलब नहीं था
ओलिवर एम ग्रीच

2
कुछ महत्वपूर्ण नोटों को chownsudo chown -R mysql:mysql /var/lib/mysql
पुन

50

@Vicent के उत्तर से, मैं पहले से ही MySQL डेटाबेस को नीचे की तरह पुनर्स्थापित करता हूं:

चरण 1. शटडाउन Mysql सर्वर

चरण 2. अपने डेटाबेस फ़ोल्डर में डेटाबेस को कॉपी करें (लिनक्स में, डिफ़ॉल्ट स्थान / var / lib / mysql है)। डेटाबेस का एक ही नाम और डेटाबेस का एक ही नाम mysql मोड में रखें।

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

चरण 3: स्वयं बदलें और मोड बदलें फ़ोल्डर:

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

चरण 4: अपने डेटाबेस फ़ोल्डर में ibdata1 की प्रतिलिपि बनाएँ

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

चरण 5: अपने डेटाबेस फ़ोल्डर में ib_logfile0 और ib_logfile1 फ़ाइलों की प्रतिलिपि बनाएँ।

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

याद रखें खुद को बदलें और उन फाइलों की जड़ बदलें:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

या

sudo chown -R mysql:mysql /var/lib/mysql

चरण 6 (वैकल्पिक): मेरी साइट में विशिष्ट स्थान पर फ़ाइलों को संग्रहीत करने के लिए कॉन्फ़िगरेशन है, फिर मैं उन लोगों को उसी स्थान पर कॉपी करता हूं, बिल्कुल।

चरण 7: अपना मैसकॉल सर्वर शुरू करें। सब कुछ वापस आता है और इसका आनंद लेता है।

बस इतना ही।

अधिक जानकारी यहाँ देखें: https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/


4
चरण निर्देश द्वारा विस्तृत चरण के लिए +1। लेकिन मैंने कुछ बयानों को वास्तव में प्रतिबिंबित करने के लिए संपादित किया कि उन्हें क्या होना चाहिए।
पीटर

डेटा एक्सेस करने में असमर्थ # 1932 त्रुटि हुई। डेटाबेस दिखाई देते हैं, लेकिन डेटा सुलभ नहीं है। मैक ओएस एक्स Mojave पर XAMPP 7.2.12 चल रहा है।
स्टीव १16५४ ए

@ स्टीव 1754 ए कई कारणों से त्रुटि कर सकता है। क्या आप मैक ओएस से मैक ओएस के लिए डेटाबेस स्थानांतरित करते हैं? 2. कृपया उन फ़ाइलों / डेटा / टेबल की अनुमति की जाँच करें
biolinh

उत्तर: 1. हाँ; 2. मैंने किया। मुझे अपने DB का पूर्ण पुनर्निर्माण करना था। कोई समाधान नहीं निकाल सका। कहानी के लिए नैतिक: हमेशा DB का बैकअप बनाएं। काश XAMPP में स्वचालित रूप से ऐसा करने का एक आसान तरीका होता।
स्टीव

1
आपने मेरी जान बचाई
स्पंजपब्लो

8

यदि आप फ़ोल्डर को पुनर्स्थापित कर रहे हैं, तो फ़ाइलों को mysql पर मत भूलना: mysql

chown -R mysql:mysql /var/lib/mysql-data

अन्यथा डेटाबेस को छोड़ने या नए कॉलम आदि को जोड़ने की कोशिश करते समय आपको त्रुटियां मिलेंगी।

और MySQL पुनः आरंभ करें

service mysql restart

2
यह वास्तव में सवाल का जवाब नहीं है, लेकिन बहुत मददगार था।
रयानतुक

वास्तविक रूप से आपको mysql को सब कुछ नहीं देना चाहिए, mysql डेटाबेस फ़ोल्डर को रूट समूह को बनाए रखना चाहिए
Galvani

8

मेरे पास एक ही समस्या है, लेकिन ऊपर दिए गए निर्देशों के आधार पर, डेटाबेस को सफलतापूर्वक पुनर्प्राप्त करने में सक्षम नहीं था।

मैं केवल अपने Ubuntu ओएस से mysql डेटाबेस फ़ोल्डर्स को पुनर्प्राप्त करने में सक्षम था। मेरी समस्या यह है कि उन अपठनीय mysql डेटा फ़ोल्डरों के साथ अपने डेटाबेस को कैसे पुनर्प्राप्त किया जाए। इसलिए मैंने विकास के माहौल के लिए win7 OS पर वापस स्विच किया।

* नोट: मेरे पास win7 में एक मौजूदा डेटाबेस सर्वर चल रहा है और मुझे केवल पुनर्प्राप्त फ़ाइलों से पुनर्प्राप्त करने के लिए कुछ डेटाबेस फ़ाइलों की आवश्यकता है। उबंटू ओएस से डेटाबेस फ़ाइलों को सफलतापूर्वक पुनर्प्राप्त करने के लिए मुझे उस पुराने डेटाबेस सर्वर में सब कुछ पुनर्प्राप्त करने के लिए mysql डेटाबेस सर्वर (उबंटू ओएस से समान संस्करण) में नए सिरे से स्थापित करने की आवश्यकता है।

  1. पुनर्प्राप्त फ़ाइलों से एक और नया mysql डेटाबेस सर्वर समान संस्करण बनाएं।

  2. Mysql सर्वर बंद करो

  3. बरामद फ़ोल्डर और पेस्ट को कॉपी करें (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data) mysql डेटाबेस संग्रहीत है।

  4. लिनक्स mysql स्थापित फ़ोल्डर में स्थित ibdata1 फ़ाइल को कॉपी करें और इसे (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data) में पेस्ट करें। बदलने से पहले मौजूदा को अधिलेखित करें या बैकअप बनाएं।

  5. mysql सर्वर शुरू करें और जांचें कि क्या आपने डेटाबेस फ़ाइलों को सफलतापूर्वक पुनर्प्राप्त किया है।

  6. मेरे वर्तमान में उपयोग किए गए mysql सर्वर में पुनर्प्राप्त डेटाबेस का उपयोग करने के लिए, बस पुनर्प्राप्त डेटाबेस को निर्यात करें और इसे मेरे मौजूदा mysql सर्वर को आयात करें।

आशा है कि ये मदद करेंगे, क्योंकि मेरे लिए और कुछ काम नहीं किया गया।


1
विधि ibuntu1, ib_logfile0 और ib_logfile1 फ़ाइलों और डेटाबेस फ़ोल्डर के साथ ubuntu / debian पर भी काम करती है। उपयोगकर्ता की प्रतिलिपि नहीं बनाई जाएगी, लेकिन तब आप डेटाबेस में एक नया उपयोगकर्ता जोड़ सकते हैं और इसे उसी के साथ डंप कर सकते हैं।
बोकेरबेन

2

MySql 5.1 (Win7) के साथ। DBs (InnoDbs) को फिर से बनाने के लिए मैंने निम्नलिखित dirs (my.ini params) की सभी सामग्रियों को बदल दिया है:

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

उसके बाद मैंने MySql Service शुरू की और सभी ठीक काम करते हैं।


1

हाँ यही है! बस उन्हें अपने डेटाबेस-फ़ोल्डर (ओएस पर निर्भर करता है) में जोड़ें और "MySQL Fix अनुमतियाँ" जैसे एक कमांड चलाएं। यह डेटाबेस को फिर से संग्रहीत करता है। यह भी देखें कि अस्वस्थता सही फाइलों के साथ फाइल पर सेट है।


मैंने इसे किया था, लेकिन मैं इसे तालिकाओं को नहीं पहचानता। जैसा कि मैंने पिछले उत्तर पर अपनी टिप्पणी में कहा था।
orezvani

0

मैंने एक बार इन फ़ाइलों को एक mysql डेटाबेस के लिए डेटाबेस स्टोरेज फ़ोल्डर में कॉपी किया था, जो काम कर रहा था, db को शुरू किया और इसके लिए फाइलों की "मरम्मत" की प्रतीक्षा की, फिर उन्हें mysqldump के साथ निकाला।


-1

मेरे मामले में, केवल / var / lib / mysql में tlog को हटाने के लिए mariadb / mysql को फिर से शुरू करने के लिए पर्याप्त था।


यह mysql सर्वर को प्रारंभ / पुनरारंभ करने में सक्षम होने का मुद्दा नहीं है।
ओलुवतुंबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.