2009-03-02 13 views
10

मैंने अपने वेबसर्वर पर फ्रीबीएसडी चलाने पर बैकअप क्रॉन नौकरी करने का प्रयास किया है। वर्तमान में यह इस तरह दिखता है:सुरक्षित MySQL बैकअप क्रॉन जॉब - my.cnf को पढ़ा नहीं जा रहा है

/usr/local/bin/mysqldump --opt --single-transaction --comments --dump-date --no-autocommit --all-databases --result-file=/var/backups/mysql/all.sql

यह ठीक काम करता है जब मैं (रूट के रूप में इसे चलाने के बाद से जड़ उपयोगकर्ता नाम और पासवर्ड जोड़ने के लिए इस्तेमाल के साथ एक .my.cnf है, लेकिन जब काम चलाया जाता है क्रॉन द्वारा, my.cnf फ़ाइल आदेश में ही उपयोगकर्ता नाम और पासवर्ड डालने के लिए (के बाद से है कि थोड़े असुरक्षित है) बिना कि चारों ओर किसी भी तरह से नहीं पढ़ा है।

वहाँ है?

आश्चर्यजनक रूप से, मेरे पास PostgreSQL और .pgpass फ़ाइल के साथ एक ही सेटअप है, और यह एक आकर्षण की तरह काम करता है।

उत्तर

16

उपयोग जहां .my.cnf फ़ाइल खोजने के लिए यह बताने के लिए --defaults-extra-file विकल्प (यह मानते हुए यह द्वारा जो भी उपयोगकर्ता mysqldump चल रहा है पठनीय है

+0

* श्वास * आसान;) * अपवोट * – Node

+0

आह, हाँ। मुझसे यह चूक कैसे हुई। मैं बस उस रात की नौकरी में रहूँगा। संदेश प्राप्त करने के लिए तत्पर हूं कि जब मैं सो रहा हूं :) – mikl

+0

वास्तव में, यह MySQL ऑनलाइन दस्तावेज़ों में ढूंढना इतना आसान नहीं था। व्यक्तिगत कार्यक्रमों में से कोई भी उनके मैनपेज में विकल्प का उल्लेख नहीं करता है। – Alnitak

2

अजीब वास्तव में क्रॉन को .my.cnf पढ़ना चाहिए। आप/etc/crontab या crontab -e में cronjob कैसे चलाते हैं? आप AutoMySQLBackup का उपयोग करने का प्रयास कर सकते हैं जो mysqldump का उपयोग कर एक छोटी खोल स्क्रिप्ट है।

+0

अच्छा, वास्तव में यह सीधे क्रॉन से नहीं चलाया जाता है, लेकिन फ्रीबीएसडी 'आवधिक' प्रणाली द्वारा। यह वास्तव में/usr/local/etc/periodic/daily आवधिक क्रॉन नौकरियां इस तरह की होती हैं: > '1 3 * * * रूट आवधिक दैनिक ' – mikl

+0

ओह, मार्कडाउन टिप्पणियों में सक्षम नहीं है। आशा है कि इसके सुस्पष्ट वैसे भी :) – mikl

0

FreeBSD पर आप जोड़ सकते हैं निम्नलिखित:।

security.bsd.see_other_uids=0 

करने के लिए/आदि /sysctl.conf और रिबूट, या

sysctl security.bsd.see_other_uids=0 

का उपयोग sysctl मूल्य निर्धारित करने के लिए।

+०१२३५१६४१०६१

अब रूट के अलावा अन्य उपयोगकर्ता केवल अपनी प्रक्रियाओं को देखने में सक्षम हैं। तो कमांड लाइन में पासवर्ड डालना कम जोखिम भरा है।

इसके अलावा, crontab कैसे चल रहे हैं? क्या आपने इसे crontab -e -u रूट का उपयोग कर रूट उपयोगकर्ताओं क्रॉन्टाब में जोड़ा था, या आपने इसे/etc/crontab में जोड़ा था?

सत्यापित करें कि सही अनुमतियां .my.cnf पर सेट की गई हैं और साथ ही साथ पर्यावरण चर को क्रॉन्टाब द्वारा सेट किया गया है क्योंकि इससे आपकी होम निर्देशिका की तुलना में एक अलग स्थान पर दिखने का कारण हो सकता है (जो फ्रीबीएसडी पर रूट के लिए है/रूट)।

2

मैं बस इसमें भी भाग गया।

ऐसा प्रतीत होता है कि '$ HOME/.my.cnf' जैसी चीज़ों के बजाय MySQL को '~/.my.cnf' देखने के लिए हार्डकोड किया गया है।

FreeBSD पर, से कहा जाता cronjobs/etc/crontab टिल्ड '~' चरित्र पर ध्यान नहीं देगा, और इसलिए ~/.my.cnf

वास्तव में की तरह एक मूल्य पर ध्यान नहीं देगा, तो निम्न के लिए काम नहीं करता है मुझे बिल्कुल भी:

mysql --defaults-अतिरिक्त फ़ाइल = ~/.my.cnf

हालांकि, एक $ HOME चर का उपयोग कर कार्य करता है:

गृह =/घर/व्यवस्थापक mysql - -defaults-अतिरिक्त फ़ाइल = $ घर/.my।सीएनएफ

एक विकल्प के रूप में, यदि मैं इसे/etc/crontab से/var/cron/tabs/root (रूट के रूप में 'crontab -e' का उपयोग करके) में चलाता हूं तो मेरा cronjob काम करेगा।

संबंधित मुद्दे