मैं mysqldump के साथ बैकअप उद्देश्यों के लिए केवल एक MySQL उपयोगकर्ता कैसे बनाऊं?


14

मैं automysqlbackupअपने mysql डेटाबेस को डंप करने के लिए स्क्रिप्ट का उपयोग कर रहा हूं , लेकिन मैं चाहता हूं कि ऐसा करने के लिए केवल-पढ़ने वाला उपयोगकर्ता हो ताकि मैं अपने रूट डेटाबेस पासवर्ड को एक सादा फ़ाइल में संग्रहीत नहीं कर रहा हूं।

मैंने ऐसा उपयोगकर्ता बनाया है:

grant select, lock tables on *.* to 'username'@'localhost' identified by 'password';

जब मैं दौड़ता हूं mysqldump(या तो automysqlbackupसीधे या सीधे) मुझे निम्नलिखित चेतावनी मिलती है:

mysqldump: Got error: 1044: Access denied for user 'username'@'localhost' to database 'information_schema' when using LOCK TABLES

क्या मैं गलत कर रहा हूँ? क्या मुझे अपने रीडायनली उपयोगकर्ता के लिए अतिरिक्त अनुदान की आवश्यकता है? या केवल मेज पर rootताला लगा सकता है information_schema? क्या चल रहा है?

संपादित करें:

GAH और अब यह काम करता है। मैंने पहले FLUSH PRIVILEGES नहीं चलाया होगा।

एक तरफ के रूप में, यह कितनी बार स्वचालित रूप से होता है?

संपादित करें:

नहीं, यह काम नहीं करता है। mysqldump -u username -p --all-databases > dump.sqlमैन्युअल रूप से चलाने से कोई त्रुटि उत्पन्न नहीं होती है, लेकिन information_schema को डंप नहीं करता है। automysqlbackupएक त्रुटि उठाता है।


ओह ... के लिए मैन पेज से mysqldump: mysqldump INFORMATION_SCHEMA डेटाबेस को डंप नहीं करता है। यदि आप उस डेटाबेस को स्पष्ट रूप से कमांड लाइन पर नाम देते हैं, तो mysqldump चुपचाप इसे अनदेखा कर देता है जैसे या तो मैन पेज पुराना हो गया है (और यह एक चेतावनी बढ़ाता है), या automysqlbackupइसके लिए डंप पर कुछ अतिरिक्त जांच कर रहा है information_schema। निश्चित नहीं है कि यह कौन है, लेकिन यह उपयोगकर्ता अनुदान से संबंधित नहीं है।
स्टिकमंगुम्बी

1
यह एक मुद्दा नहीं है। आपको INFORMATION_SCHEMA का बैकअप लेने की आवश्यकता नहीं है (देखें: dev.mysql.com/doc/refman/5.0/en/information-schema.html )
स्माल क्लैन्जर

1
SmallClanger ने जो कहा, उसे जोड़ने के लिए, INFORMATION_SCHEMA एक वर्चुअल डेटाबेस है, जिसे हर बार MySQL के पुनरारंभ होने के बाद फिर से बनाया जाता है, इसलिए इसका समर्थन करने का कोई मतलब नहीं है क्योंकि आप इसे वैसे भी पुनर्स्थापित नहीं कर सकते हैं।
जॉन गार्डनियर्स 10

जवाबों:


4

उन अनुमतियों को होना चाहिए जो mysqldump के लिए आवश्यक हैं।

चूँकि आपने LOCK TABLES दिया है, और यह LOCK TABLES पर गलत है, ऐसा लगता है जैसे अनुमतियाँ असंगत हैं। क्या आपने चलाया है FLUSH PRIVILEGES?


1

उफ़ ... इसके लिए मैन पेज से mysqldump:

mysqldump does not dump the INFORMATION_SCHEMA database. If you name that database explicitly on the command line, mysqldump silently ignores it

ऐसा लगता है कि या तो मैन पेज पुराना है (और यह चेतावनी देता है), या automysqlbackupइसके लिए डंप पर कुछ अतिरिक्त जांच कर रहा है information_schema

निश्चित नहीं है कि यह कौन है, लेकिन यह उपयोगकर्ता अनुदान से संबंधित नहीं है।

संपादित करें

हां, यह automysqlbackupसंस्करण 2.5.1 (Ubuntu 10.04 के तहत MySQL 5.1.41 का उपयोग करते हुए) में एक बग है - information_schemaजब इसे नहीं करना चाहिए, तो यह बैकअप की कोशिश करता है ।

ठीक: जोड़े information_schemaके लिए करने के लिए DBEXCLUDEस्क्रिप्ट की लाइन 76 पर।


यह एक मुद्दा नहीं है। आपको INFORMATION_SCHEMA का बैकअप लेने की आवश्यकता नहीं है (देखें: dev.mysql.com/doc/refman/5.0/en/information-schema.html )
स्माल क्लैन्जर

SmallClanger ने जो कहा, उसे जोड़ने के लिए, INFORMATION_SCHEMA एक वर्चुअल डेटाबेस है, जिसे हर बार MySQL के पुनरारंभ होने के बाद फिर से बनाया जाता है, इसलिए इसका समर्थन करने का कोई मतलब नहीं है क्योंकि आप इसे वैसे भी पुनर्स्थापित नहीं कर सकते हैं।
जॉन गार्डनियर्स 10

0

उपयोगकर्ता बनाइये

GRANT USAGE ON *.* TO 'dump'@'localhost' IDENTIFIED BY 'plaintext-pass';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `my-db`.* TO 'dump'@'localhost';

विशेषाधिकारों की जाँच करें

mysql> SHOW GRANTS FOR dump@'localhost';
+-----------------------------------------------------------------------------------------------+
| Grants for dump@localhost                                                                     |
+-----------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dump'@'localhost'                                                      |
| GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `my-db`.* TO 'dump'@'localhost' |
+-----------------------------------------------------------------------------------------------+

फ़ाइल बनाने के लिए yor पसंदीदा संपादक का उपयोग ~/.my.cnfके साथchmod 400

[client]
user=dump
password=plaintext-pass

उदाहरण के लिए, डंप के लिए फ़ोल्डर बनाएँ

mkdir ~/db-dumps

जांच करें कि क्या यह काम करता है

mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/manual-my-db-dump-`date +%F`.sql.gz

वैकल्पिक रूप से आप डंप बना सकते हैं dailyऔर weeklyफिर dailyपुराने सभी को हटा सकते हैं

#m h  dom mon dow   command
0  3  *   *   0,2-6 /usr/bin/mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/daily-my-db-dump-`date +%F`.sql.gz;
0  3  *   *   1     /usr/bin/mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/weekly-my-db-dump-`date +%F`.sql.gz;
0  4  *   *   *     /usr/bin/find ~/db-dumps/ -name "daily-*" -type f -mtime +30 -exec rm -f {} \;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.