Archiwa tagu: mysql

mysql brak polskich znaków po imporcie

Zdarza się, że po imporcie bazy do mysqla nie ma poprawnych znaków. Problem może występować nie tylko w samej bazie lub w pliku z importem, ale także na połączeniu klient/serwer.

Konwertujemy plik baza.sql z utf8 do iso8859-2
iconv -f utf8 -t iso8859-2 baza2.sql

do pliku baza2.sql na początku dopisujemy SET NAMES utf8;

wykonujemy import:
mysql -uuser -phaslo baza

Teraz sprawdzamy czy w bazie jest poprawnie?
# locale
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"

W /etc/mysql/my.cnf w sekcji [mysql] ma być:
default-character-set=utf8
teraz z poziomu shella i polecenia mysql sprawdzamy SELECTem czy w jakiejś tabeli są prawidłowe polskie znaki. Jeśli tak, pozostaje sprawdzić czy przez php też są polskie litery. Jeśli nie ma to po mysql_connect a przed wydaniem komend na bazie dodajemy polecenie SET NAMES utf8; Czyli:
mysql_query("set names utf8" );

Mysql 5.5 instalacja ze źródeł

Nie ma dla Debiana gotowej paczki z mysql 5.5, dlatego trzeba sobie skompilować, jak dawniej. Pobieramy ze strony http://dev.mysql.com/downloads/mysql/ aktualne źródło (Select Platform -> Source code).
Do kompilacji będą potrzebne:
apt-get install make cmake bison g++
Rozpakowujemy źródła:
tar xzf mysql-5.5.16.tar.gz
cd mysql-5.5.16
cmake .
make
make install (zainstaluje do /usr/local/mysql)
lub make install DESTDIR=”/dowolny/katalog”
make install scripts
Dodajemy użytkownika i grupę:
groupadd mysql
useradd -r -g mysql mysql
Zmieniamy właściciela
chown -R mysql.mysql /usr/local/mysql
Tworzymy tabele z uprawnieniami skryptem:
scripts/mysql_install_db –user=mysql
Uruchamiamy bazę poprzez:
/usr/local/mysql/bin/mysqld_safe
Standardowo my.cnf będzie czytany z katalogu /etc/mysql/my.cnf
Jeśli chcemy aby był używany inny plik/katalog uruchamiamy mysqla tak:
/usr/local/mysql/bin/mysqld_safe –defaults-file=/etc/mysql/my_ok_22.cnf

Jak podzielić mysqldump -all na poszczególne bazy?

Komendą mysqldump z parametrem –all-databases można zrobić zrzut wszystkich baz na serwerze do jednego pliku. Powstaje zazwyczaj wielki plik, który ciężko przeglądać. Jak wyciągnąć z niego poszczególne bazy? Używając komendy csplit można zrobić to tak:

csplit –f "baza_" mysqlbackup0101.sql "/^CREATE DATABASE /" {*}

po wykonaniu takej komendy powstanie osobny plik baza_XX dla każdej bazy z pliku źródłowego.