Day 1
Getting the following every time I try to reinstall MySQL server
Failed to stop mysql.service: Unit mysql.service not loaded.
invoke-rc.d: initscript mysql, action "stop" failed.
dpkg: error processing package mysql-server-8.0 (--remove):
installed mysql-server-8.0 package pre-removal script subprocess returned error exit status 1
Failed to stop mysql.service: Unit mysql.service not loaded.
invoke-rc.d: initscript mysql, action "stop" failed.
Failed to preset unit: File mysql.service: Link has been severed
/usr/bin/deb-systemd-helper: error: systemctl preset failed on mysql.service: No such file or directory
Failed to start mysql.service: Unit mysql.service not found.
invoke-rc.d: initscript mysql, action "start" failed.
Unit mysql.service could not be found.
dpkg: error while cleaning up:
installed mysql-server-8.0 package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
mysql-server-8.0
Found out there’s open bug in Ubuntu’s #launchpad & a discussion is MySQL official forum. The solution didn’t works out to me.
Removed couple of scripts responsbile for pre/post installations.
# remove post/pre install scripts
sudo rm -rf /var/lib/dpkg/info/mysql-server-8.0.preinst
sudo rm -rf /var/lib/dpkg/info/mysql-server-8.0.postinst
sudo rm -rf /var/lib/dpkg/info/mysql-*
Still no luck 🙁
Day 2 – Research & learn
Another search leads to #CopyProgramming which provides me a hint why mysql
is listed as running during installtion while it is not.
Maria
– sister of MySQL
conflicts with possible services/configs.
sudo dpkg --get-selections | grep maria
mariadb-client-10.1 deinstall
mariadb-common deinstall
mariadb-server-10.1 deinstall
And I removed them all.
Day 3 – Final fix !
Meanwhile some how I landed on this #AskUbuntu which leads me to validate the service path.
Upon checking, /etc/systemd/system/mysql.service
linked to broken mariadb.service
which may be possible culprit. I tried mariadb
long back and it may root cause now.
#link broken
ls -l /etc/systemd/system/mysql*
/etc/systemd/system/mysql.service ⇒ /lib/systemd/system/mariadb.service
/etc/systemd/system/mysqld.service ⇒ /lib/systemd/system/mariadb.service
I unlinked them, correct the link & rebooted the device
#correct target
ls -l /lib/systemd/system/my*
/lib/systemd/system/mysql.service
/lib/systemd/system/mysql@.service
#link fixed
ls -l /etc/systemd/system/mysql*
/etc/systemd/system/mysql.service ⇒ /lib/systemd/system/mysql.service
/etc/systemd/system/mysqld.service ⇒ /lib/systemd/system/mysql.service
Did a fresh attempt of reinstalling the mysql-server
with others.
# prepare
sudo apt --fix-broken install
sudo apt autoclean
sudo apt autoremove
# make sure mysql8 is selected
sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb
# cleaning everything
sudo rm -rf /etc/apparmor.d/abstractions/mysql /etc/apparmor.d/cache/usr.sbin.mysqld /etc/mysql /var/lib/mysql /var/log/mysql* /var/log/upstart/mysql.log* /var/run/mysqld
# fresh install
sudo apt install mysql-server-8.0 mysql-client mysql-common mysql-server-core-8.0 mysql-client-core-8.0
Yes! It works. Finally I’m able to install and run MySQL after long time.
Outcome:
dpkg -l | grep mysql
ii mysql-apt-config 0.8.12-1 all Auto configuration for MySQL APT Repo.
ii mysql-client 8.0.36-0ubuntu0.20.04.1 all MySQL database client (metapackage depending on the latest version)
ii mysql-client-8.0 8.0.36-0ubuntu0.20.04.1 amd64 MySQL database client binaries
ii mysql-client-core-8.0 8.0.36-0ubuntu0.20.04.1 amd64 MySQL database core client binaries
ii mysql-common 5.8+1.0.5ubuntu2 all MySQL database common files, e.g. /etc/mysql/my.cnf
ii mysql-server-8.0 8.0.36-0ubuntu0.20.04.1 amd64 MySQL database server binaries and system database setup
ii mysql-server-core-8.0 8.0.36-0ubuntu0.20.04.1 amd64 MySQL database server binaries
0 ✓ success ^_^
sudo mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.36-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> ^DBye
Update : 4/3/2024
The future me!
Yes! The future is here. Encountered similar issue again after a month (exactly). Possibly this is due to dir /var/lib/mysql/
mounted on other disk or other partition and AppArmor
prevent mysql accessing the dir.
There’s bug on this at MySQL. Bug #82281 – mysqld –initialize reports “Permission denied”, regardless of permissions
Workaround: Disable the mysqld profile for AppArmor sudo aa-disable /usr/sbin/mysqld
Appendix
Some use full commands:
#key config files/path
ls -laF /lib/systemd/system/mysql.service # path of mysql.service
# fixing deps / broken packages
sudo apt install -f # install the deps / broken packages
sudo apt install --fix-broken
sudo dpkg --configure -a # does the above with more on config missing services
sudo apt install --reinstall mysql-server-8.0 #re-install the package
sudo systemctl disable mysql.service # disable the service
sudo systemctl enable mysql.service # enable the service
# mysql related packages
dpkg -l | awk '{print $2}' | grep -i mysql | grep -v lib # list packages
sudo dpkg -P --force-all $(dpkg -l | awk '{print $2}' | grep -i mysql | grep -v lib) # purge them
# remove post/pre install scripts
sudo rm -rf /var/lib/dpkg/info/mysql-*
sudo dpkg --remove --force-remove-reinstreq mysql-server-8.0
#beta zone
sudo apt-get --dry-run install initscripts
sudo dpkg --remove --force-remove-reinstreq mysql-server-8.0
sudo apt purge apparmor
# another batch
sudo -i
service mysql stop
killall -KILL mysql mysqld_safe mysqld
apt-get --yes purge mysql-server mysql-client
apt-get --yes autoremove --purge
apt-get autoclean
deluser --remove-home mysql
delgroup mysql
rm -rf /etc/apparmor.d/abstractions/mysql /etc/apparmor.d/cache/usr.sbin.mysqld /etc/mysql /var/lib/mysql /var/log/mysql* /var/log/upstart/mysql.log* /var/run/mysqld
updatedb
sudo apt update
sudo apt upgrade
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb
sudo dpkg -i mysql-apt-config*
apt update
sudo apt update
sudo apt upgrade
sudo apt install mysql-server
# mysql abstraction - fix this else you may encounter ERROR for future aa-complain commands
$cat /etc/apparmor.d/abstractions/mysql
# ------------------------------------------------------------------
#
# Copyright (C) 2002-2006 Novell/SUSE
# Copyright (C) 2013 Christian Boltz
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public
# License published by the Free Software Foundation.
#
# ------------------------------------------------------------------
/var/lib/mysql{,d}/mysql{,d}.sock rw,
/{var/,}run/mysql{,d}/mysql{,d}.sock rw,
/usr/share/{mysql,mysql-community-server,mariadb}/charsets/ r,
/usr/share/{mysql,mysql-community-server,mariadb}/charsets/*.xml r,