क्या मुझे 'mysql' डेटाबेस का बैकअप लेना चाहिए और उसे पुनर्स्थापित करना चाहिए?


15

पूरे MySQL सर्वर का बैकअप लेने और पुनर्स्थापित करने के लिए एक स्वचालित समाधान बनाने की प्रक्रिया में , मैं उस mysqlडेटाबेस में आया हूं जिसमें उपयोगकर्ता खाते, अनुमतियां, मेटाडेटा, उस तरह की चीज़ शामिल है। क्या इस डेटाबेस का बैकअप लिया जाना चाहिए? क्या समर्थन करने और इसे बहाल करने का प्रयास चीजों को तोड़ देगा?

जैसा कि आप कल्पना कर सकते हैं कि "mysql backing mysql डेटाबेस" के लिए Googling का एक समय है।


3
एक पूर्ण पुनर्स्थापना करने के लिए आपको "info_schema" डेटाबेस को छोड़कर सब कुछ बैकअप की आवश्यकता होती है।
जॉन गार्डनियर्स

जवाबों:


16

यहाँ पर विचार करना कुछ दिलचस्प है: mysqlडेटाबेस का बैकअप लेना आपको इस सीमा तक सीमित कर देता है कि आप केवल इस तरह के डेटाबेस को mysql के उसी संस्करण में पुनर्स्थापित कर सकते हैं जिससे आपने बैकअप चलाया था। यहाँ क्यों है:

यहाँ MySQL 5.0.45 से mysql.user है

mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     |         |       |
| x509_issuer           | blob                              | NO   |     |         |       |
| x509_subject          | blob                              | NO   |     |         |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
37 rows in set (0.01 sec)

यहाँ MySQL 5.1.32 से mysql.user है

mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     | NULL    |       |
| x509_issuer           | blob                              | NO   |     | NULL    |       |
| x509_subject          | blob                              | NO   |     | NULL    |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)

यहाँ MySQL 5.5.12 से mysql.user है

mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
| Password               | char(41)                          | NO   |     |         |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N       |       |
| File_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N       |       |
| References_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher             | blob                              | NO   |     | NULL    |       |
| x509_issuer            | blob                              | NO   |     | NULL    |       |
| x509_subject           | blob                              | NO   |     | NULL    |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0       |       |
| plugin                 | char(64)                          | YES  |     |         |       |
| authentication_string  | text                              | YES  |     | NULL    |       |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.01 sec)

यदि आप mysql.user को MySQL के एक संस्करण में पुनर्स्थापित करने का प्रयास करते हैं, तो इसका कोई मतलब नहीं था, यह यादृच्छिक अनुमति समस्याओं का उत्पादन करेगा। संस्करण-अज्ञेय तरीके से mysql उपयोगकर्ता अनुमतियों का बैकअप लेने का तरीका SQL में उपयोगकर्ता अनुदान को डंप करना है। इस तरह, उपयोगकर्ता अनुदान पूरी तरह से पोर्टेबल हैं। इसे पूरा करने के दो तरीके हैं:

विकल्प # 1: MAATKIT का उपयोग करना

mk-show-grants जो भी mysql इंस्टेंस आप से कनेक्ट करने के लिए आवश्यक SQL उत्पन्न करेगा। (ध्यान रखें कि MAATKIT को पेरकोना टूलकिट में माइग्रेट किया जा रहा है। इस टूल को संभवतः pt-show-grants कहा जाएगा)।

विकल्प # 2: एसक्यूएल GRANTS का डंपिंग स्क्रिप्ट

मैंने एमके-शो-ग्रांट का अपना अनुकरण लिखा है। यह गुमनाम उपयोगकर्ताओं को छोड़ देगा। यह इस तरह दिख रहा है:

mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

इन विकल्पों में से किसी एक का उपयोग करने से उपयोगकर्ता अनुदान का अधिक स्थिर बैकअप बन जाएगा।

एक अलग नोट पर

अब यदि आप इस लॉग-आउटपुट विकल्प का उपयोग कर रहे हैं

[mysqld]
log-output=TABLE

mysql डेटाबेस एक पाठ फ़ाइल के बजाय mysql स्कीमा में mysql तालिका के रूप में धीमी लॉग (यदि सक्षम) को पॉप्युलेट करेगा। इसलिए, भौतिक बैकअप करने में इस तरह के mysql टेबल-आधारित लॉग शामिल होंगे। मेरा विश्वास करो, यह डिस्कस्पेस के लायक नहीं है यदि सामान्य लॉग और धीमी क्वेरी लॉग सक्षम है और mysql स्कीमा में जमा है। बस MySQL अनुदान डंप विकल्प के साथ रहना।

