Obecnie mamy w repozytorium MySQL > 5.0, a dokumentacja na http://pl.docs.pld-linux.org/uslugi_bazydanych__mysql.html może trochę wprowadzać w błąd początkującego administratora baz danych, toteż popełniwszy pewne błędy, a potem je skorygowawszy, postanowiłem napisać pewne uzupełnienie…
Przede wszystkim, inna jest składnia w pliku konfiguracja klastrów. Klaster to instancja serwera baz danych, przypisana oddzielnemu procesowi i miejscu składowania. Inaczej to tłumacząc: Zespół baz danych, opisany wspólnym zestawem uprawnień, składa się z określonej ilości plików o różnym przeznaczeniu. Taki kompletny zestaw jest klastrem, a takich zestawów może być kilka, przechowywanych w różnych miejscach hierarchii dysków.
Opis dotyczy instalacji normalnie dostępnej poldkiem z dystrybucyjnego repozytorium, żadne bentle itp… Tak więc ”-n bentel” sobie darujemy :
# poldek -i mysql mysql-client mysql-libs
W pliku /etc/mysql/clusters.conf domyślnie po instalacji jest jeden klaster. Pierwotna składnia wyglądała tak :
MYSQL_DB_CLUSTERS="/var/lib/mysql"
Jest jednak ona już przestarzała (ang. obsoletes), o czym jest wzmianka w domyślnej (poinstalacyjnej) zawartości /etc/sysconfig/mysql i nie należy jej używać. Obecnie obowiązuje nowa forma deklaracji klastra, jedna na linię :
mysqld.conf=/var/lib/mysql
Oznacza to, że drzewo składowania danych danego klastra jest w katalogu /var/lib/mysql, a jego plik konfiguracyjny nazywa się mysqld.conf i też się w tym katalogu znajduje. Katalog ten jednak jest po instalacji pusty, nie ma tu mysqld.conf. Gotowa do wykorzystania wersja tego pliku jest za to w /usr/share/mysql, którą można skopiować we właściwe miejsce. Występuje w nim większość dostępnych opcji konfiguracyjnych, ale są wyłączone przez postawienie przed nimi znaku komentarza, w tym przypadku średnika. Oprócz tego dla każdego klastra należy ten fragment dostosować do bieżącej konfiguracji, zastępując „@clusterdir@” odpowiednią ścieżką dostępu do katalogu klastra :
[mysqld] datadir = @clusterdir@/mysqldb/db pid-file = @clusterdir@/mysqldb/mysql.pid socket = @clusterdir@/mysqldb/mysql.sock
Przy konfiguracji domyślnej będzie to wyglądało tak :
[mysqld] datadir = /var/lib/mysql/mysqldb/db pid-file = /var/lib/mysql/mysqldb/mysql.pid socket = /var/lib/mysql/mysqldb/mysql.sock user = mysql bind-address = localhost port = 3306 character-set-server = utf8 collation-server = utf8_general_ci ; set default charset default-character-set = utf8
Nie można zapomnieć o zastąpieniu wszystkich wystąpień „@clusterdir@” w tym pliku odpowiednią ścieżką dostępu do katalogu, aby było możliwe uruchomienie serwera mysql.
Spotkałem się z problemem przypisania serwera do więcej niż jednego adresu IP, najczęściej do localhost oraz interfejsu sieci lokalnej, z pominięciem interfejsu sieci zewnętrznej. W dokumentacji konfiguracji MySQL nic interesującego mnie znalazłem, więc jedynym rozwiązaniem jakie mi przyszło do głowy jest NAT :
iptables -t nat -A PREROUTING -p tcp --dport mysql -d NEW_IP -j DNAT --to-destination 127.0.0.1:3306
Nawiązując do różnych poradników dla początkujących, z którymi miałem do czynienia, krążących po sieci, w tej wersji bazy danych nie funkcjonuje „root”, lecz „mysql” jako główny użytkownik bazy. Jest to dość pomocne dla odróżnienia od systemowego konta superużytkownika.
Wynika to najprawdopodobniej z w/w wpisu do pliku konfiguracyjnego klastra mysqld.conf :
user = mysql
Nowsze wersja MySQL w wewnętrznej bazie uprawnień o nazwie mysql bardziej przejrzyste nazewnictwo, np. w tabeli user kolumna użytkowników nie nazywa się user, ale User. Większość nazw kolumn w tej tabeli zaczyna się z dużych liter.
Jeżeli np. zapragniemy pobawić się bazą danych MySQL >= 5 pod OpenOffice Base, zainstalowanym pod PLD, to pieczołowita budowa speca nic nam nie da…
[builder@buildhost ~]$ builder MyODBC.spec
Dlaczego ? Wersja (stabilna) zbudowanego MyODBC wynosi na dzień dzisiejszy 3.51, co jest chyba o dwa numerki za mało… Tak więc udajemy się na http://dev.mysql.com/downloads/connector/odbc/5.1.html i ciągamy „Linux (non RPM packages) downloads”. W tym miejscu pojawia się pytanie „Dlaczego nie rpm ?” Otóż moja propozycja polega na koegzystencji odbc-connector w wersjach 3.51 i 5.1 obok siebie, co daje nam możliwość równoległego łączenia się do starszych i nowszych wersji MySQL. Nie byłoby to możliwe bez drobnej kosmetyki w nazwach plików, więc sprawowanie opieki na zainstalowanymi plikami przez bazę rpm traci tutaj sens, chyba, że jakimś cudem znajdzie się dla poniższego opisu odpowiedni spec w naszym zasięgu. Pierwsze co należy zainstalować to unixODBC :
# poldek -i unixODBC unixODBC-qt
Ten drugi pakiet jest opcjonalny - będzie pomocny przy „klikalnej konfiguracji” ODBC pod XWindow. Nastepnie wypakowujemy (mc, krusader itp.) ze ściągniętego archiwum pliki do jakiegoś pustego katalogu (w przykładzie użyto /home/Local_Shares/Install/MySQL/connector-unp) następujące pliki : libmyodbc3S-5.1.2.so, libmyodbc3S.la, libmyodbc5-5.1.2.so, libmyodbc5.la. Tak nazywają się pliki w wersji 32-bit i tylko taką wersję testowano podczas tworzenia tego opisu. Następnie :
# cd /home/Local_Shares/Install/MySQL/connector-unp
# chown 0.0 libmyodbc*
# chmod 775 libmyodbc*
# for LIB3 in `ls libmyodbc3*`; do LIB5=`echo ${LIB3} | sed 's/odbc3/odbc5/'`; mv ${LIB3} ${LIB5}; done
No i mamy uporządkowane nazwy plików stosownie do ich głównej wersji… Pozostało jeszcze skopiować te pliki na miejsce w zwyczajowej hierarchi PLD i utworzyć stosowne linki
# cp libmyodbc5* /usr/lib # ln -s libmyodbc5-5.1.2.so /usr/lib/libmyodbc5.so # ln -s libmyodbc5S-5.1.2.so /usr/lib/libmyodbc5S.so
Zostaje jeszcze konfiguracja tego drivera danych ODBC… Robimy to przez modyfikację pliku /etc/odbcinst.ini, dorzucając linijki :
[MySQL5] Description = MySQL ODBC 5 driver Driver = /usr/lib/libmyodbc5.so Setup = /usr/lib/libmyodbc5S.so
Jak już wyżej napisano, można tego dokonać klikając, wystarczy uruchomić w konsoli pod X :
$ sudo ODBCConfig&
W zakładce „Drivers” mamy stosowny przycisk „Add”, który po naciśnięciu oferuje nam kilka opcji. Wystarczy uzupełnić :
Name : MySQL5 Description : MySQL ODBC 5 driver Driver : /usr/lib/libmyodbc5.so Setup : /usr/lib/libmyodbc5S.so
Naciskamy „✔”, co spowoduje zapis i cieszymy się nowym driverem do ODBC. Teraz jeśli jeszcze nie mamy już utworzonej bazy danych to ją tworzymy (domyślnie tworzy się baza z character_set_base=latin1, więc wymuszamy utf8):
(mysql@localhost) [(none)]> create database NaszaBaza character set utf8 collate utf8_general_ci; Query OK, 1 row affected (0.00 sec)
Kwestię ustawienia odpowiednich uprawnień dla nowo utworzonej bazy pozostawiam w gestii zapoznania się z dokumentacją MySQL (hint : grant).
Konfigurację systemowego DSN (Data Source Name) dokonujemy w /etc/odbc.ini :
[NaszaBazaODBC] Description = Super Tajna Baza Nasza Driver = MySQL5 Server = localhost Database = NaszaBaza Port = 3306
Oczywiście klikając możemy zrobić to samo w/w ODBCConfig-em w zakładce „System DSN”. Ponadto istnieje konfiguracji w przestrzeni użytkownika spod zakładki „User DSN” i tu już wystarczy uruchomienie tego programu z konta zwykłego użytkownika.
Życzę powodzenia,
Daniel (Light-I) Dawid Majewski