To powoduje, że jestem szalony: Zrobiłem mysqldump tabeli partycjonowanej na jednym serwerze, przeniosłem wynikowy zrzut SQL na inny serwer i próbowałem uruchomić insert. Zawodzi, ale mam problem z ustaleniem, dlaczego. Google i fora i dokumenty MySQL nie były pomocne.Problem z licencjami MySQL - nie powinien być problemem.
upadającego kwerendy wygląda następująco (obcięty na zwięzłość i przejrzystość, nazwy zmienione w celu ochrony niewinnych):
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)) */;
Błąd jest:
BŁĄD 1 (HY000): Czy” t tworzyć/zapis do pliku '/opt/data/data2/idx_foo/my_precious_table#P#p0#SP#foo0.MYI' (Errcode: 13)
"nie można utworzyć/zapisu do pliku" wyglądał jak problem z uprawnieniami do mnie, ale uprawnienia do folderów docelowych wyglądać tak:
drwxrwxrwx 2 mysql mysql 4096 Dec 1 16:24 data_foo
drwxrwxrwx 2 mysql mysql 4096 Dec 1 16:25 idx_foo
dla zabawy, próbowałem Chowning root: root i siebie. To nie rozwiązało problemu.
Źródłowy serwer MySQL to wersja 5.1.22-rc-log. Serwer docelowy to społeczność 5.1.29-rc. Oba działają na ostatnich instalacjach CentOS.
Edytuj: Trochę więcej badań pokazuje, że Errcode 13 jest w rzeczywistości błędem uprawnień. Ale jak mogę to uzyskać na rwxrwxrwx
?
Edytuj: Doskonała sugestia Billa Karwina nie zniknęła. Pracuję jako użytkownik root i mam ustawione wszystkie flagi uprawnień.
Edit: tworzenia tabeli bez określania katalogów danych dla poszczególnych partycji działa - ale muszę umieścić te partycje na dysku większego niż ten, na którym ta instancja MySQL stawia tabele domyślnie. I nie mogę po prostu podać DATA/INDEX DIRECTORY na poziomie tabeli - to nie jest legalne w wersji MySQL, której używam (5.1.29-rc-community).
Edytuj: Wreszcie udało się znaleźć odpowiedź, dzięki liście mailingowej MySQL i wewnętrznemu personelowi IT. Zobacz poniżej.
Czy na pewno ścieżka jest poprawna? –
Tak. Sprawdziłem to więcej niż jeden raz. – bradheintz