Aktualizacja mysql na serwerach z DirectAdmin to w teorii prosta sprawa – wystarczy podmienić wersję w options.conf, następnie ./build update , ./build mysql i gotowe !

Nie zawsze jednak pójdzie wszystko gładko – a już szczególnie wtedy gdy komunikat błędu  nie mówi nic sensownego o problemie.

Stan wyjściowy:

Server version: 5.5.46-MariaDB MariaDB Server

Problem: Nie można wgrać bazy, bo “Unknown collation: ‘utf8mb4_unicode_520_ci’”

Najszybciej byłoby przekonwertować do utf8_unicode_ci, ale to rozwiązanie krótkodystansowe, i przyjemnie byłoby to na stałe rozwiązać, zrobić upgrade i mieć spokój.

Idąc za dokumentacją wystarczy zrobić:

cd /usr/local/directadmin/custombuild
./build set mariadb 10.1
./build set mysql_inst mariadb
./build set mysql_backup yes
./build update
./build mariadb

I mamy po robocie – ale ciekawie zrobiło się w momencie gdy widzimy coś takiego:

converted 'http://files.directadmin.com/services/all/mariadb/10.1/10.1.35/mariadb-10.1.35-linux-glibc_214-x86_64.tar.gz' (ANSI_X3.4-1968) -> 'http://files.directadmin.com/services/all/mariadb/10.1/10.1.35/mariadb-10.1.35-linux-glibc_214-x86_64.tar.gz' (UTF-8)
--2018-08-21 01:38:25--  http://files.directadmin.com/services/all/mariadb/10.1/10.1.35/mariadb-10.1.35-linux-glibc_214-x86_64.tar.gz
Resolving files.directadmin.com (files.directadmin.com)... 208.167.226.3, 216.144.254.90, 69.162.69.58
Connecting to files.directadmin.com (files.directadmin.com)|208.167.226.3|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 542065953 (517M) [application/x-gzip]
Saving to: 'mariadb-10.1.35-linux-glibc_214-x86_64.tar.gz'

mariadb-10.1.35-linux-glibc_214-x86_6 100%[=========================================================================>] 516.95M  28.9MB/s   in 19s    

2018-08-21 01:38:45 (26.9 MB/s) - 'mariadb-10.1.35-linux-glibc_214-x86_64.tar.gz' saved [542065953/542065953]

mv: 'mariadb-10.1.35-linux-glibc_214-x86_64.tar.gz' and '/usr/local/mariadb-10.1.35-linux-glibc_214-x86_64.tar.gz' are the same file
Stopping mysqld ...
Ensuring local-infile is disabled for security reasons in MySQL configuration file...
Giving mysqld a few seconds to start up...
/usr/local/mysql/bin/mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/usr/local/mysql/data/mysql.sock' (2 "No such file or directory") when trying to connect
FATAL ERROR: Upgrade failed
Restarting MySQL.

A w  /home/mysql/[hostname].err :

2018-08-21  2:06:22 139782037567360 [ERROR] Can't open and lock privilege tables: Table './mysql/servers.MYI' is read only
2018-08-21  2:06:22 139782037567360 [Note] Server socket created on IP: '::'.
2018-08-21  2:06:22 139782037567360 [ERROR] Fatal error: Can't open and lock privilege tables: Table './mysql/user.MYI' is read only

Uprawnienia na /home/mysql – poprawne, uprawnienia na /home/mysql/mysql – poprawne, na servers.MYI i user.MYI – też

Więc co było złe?

Uprawnienia na /home 🙃

Domyślne uprawnienia to 711:

# ls -ld /home
drwx--x--x 11 root root 4096 sie 21 15:48 /home

Jeżeli zmienimy je na 755, czyli damy uprawnienia do odczytu dla wszystkich, to upgrade pójdzie gładko:

chmod 755 /home

Dodatkowe 2 wskazówki:

1)Przed upgrade warto zrobić kopię serwera mysql – w przypadku systemu debian 8 w katalogu /usr/local jest symlink z mysql do katalogu z aktualnie używaną wersją:

# cd /usr/local/
# ls -l | grep mysql
drwxr-sr-x 12 root   mysql     4096 Apr 11  2017 mariadb-5.5.46-linux-x86_64
lrwxrwxrwx  1 root   staff       27 Apr 11  2017 mysql -> mariadb-5.5.46-linux-x86_64

Wystarczy zrobić kopię mariadb i zapisać pod inną nazwą ( przy okazji – jeśli nazwiesz katalog z kopią “mariadb-5.5.46-linux-x86_64.kopia” to wiedz że build mysql go usunie….) i w przypadku fuckupu przywrócić katalog, lub skierować symlinka w odpowiednie miejsce

2) Wato zrobić upgrade stopniowo, tj jeśli masz jeszcze mariadb w wersji 5.5 najpierw podnieść go do 10.0, i dopiero później na 10.1

3)I najważniejsze, czyli: rób upgrade w nocy i zawsze miej backup wrazie “W” 😎

 

Oceń wpis