Oswajanie MySQL 5

Refleksje początkowe

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…

Uzupełnienie do dokumentacji

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.

Instalacja

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

Konfiguracja

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. Na koniec przed uruchomieniem usługi mysql trzeba bazę zainicjować:

# service mysql init
Initializing cluster /var/lib/mysql..........................................................................................
Installing MySQL system tables for /var/lib/mysql/mysqldb/db.................................................................

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
This is done, after starting database, in the order shown,
with:

For 'mysql_sysadmin' (RELOAD and SHUTDOWN privileges):
echo "update mysql.user set password=password('newpassword') where user='mysql_sysadmin'; FLUSH PRIVILEGES;" | mysql -u mysql

For 'mysql' user (ALL privileges, DB admin):
echo "update mysql.user set password=password('newpassword') where user='mysql'; FLUSH PRIVILEGES;" | mysql -u mysql -S /var/

NOTE: mysql_sysadmin password should be placed to /var/lib/mysql/mysqld.conf in
mysqladmin section. See the manual for more instructions.
(This user is used at logs rotation and server shutdown)

Filling help tables..........................................................................................................

Teraz ustawimy hasełka według tego co nam właśnie wyświetliło:

$ mysql
mysql> update mysql.user set password=password('FajneHasl0') where user='mysql'; FLUSH PRIVILEGES;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

Query OK, 0 rows affected (0.00 sec)

ITD…

Pozostałe operacje można wykonać też z klienta mysql lub z phpMyadmin (np. w konfiguracji z lighttpd)

MySQL na różnych interfejsach

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

Uzupełnienie starszych poradników

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.

ODBC

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

pl/przewodniki/oswajanie-mysql-5.txt · ostatnio zmienione: 2010/10/26 13:42 przez light-i
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0 Powered by Lighttpd - fly light