UPDATE 2011-09-19 15:54 EDT

SQL अनुदान के माध्यम से MySQL अनुमतियों का बैकअप बनाए रखने में एक बहुत महत्वपूर्ण कारक है:

प्रत्येक उपयोगकर्ता कुछ संशोधित एमडी 5 प्रारूप में अपने पासवर्ड के साथ सामने आता है। Mysql 4.0 और बैक के लिए, यह 16-कैरेक्टर हेक्साडेसिमल स्ट्रिंग है। Mysql 4.1+ के लिए, यह 41 अक्षर है (एक तारांकन उसके बाद 40-वर्ण हेक्साडेसिमल स्ट्रिंग)।

SQL अनुदान डंप को पुनर्स्थापित करने से पहले, किसी भी 16-वर्ण हेक्साडेसिमल पासवर्ड के लिए SQL अनुदान डंप फ़ाइल की जाँच करें। यदि आप एक भी देखते हैं, तो आपको mysql सर्वर पर /etc/my.cnf (या Windows के लिए my.ini) में निम्नलिखित जोड़ना होगा:

[mysqld]
old_password=1

Old_password निर्देश एक साथ होना करने के लिए और सही ढंग से एक ही चल रहा है mysql उदाहरण में प्रमाणित 16-चार और 41-चार पासवर्ड अनुमति देता है। आगे चलकर बनाया गया कोई भी पासवर्ड 16 अक्षर का होगा।

MySQL पुनरारंभ की आवश्यकता नहीं है। बस इसे चलाएं:

SET GLOBAL old_password = 1;

एक पूर्ण उत्तर के लिए +1।
मिरकेया वुटकोविसी

1
मैं इस तरह SHOW GRANTSका उपयोग करते हुए पीढ़ी एसक्यूएल को बेहतर QUOTE()SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';') FROM mysql.user WHERE user<>'';
बनाऊंगा

11

हां, आप निश्चित रूप से mysqlडेटाबेस का बैकअप लेना चाहते हैं - यह आपकी सेवा का एक अभिन्न अंग है। जब आप इसे अन्य जानकारी से फिर से संगठित कर सकते हैं, तो ऐसा करने की कठिनाई निषेधात्मक है यदि आप जल्दी से सेवा में वापस आने की कोशिश कर रहे हैं।


1
+1 यदि आप mysql डेटाबेस का बैकअप नहीं लेते हैं तो एक पुनर्स्थापना करने के बाद एक टूटी हुई प्रणाली होने की संभावना बहुत अधिक है। वहाँ किया गया था, यह साबित करने के लिए मानसिक निशान मिला।
जॉन गार्डनियर्स

6

आप संस्करणों के बीच mysql डेटाबेस को पुनर्स्थापित कर सकते हैं, कम से कम हाल ही के संस्करणों को। mysql_upgradeMySQL के नए संस्करणों में शामिल एक उपकरण है जो आपके लिए सिस्टम तालिकाओं को अपग्रेड करेगा।

http://dev.mysql.com/doc/refman/5.0/en/mysql-upgrade.html


यह एकदम सच है। मैंने ऐसे मामले देखे हैं जहां कुछ इसका उपयोग करते हैं और पूरी तरह से अपग्रेड करते हैं। मैंने दूसरों को कसाई बनते देखा है। MySQL DBA के रूप में मेरे दृष्टिकोण से। मैंने उस पद्धति में विश्वास खो दिया है। चूंकि आपका जवाब इसके उपयोग में ध्वनि विश्वास को दर्शाता है, इसलिए आपको पहले समूह से होना चाहिए। Mysql_upgrad में इस तरह के आत्मविश्वास के लिए +1।
रोलैंडमाइसीडीडीबीए

जब मैंने अपने 5.6 को 8.0 संस्करण में आयात किया, तो इसने सर्वर को बोर कर दिया।
PHPst

5

जब तक आप एक समान mysql संस्करण को पुनर्स्थापित करते हैं, तब तक आप बैकअप से mysql डेटाबेस को पुनर्स्थापित कर सकते हैं। यदि आप संदेह में हैं, तो बस mysql डेटाबेस स्कीमा (बैकअप से एक और नए mysql सर्वर से एक) के बीच अंतर करें।


+1 का उल्लेख करने के लिए पहले mysql को पुनर्स्थापित करने के लिए उसी संस्करण में जिसका आपने बैकअप लिया था।
रोलैंडमाइसीडीडीबीए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.