2008-12-01 15 views
7

होना चाहिए यह मुझे पागल बना रहा है: मैंने एक सर्वर पर विभाजित तालिका का एक mysqldump किया था, परिणामी SQL डंप को किसी अन्य सर्वर पर ले जाया गया था, और सम्मिलित करने का प्रयास किया था। यह विफल रहता है, लेकिन मुझे यह पता लगाने में कठिनाई हो रही है कि क्यों। Google और MySQL फ़ोरम और दस्तावेज़ बहुत मदद नहीं कर रहे हैं।MySQL अनुमतियाँ समस्या - गैर-समस्या

नाकाम रहने क्वेरी इस तरह दिखता है (संक्षिप्तता और स्पष्टता के लिए छोटा कर दिया, नाम मासूम की रक्षा करने के लिए बदल):

CREATE TABLE `my_precious_table` (
`id` bigint(20) NOT NULL AUTO_INCREMENT, 
`somedata` varchar(20) NOT NULL, 
`aTimeStamp` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
PRIMARY KEY (`id`,`aTimeStamp`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/opt/data/data2/data_foo/' INDEX DIRECTORY='/opt/data/data2/idx_foo/' 
/*!50100 PARTITION BY RANGE (year(aTimeStamp)) SUBPARTITION BY HASH (TO_DAYS(aTimeStamp)) 
(PARTITION p0 VALUES LESS THAN (2007) (SUBPARTITION foo0 DATA DIRECTORY = '/opt/data/data2/data_foo' INDEX DIRECTORY = '/opt/data/data2/idx_foo' ENGINE = MyISAM), 
PARTITION p1 VALUES LESS THAN (2008) (SUBPARTITION foo1 DATA DIRECTORY = '/opt/data/data2/data_foo' INDEX DIRECTORY = '/opt/data/data2/idx_foo' ENGINE = MyISAM), 
PARTITION p2 VALUES LESS THAN (2009) (SUBPARTITION foo2 DATA DIRECTORY = '/opt/data/data2/data_foo' INDEX DIRECTORY = '/opt/data/data2/idx_foo' ENGINE = MyISAM), 
PARTITION p3 VALUES LESS THAN MAXVALUE (SUBPARTITION foo3 DATA DIRECTORY = '/opt/data/data2/data_foo' INDEX DIRECTORY = '/opt/data/data2/idx_foo' ENGINE = MyISAM)) */; 

त्रुटि है:

त्रुटि 1 (HY000): कर सकते हैं ' टी '/opt/data/data2/idx_foo/my_precious_table#P#p0#SP#foo0.MYI' (Errcode: 13) दायर करने के लिए बनाने के/लिखने

"/ फ़ाइल पर लिखने की नहीं बना सकता" देखा एक अनुमति मुद्दे की तरह मेरे लिए, लेकिन लक्षित फ़ोल्डरों पर अनुमतियाँ इस प्रकार देखो:

drwxrwxrwx 2 mysql mysql 4096 Dec 1 16:24 data_foo 
drwxrwxrwx 2 mysql mysql 4096 Dec 1 16:25 idx_foo 

किक के लिए, मैं जड़ तक chowning की कोशिश की है: जड़ और अपने आप को। इसने इस मुद्दे को ठीक नहीं किया।

स्रोत MySQL सर्वर संस्करण 5.1.22-आरसी-लॉग है। गंतव्य सर्वर 5.1.2 9-आरसी-समुदाय है। दोनों हाल ही में CentOS प्रतिष्ठानों पर चल रहे हैं।

संपादित करें: थोड़ा और शोध दिखाता है कि वास्तव में, त्रुटि त्रुटि त्रुटि है। लेकिन मैं इसे rwxrwxrwx पर कैसे प्राप्त कर सकता हूं?

संपादित करें: बिल करविन का उत्कृष्ट सुझाव नहीं निकला। मैं रूट उपयोगकर्ता के रूप में काम कर रहा हूं, और सभी विशेषाधिकार झंडे सेट हैं।

संपादित करें: अलग-अलग विभाजन कार्यों के लिए डेटा निर्देशिका निर्दिष्ट किए बिना तालिका बनाना - लेकिन मुझे इन विभाजनों को एक बड़ी डिस्क पर रखना होगा जिस पर यह MySQL उदाहरण डिफ़ॉल्ट रूप से तालिकाओं को रखता है। और मैं केवल टेबल स्तर पर डेटा/इंडेक्स डायरेक्ट्री निर्दिष्ट नहीं कर सकता - यह MySQL के संस्करण में वैध नहीं है जिसका उपयोग मैं कर रहा हूं (5.1.2 9-आरसी-समुदाय)।

संपादित करें: अंत में उत्तर में आया, MySQL मेलिंग सूची और आंतरिक आईटी कर्मचारियों के लिए धन्यवाद। निचे देखो।

+1

क्या आप सुनिश्चित हैं कि पथ सही है? –

+0

हां। मैंने इसे एक से अधिक बार जांच लिया है। – bradheintz

उत्तर

2

यह एक सेलिनिन मुद्दा बन गया - मेरी सभी फाइल सिस्टम अनुमतियां ठीक थीं, लेकिन डिस्क विभाजन को एक्सेस करने वाले MySQL के खिलाफ उच्च-स्तरीय नीति सेट थी।

सबक: जब आपके पास अनुमति समस्या होती है लेकिन स्वामित्व और फाइल सिस्टम अनुमतियां स्पष्ट रूप से सही होती हैं, तो सेलिनक्स को देखें।

+1

मैं इस राय में तेजी से आ रहा हूं कि किसी भी लिनक्स सिस्टम पर पहली चीज़ को 'सेटनफोर्स 0'' करना चाहिए। –

3

http://bugs.mysql.com/bug.php?id=19557

तुम भी MySQL उपयोगकर्ता क्वेरी चल आईडी एक त्रुटि संदेश प्राप्त नहीं है "डेटा फ़ाइल" विशेषाधिकार कि यूजर आईडी फ़ाइल सिस्टम में लिखने की अनुमति देता होगा।

दूसरे शब्दों में, यह एसक्यूएल विशेषाधिकारों के संबंध में एक अनुमति समस्या हो सकती है, ऑपरेटिंग सिस्टम फ़ाइल अनुमतियां नहीं।

+0

धन्यवाद। मैं रूट के रूप में चल रहा हूं, और USER तालिका की त्वरित जांच से पता चलता है कि मेरे पास सभी विशेषाधिकार हैं (File_priv सहित) सत्य सेट है। साथ ही, FILE विशेषाधिकार (वहां डेटा फ़ाइल नहीं कहा जाता है) आपको लोड डेटा इन्फाइल का उपयोग करने और चयन करने देता है ... आउटपुट स्टेटमेंट्स में - तालिका निर्माण से अलग समस्या। – bradheintz

+0

5.1 दस्तावेज़ों से: http://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html – bradheintz

+0

ओके डोकी, उस संभावना को रद्द करना अच्छा है। लेकिन मुझे यकीन नहीं है कि और क्या सुझाव देना है। –

4

पर उबंटू mysql

vi /etc/apparmor.d/usr.sbin.mysql 

यह अनुमति मुद्दों को हल करना चाहिए के लिए एपआर्मर सेटिंग्स में देखो। एक त्वरित परीक्षण के लिए आप

/etc/init.d/apparmor stop 

पर भी प्रयास कर सकते हैं लेकिन सेवा को पुनरारंभ करने के लिए मत भूलना।

मुझे यह पता लगाने में कुछ समय लगा। और "SELinux" पढ़ने के बाद यह स्पष्ट था कि मैं उबंटू पर इस तरह की नई सुरक्षा भूल गया हूं।

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