-
-
Save rjha/9012d6a077e79f9d3aa31497044fd765 to your computer and use it in GitHub Desktop.
| ====================================== | |
| mysql 8.0.15 -> 8.0.16 upgrade error | |
| ====================================== | |
| 1) The mysql server refused to start when we upgraded from 8.0.15 to 8.0.16 | |
| on Ubuntu 16.04 | |
| Apr 25 09:08:09 yuktix-apiv11devm1 systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE | |
| Apr 25 09:08:09 yuktix-apiv11devm1 systemd[1]: Failed to start MySQL Community Server | |
| $sudo systemctl status mysql | |
| just shows BOOT_ERROR | |
| and ERROR 2 (file not found) | |
| $sudo journalctl -xe | less | |
| - so the guess is that either | |
| (a) apparmor settings are not right | |
| (b) or mysqld is not finding some file. | |
| To see if dmesg could not do something because of apparmor, | |
| $dmesg -T | grep mysql | |
| 2) /var/log/mysql/error.log has following entry | |
| [Server] Could not create server upgrade info file at '/var/lib/mysql/'. | |
| 2019-04-25T09:08:08.106750Z 0 [ERROR] [MY-013380] [Server] Failed to upgrade server. | |
| so the guess is that | |
| (c) /var/lib/mysql may not be writable | |
| 3) To see what is happenning, we can try starting the debug version, | |
| $sudo /usr/sbin/mysqld-debug --user=mysql --log-error-verbosity=3 | |
| This shows details in /var/log/mysql/error.log, | |
| Server upgrade from '80015' to '80016' started. | |
| Running queries to upgrade MySQL server. | |
| Upgrading system table data. | |
| The sys schema is already up to date (version 2.0.0). | |
| Upgrade of help tables started. | |
| Upgrade of help tables completed. | |
| Checking 'mysql' schema. | |
| Checking 'sys' schema. | |
| Could not create server upgrade info file at '/var/lib/mysql/'. | |
| Failed to upgrade server. | |
| Aborting | |
| 4) mysql is not able to write to /var/lib/mysql? why? | |
| - all permissions look ok. | |
| - however there is a file mysql_upgrade_info in /var/lib/mysql that is owned | |
| by root. | |
| we change the permission for that file, | |
| $ sudo chowm mysql:mysql /var/lib/mysql/mysql_upgrade_info | |
| Then start the debug version again. | |
| $sudo /usr/sbin/mysqld-debug --user=mysql --log-error-verbosity=3 | |
| 5)next complain is that /var/run/mysqld does not exists! | |
| lock file /var/run/mysqld/mysqld.sock.lock | |
| Server hostname (bind-address): '*'; port: 3306 | |
| IPv6 is available. | |
| - '::' resolves to '::'; | |
| Server socket created on IP: '::'. | |
| Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock. | |
| Unable to setup unix socket lock file. | |
| Aborting | |
| The fix is then to create /var/run/mysqld and /run/mysqld folders and | |
| give the ownership to mysql user | |
| $sudo chown mysql:mysql /var/run/mysqld | |
| # start again | |
| success! | |
| # systemd startup file | |
| is /lib/systemd/system/mysql.service | |
| ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre | |
| ExecStart=/usr/sbin/mysqld | |
| # quickly enable/disable apparmor | |
| $sudo aa-status | |
| $sudo aa-complain /usr/sbin/mysqld (will not enforce rules, only complain in log) | |
| $sudo aa-enforce /usr/sbin/mysqld |
Same here. In my case the file was there but owned by root. The chown alone solved the issue.
Note: chown not chowm :)
@rjha I see some more comments for the same problem, so I think it is a bug, which should be reported at bugs.mysql.com and you were the first to report it I think, because last Thursday it was the only result that popped up in Google :-)
@sibienl Since 8.0.16 there's now the option --validate-config, so you could check your configuration changes before restarting the server ;-)
Terje Røsten from mysql team logged a bug.
https://bugs.mysql.com/bug.php?id=95165
I upgraded from mysql 5.7 to percona 8 and i got this errors and fixed by your helping, thanks so much
changing the ownership of that file, helped me out on an arch system running percona server
$ sudo chown mysql:mysql /var/lib/mysql/mysql_upgrade_info
Thanks man! In my case I had to crate
/var/lib/mysql/data/mysql_upgrade_infoand give it mysql:mysql ownership, so the server could write "8.0.16" into it although all the permissions were OK. Such problems are really annoying...