Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Jak przenieść bazy danych mariadb z polskimi znakami na nowy serwer.
Witam. Mam serwer z kilkoma stronami WWW korzystającymi z baz danych na mariaDB. Chcę je przenieść na nowa maszynę.
Zainstalowałem na nowej maszynie debiana z apache2, mariadb i php.
Przeniosłem pliki ze stroną oraz bazy danych lecz o ile polskie znaki na stronie pojawiają się poprawnie to dane z bazy danych po migracji wyświetlają krzaczki zamiast polskich znaków.
migrowałem w następujący sposób:
mysqldump -u root -phasloroota bazydanych > bazydanych.sql
A następnie na nowym serwerze wgrywałem bazę tak:
create database bazydanych DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; mysql -u root -phasloroota bazydanych < bazydanych.sql
Gdzie mogę popełniać błąd ?
Próbowałem też dodać mimo że w oryginalnych plikach tego nie było dodatkowy kod na stronie
$connect->query("SET NAMES 'utf8'");
Jakie polecenia wykonać aby zrobić backup a następnie odtworzyć na nowej maszynie bazy danych mariadb aby dane migrowały się i wyświetlały poprawnie polskie znaki ?
Ostatnio edytowany przez debiJan (2019-08-27 08:35:55)
Offline
Przecież Mariadb przy każdej bazie danych oznacza kodowanie danej bazy.
Nigdy z żadnym eksportem czy importem nie miałem problemu ani w Mysql ani w Mariadb.
Skąd i dokąd przenosisz te bazy, z hostingu na serwer dedykowany/vps, z hostingu na inny hosting, czy w jakiejś innej konfiguracji?
Zwłaszcza, ze obecnie wszystkie znane mi dystrybucje Linuxa czy BSD korzystają z UTF-8 i Mariadb po instalacji w nich też ma ustawione kodowanie na UTF-8.
Więc nie czaję dokładnie, jaki masz problem.
Debian 9, Mariadb:
mysql Ver 15.1 Distrib 10.1.38-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 Connection id: 751 Current database: Current user: root@localhost SSL: Cipher in use is DHE-RSA-AES256-SHA Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.1.38-MariaDB-0+deb9u1 Debian 9.8 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 2 days 14 hours 56 min 56 sec
Jak widać mariadb pilnuje kodowania klienta, kodowania serwera i kodowania połączenia.
I tak samo było jeszcze w Mysql-4 i Mariadb-5 chyba z 6 czy 7 lat temu.
Właściwie w ogóle nie musisz zakładać baz, jak zrzuciłem ostatnio z jednego serwera wszystkie bazy, i wgrałem je na nowy świeży serwer, (razem z bazą mysql), to działały też konta użytkowników i hasła do baz po magicznej komendzie:
flush privileges
żadne czary z kodowaniem nie były potrzebne.
Zrzut bazy na starym serwerze zrobiłem tak (z domu, zdalnie, nie na serwerze):
mysqldump --ssl -h $SERVER -u $DBUSER -p$DBPASS --single-transaction --all-databases |xz > $BACKUPDIR/mysqldb/all.sql.xz
a na nowym:
cat all.sql.xz | unxz | mysql -u root -p$HASEŁKO
i wszystko śmiga, chociaż to była migracja ze starego CentOSa na nowszego Debiana, czyli była pewna przestrzeń czasowa miedzy wersjami Mariadb.
Pozdro
Ostatnio edytowany przez Jacekalex (2019-08-27 08:58:01)
Offline
Hmm więc może to jakiś problem w konfiguracji apache na nowym serwerze. O czym powinienem tam pamiętać ?
Offline
kiedy natomiast próbuję zaimportować bazę bez jej wczesniejszego utworzenia poprostu wykonując polecnie
mysql -u root -phaslo bazydanych < bazydanych.sql
dostaję komunikat o błędzie
ERROR 1049 (42000): Unknown database 'bazydanych'
Offline
sprawdziłem na starym serwerze kodowanie znaków:
SHOW VARIABLES LIKE 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
a na nowym
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
Jak to przenieść ?
Ostatnio edytowany przez debiJan (2019-08-27 10:44:34)
Offline
morfik czy to Ty znowu?
Offline
No nie nie znam żadnego morfika.
Offline
Serwer Mysql z kodowaniem latin1?
Ten serwer jest chyba starszy od całego internetu?
już dobre 8 lat nie widziałem, żeby Mysql miał takie kodowanie.
Mariadb nigdy nie miał takiego kodowania w znanych mi dystrybucjach Linuxa,
a używam go od wersji 5.2, czyli jednej z pierwszych wersji pod nazwą Mariadb.
Co się tyczy konwertowania, to bazie wsio rawno, byle strony przeżyły, tu masz dokumentację Wordpressa:
https://codex.wordpress.org/Converting_Database_Character_Sets
Czyli coś w typie:
mysqldump -u root -p --opt --quote-names --skip-set-charset --default-character-set=latin1 wordpress > wordpress.sql
mysql -u root -p --default-character-set=utf8 wordpress < wordpress.sql
Tylko przeczytaj całego powyższego arta najpierw.
EDIT:
Tu masz jakiś kawałek bardzo starego wiki Gentoo na temat konwersji Mysql:
http://wikigentoo.ksiezyc.pl/TIP_Convert_latin1_to_UTF-8_in_MySQL.htm
Ewentualnie zobacz w konfiguracji Mariadb, czy można ją przestawić na latin1, czyli de facto cofnąć w rozwoju o 10 lat.
PS:
...
dostaję komunikat o błędzieKod:
ERROR 1049 (42000): Unknown database 'bazydanych'
Jeżeli nie kopiujesz bazy mysql. w której są dane baz i konta użytkowników, to naturalne, że bazy nie ma.
Wtedy musisz ją zakładać od zera.
Ostatnio edytowany przez Jacekalex (2019-08-27 11:28:45)
Offline
loms napisał(-a):
morfik czy to Ty znowu?
Jedynym z niewielu, którzy zadaja pytania dupy jesteś ty ;)
Morfik pisze artykuły o takich rzeczach xD
Offline
Wydaje mi się, że jest to nowe konto (jedno z co najmniej kilkudziesięciu) morfika. Morfik jest specjalistą i nie może o nic pytać z swojego konta.
Offline
@loms: o bana się starasz?
Tylko zaśmiecasz forum.
Offline
Dawno nie wchodziłem tutaj a widzę że nadal jestem podejrzewany o to że jestem morfikiem. Nie jestem . Jeśli morfik to czyta to czy mógł by oficjalnie sie wypowiedzieć bo nie wiem jak to miał bym udowodnić.
A skoro morfik pisze artykuł na ten temat to mógł by mi ktoś podlinkować go tutaj. Chętnie się zapoznam.
Offline
A tak w ogle moim rozwiązaniem było:
1. Zrobic dump bazy
mysqldump -u root -p******* --opt --quote-names --skip-set-charset --default-character-set=latin1 nazwabazy> nazwabazy.sql
2. Konwersja znaków
iconv -f ISO-8859-2 -t UTF-8 nazwabazy.sql > nazwabazy.sql
perl -pi -w -e 's/CHARSET=latin1/CHARSET=utf8/g;' nazwabazy.sql
3 Import bazy
mysql -u root -p******** --default-character-set=utf8 nazwabazy < nazwabazy.sql
Po tych operacja wszystko działa jak chciałem.
Pozdrawiam.
Offline
Strony: 1