安装mysql

起因

想升级halo,结果文档里说不推荐使用默认的h2,于是我就打算使用mysql。

过程

当我安装mysql时,总是因为各种各样的错误启动不了。

什么找不到mysqld.sock啊,authentication fail(好像是这个)啊,总之就是启动不了。

问了chatGPT,去Stack Overflow上找,都不能解决。

我觉得还是因为我很久以前装过mysql,但是后来删了,没删干净的原因,于是我寻找着完全清除的方法。

解决办法

参考这篇文章,然后使用sudo find / -name *mysql*,去网上搜这些文件夹的功能,能不能删。最后我删了许多文件,虽然我也不知道具体是什么起了作用,但是最后还是成功了(被这东西卡了3天)。

升级halo

一波未平,一波又起

按照安装文档里面的docker-compose命令,我装了docker compose插件但是找不到这个命令。我也不知道docker composedocker-compose有没有区别,于是就通过apt的提示安装了docker-compose,最后出现了错误。

接着,在运行docker run hello-world后,出现了:

docker: Error response from daemon: 
failed to create shim task: 
OCI runtime create failed: 
runc create failed: 
unable to start container process: 
error during container init: 
unable to apply apparmor profile: 
apparmor failed to apply profile: 
write /proc/self/attr/apparmor/exec: 
no such file or directory: 
unknown. 
ERRO[0000] error waiting for container:

然后发现这个/proc/self/attr/apparmor/exec文件没有执行的权限,连lsattr命令都提示

lsattr: Inappropriate ioctl for device While reading flags on exec

重新安装apparmor也没有用。折腾了一下午,最后只能回滚

控制变量

我怀疑是我清除mysql或者是reinstall docker compose时删掉了什么不该删的文件,导致后期出现了bug,于是我先回滚到装好mysql后的时间。结果也是无法docker run hello-world

接着回滚到装mysql前,装好docker后。

查看/proc/self/attr/apparmor/exec权限:ls -l /proc/self/attr/apparmor/exec,发现跟之前一样的没有执行权限 -rw-rw-rw-。不过docker run hello-world可以正常进行

这次我没有手动删其他文件了,使用了如下代码:

sudo rm /var/lib/mysql/ -R
sudo rm /etc/mysql/ -R
sudo apt-get autoremove mysql* --purge -y
sudo apt-get remove apparmor -y
dpkg --list|grep mysql
sudo apt-get remove dbconfig-mysql -y
sudo apt-get remove mysql-client -y
sudo apt-get remove mysql-client-5.7 -y
sudo apt-get remove mysql-client-core-5.7 -y
sudo apt-get autoremove mysql* --purge -y
dpkg --list|grep mysql                    
sudo apt-get remove php7.0-mysql -y
dpkg -l|grep ^rc|awk '{print$2}' |sudo xargs dpkg -P 
dpkg --list|grep mysql

但是装好mysql后,又是回到了原点:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Failed to restart mysql.service: Interactive authentication required.
See system logs and 'systemctl status mysql.service' for details.

看来装成功的关键在于我删掉的某些配置文件啊。 此时运行sudo docker run hello-world,发现出现同样的错误,那么我之前的推断是错的,出问题的应该是apparmor。

这次请出了:sudo find / -name *mysql* 删掉了:

sudo rm -rf /etc/systemd/system/mysql.service
sudo rm -rf /var/lib/mysql-files
sudo rm -rf /var/lib/mysql-keyring
sudo rm -rf /run/mysqld

这次成功了!!

但是问题来了,使用docker run hello-world却又报错,难道这两个不能共存?

werwer 尝试以下命令:

apt update
apt upgrade -y
apt install apparmor -y
sudo systemctl enable apparmor
sudo systemctl start apparmor
systemctl restart docker.service

无济于事(悲)

重启后又好了(喜)

docker compose相关

sudo docker compose down停止容器 sudo docker ps -a查看当前容器列表 sudo docker compose up -d作为后台服务启动容器

SUFE大二在读