====== 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.sockPrzy 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 = utf8Nie 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 [[pl:przewodniki:phpmyadmin-lighttpd|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.specDlaczego ? 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-qtTen 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}; doneNo 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 = 3306Oczywiś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