यहाँ पर विचार करना कुछ दिलचस्प है: 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;