====== 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