這讓我有點瘋狂:我在一臺服務器上執行了分區表的mysqldump,將生成的SQL轉儲移至另一臺服務器,並嘗試運行插入。它失敗了,但我很難弄清楚爲什麼。谷歌和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)) */;
的錯誤是:
ERROR 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-rc-log。目標服務器是5.1.29-rc-community。兩者都在最近的CentOS安裝中運行。
編輯:多一點研究表明Errcode 13實際上是一個權限錯誤。但是我怎麼能在rwxrwxrwx
上得到?
編輯:比爾卡爾文的出色建議沒有出來。我以root用戶身份工作,並設置了所有權限標誌。
編輯:創建表,而對於個別分區指定數據目錄的作品 - 但我需要把這些分區不是在此MySQL實例在默認情況下把表的一個更大的磁盤上。我不能在表級別指定DATA/INDEX DIRECTORY - 這在我使用的MySQL版本(5.1.29-rc-community)中不合法。
編輯:最後遇到了答案,這要歸功於MySQL郵件列表和內部IT人員。見下文。
確定路徑正確嗎? – 2008-12-01 22:26:56
是的。我已經不止一次地檢查過。 – bradheintz 2008-12-01 22:50:59