Migracja z MariaDB 5 na MariaDB 10

ODPOWIEDZ
Fixer
Trochę Wie
Posty: 112
Rejestracja: pn mar 13, 2017 10:46 am

Migracja z MariaDB 5 na MariaDB 10

Post autor: Fixer »

Wklejam garść przydatnych mi informacji znalezionych w Internecie zebranych podczas przesiadki - dla potomnych.

1. Jaka jest różnica pomiędzy MariaDB 5 a nową wersją MariaDB 10?
https://mariadb.com/resources/blog/mari ... son-update



2. Czy obie bazy mogą na synku pracować równolegle?
tak, różnica polega tylko na portach
MariaDB 5 jest na porcie 3306 (/etc/mysql/my.cnf)
MariaDB 10 jest na porcie 3307 (/volume1/@appstore/MariaDB10/usr/local/mariadb10/etc/mysql/my.cnf) a tutaj wstawiamy nasz zmieniony my.cnf: "/var/packages/MariaDB10/etc"

Odnośnie samych plików konfiguracyjnych *.cnf więcej tutaj: https://mariadb.com/kb/en/library/confi ... ith-mycnf/



3. Czy phpMyAdmin współpracuje z obiema bazami równolegle?
tak, przy logowaniu się masz możliwość wyboru MariaDB 5/10 do której chcesz się aktualnie zalogować



4. Jak wykonać prawidłowo zrzut danych ze starej bazy?
ściągamy "mariadb-10.0.32-winx64.zip"
z: https://downloads.mariadb.org/mariadb/10.0.32/
teraz wypakuj całość do: C:\mariadb-10.0.32-winx64

opcja CLI: mysqldump (dane+schemat)

Kod: Zaznacz cały

"C:\mariadb-10.0.32-winx64\bin\mysqldump.exe" --host="localhost" --port="3306" --user="" --password="" --all-databases --default-character-set=utf8 --protocol=tcp --flush-privileges=false --skip-opt --add-drop-database --add-drop-table --add-locks=false --single-transaction=false --flush-privileges=false --flush-logs=false --no-create-info=false --complete-insert=false --extended-insert=false --hex-blob --comments --triggers --routines --events --force=true --verbose --debug-info --result-file=backup_mariadb5.sql
opcja CLI: mysqldump (export schematu)

Kod: Zaznacz cały

"C:\mariadb-10.0.32-winx64\bin\mysqldump.exe" -u UZYTKOWNIK -pHASLO --host=ADRES-IP --no-data --port=3306 --default-character-set=utf8 "NAZWA-BAZY-DANYCH" --result-file=zrzut_schemat.sql

opcja CLI: mysqldump (export danych)

Kod: Zaznacz cały

"C:\mariadb-10.0.32-winx64\bin\mysqldump.exe" --host="ADRES-IP" --port="3306" --user="UZYTKOWNIK" --password="HASLO" --databases "NAZWA-BAZY-DANYCH" --default-character-set=utf8 --protocol=tcp --flush-privileges=false --skip-opt --add-locks=false --single-transaction=false --flush-privileges=false --flush-logs=false --no-create-info=true --complete-insert=false --extended-insert=false --hex-blob --comments --triggers --routines --events --force=true --verbose --debug-info --result-file=zrzut_dane.sql
dodatkowo należy wyeksportować jeszcze użytkowników i ich uprawnienia:

Kod: Zaznacz cały

"C:\mariadb-10.0.32-winx64\bin\mysql.exe" -u<user> -p<password> -h<host> -N mysql -e "select concat(\"'\", user, \"'@'\", host, \"'\"), authentication_string from user where not user like 'mysql.%'" | while read usr pw ; do echo "GRANT USAGE ON *.* TO $usr IDENTIFIED BY PASSWORD '$pw';" ; mysql -u<user> -p<password> -h<host> -N -e "SHOW GRANTS FOR $usr" | grep -v 'GRANT USAGE' | sed 's/\(\S\)$/\1;/' ; done
lub inaczej:

Kod: Zaznacz cały

"C:\mariadb-10.0.32-winx64\bin\mysql.exe" -u<user> -p<password> -h<host> -e"select concat('show grants for ','\'',user,'\'@\'',host,'\'') from mysql.user" > user_list_with_header.txt
sed '1d' user_list_with_header.txt > ./user.txt
while read user; do  mysql u<user> -p<password> -h<host> -e"$user" > user_grant.txt; sed '1d' user_grant.txt >> user_privileges.txt; echo "flush privileges" >> user_privileges.txt; done < user.txt
awk '{print $0";"}'  user_privileges.txt >user_privileges_final.sql
rm user.txt user_list_with_header.txt user_grant.txt user_privileges.txt
opcja GUI: MySQL Administrator - stary ale jary, wciąż dobrze sobie radzi z backup/restore.
Odradzam Navicat Premium i funkcja Data Transfer - nie wiedzieć czemu generuje masę błędów i nie przenosi wszystkich danych



5. Mam zrzucone tabele do pojedynczych plików *.SQL, teraz chciał bym je wszystkie złączyć w jeden duży plik *.sql, żeby go zaimportować do bazy, jak to zrobić?
windows:

Kod: Zaznacz cały

COPY *.sql > allinone.sql
lub

Kod: Zaznacz cały

type *.sql > allinone.sql
może się tu jednak rypnąć kodowanie dlatego polecam to darmowe graficzne narzędzie do łączenia plików: ConCat/Split http://www.jddesign.co.uk/products/concat/concat-s.htm

linux:

Kod: Zaznacz cały

cat *.sql > single.sql


6. Jak prawidłowo zaimportować plik *.SQL do nowej bazy (z zachowaniem kodowania znaków)?
Pod windowsem:

Kod: Zaznacz cały

@echo off
pause
cls
 
REM @echo on
REM --verbose --debug-info
"C:\mariadb-10.0.32-winx64\bin\mysql.exe" --user=USER --password="PASSWORD" --host=IP --port=3307 --protocol=TCP --no-beep --default-character-set=utf8 -Be "USE NAZWA_BAZY; SOURCE C:/Users/Admin/Desktop/import.sql;" --force=true --verbose --debug-info
@echo off
 
pause


7. wpisanie mysql w oknie konsoli prowadzi do starego silnika DB, jak to poprawić?
Należy utworzyć nowy link symboliczny:

Kod: Zaznacz cały

ln -s /usr/local/mariadb10/bin/mysql mysql


8. Jak połączyć się z bazą przez ODBC?
Ściągnij i zainstaluj sterowniki.
https://downloads.mariadb.org/connector-odbc/3.0.5/



9. Przy długo trwających zapytania zrywa mi połączenie z bazą albo dane InnoDB nie chcą się wszystkie importować/exportować, co robić?
W przypadku dużych baz danych (>1 milion rekordów) należy nieco podkręcić parametry pracy silnika DB.
W tym celu edytujemy plik: "/volume1/@appstore/MariaDB10/usr/local/mariadb10/etc/mysql/my.cnf"

Kod: Zaznacz cały

max_allowed_packet = 400M
net_read_timeout=6000
net_write_timeout=6000
wait_timeout=86400
interactive_timeout=86400
Jeśli nie wiecie co i jak zmienić a chcecie/musicie nieco podnieść priorytet pracy silnika DB to proponuję wgrać ustawiony plik /usr/share/mysql/my-large.cnf
http://codesnippets.pl - baza porad dla programistów, webmasterów, grafików
ODPOWIEDZ