मैं टेबल संरचना का बैकअप कैसे ले सकता हूं लेकिन MySQL में इसका डेटा नहीं है


20

मैं अपने डेटाबेस का बैकअप बनाने के लिए MySQL एडमिनिस्ट्रेटर का उपयोग कर रहा हूं। मैं पूरी तरह से अपने सभी तालिकाओं के साथ पूरे डेटाबेस का बैकअप ले सकता हूं। कुछ टेबल हैं जिनका आकार बहुत बड़ा है इसलिए मुझे आश्चर्य होता है कि क्या मैं केवल टेबल की संरचना (केवल उनके तत्व) का बैकअप ले सकता हूं लेकिन उनके डेटा का नहीं।

जवाबों:


40

--no-dataMysqldump के साथ स्विच का उपयोग करें यह बताने के लिए कि डेटा को डंप न करें, केवल तालिका संरचना।

यह तालिकाओं के लिए क्रिएट टेबल स्टेटमेंट आउटपुट करेगा।

कुछ इस तरह

mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql

विशिष्ट तालिकाओं को लक्षित करने के लिए, डेटाबेस नाम के बाद उन्हें दर्ज करें।

mysqldump --no-data -h localhost -u root -ppassword mydatabase table1 table2 > mydatabase_backup.sql

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_no-data

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html


+1 सही के बारे में लगता है।
फरवरी को डेविड पशले

बहुत बहुत धन्यवाद ल्यूक। मैं उस के साथ प्रबंधित कर सकता था। लिखने के क्षण में मुझे mysqldump के बारे में कुछ भी पता नहीं था, लेकिन मैं --no-data स्विच के साथ समस्या को हल कर सकता था। तब मैंने MySQL के प्रशासक को उस तालिका का "CREATE SCRIPT" भी ​​पाया, ताकि मैं इस विकल्प के साथ भी इस समस्या को हल कर सकूं।

3

जैसा कि ल्यूक ने कहा, mysqldump को -no-data विकल्प वही करेगा जो आप चाहते हैं।

इसके साथ जोड़ने के लिए, यहाँ एक बैकअप स्क्रिप्ट है जो मैंने लिखा है कि सभी mysql डेटाबेस को सादे पाठ फ़ाइलों के लिए डंप करता है, और प्रत्येक डेटाबेस की तालिका स्कीमा और डेटा के लिए अलग डंप फ़ाइलें बनाता है (यह किसी अन्य mysll सर्वर पर तालिकाओं को पुनर्स्थापित करना या बनाना बिना सामान्य है) डेटा, और यह करना बहुत आसान है, जब आपके पास पहले से ही एक छोटी फाइल है, जिसमें केवल CREATE TABLE / CREATE INDEX आदि शामिल हैं]

#! / Bin / bash

# backup-mysql.sh
#
# क्रेग सैंडर्स <cas@taz.net.au>
# यह स्क्रिप्ट पब्लिक डोमेन में है। आप इसके साथ जो चाहें करें।

MyUser = "उपयोगकर्ता नाम"
MYPWD = "PASSWD"

ARGS = "- एकल-लेनदेन --flush-लॉग - अपूर्ण-सम्मिलित करें"

DATABASES = $ (mysql -D mysql --skip-column-names -B-'' show database; '; egrep -v' information_schema ');


BACKUPDIR = / var / बैकअप / mysql

YEAR = $ (दिनांक + "% Y")
महीने = $ (दिनांक + "% m")
DAY = $ (दिनांक + "% d")

Date = "$ साल $ MONTH / $ साल $ MONTH- $ दिन"

mkdir -p $ BACKUPDIR / $ DATE
cd $ BACKUPDIR / $ DATE

के लिए मैं $ DATABASES में; कर
  इको-एन "बैकअप $ मैं: स्कीमा ..."
  mysqldump $ ARGS --no-data -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql

  इको-एन "डेटा ..."
  mysqldump $ ARGS --skip-opt --no-create-db --no-create-info -u $ MYUSER -p $ MYPWD $ i> $ i.data.sql

  इको-एन "कंप्रेसिंग ..."
  gzip -9fq $ i.schema.sql $ i.data.sql
  गूंज "किया।"
किया हुआ

# 30 दिनों से पुराने बैकअप फ़ाइलों को हटा दें
OLD = $ ($ BACKUPDIR -type d -mtime +30 खोजें)
अगर [-n "$ OLD"]; फिर
        पुरानी बैकअप फ़ाइलों को हटाने की गूंज: $ OLD
        गूंज $ OLD | xargs rm -rfv
फाई

आपके उत्तर के लिए बहुत बहुत धन्यवाद क्रेग! मैं सिर्फ ल्यूकआर जवाब उठाता हूं क्योंकि यह पहले था। स्क्रिप्ट के लिए धन्यवाद, यह एक अच्छा संदर्भ है।

क्या मुझे --routinesस्कीमा स्क्रिप्ट में जोड़ने का सुझाव देना चाहिए ?
जोनाथन

0

आप mysqlकमांडलाइन इंटरफ़ेस के माध्यम से मैन्युअल रूप से भी कर सकते हैं DESCRIBE <tablename>और परिणामों को कॉपी / पेस्ट कर सकते हैं।


DESCRIBE आपको कुछ ऐसा नहीं देगा जिसे आप कॉपी और पेस्ट कर सकें। शो टेबल कब बनेगा।
डेविड पैस्ले

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