安装mysql
起因
想升级halo,结果文档里说不推荐使用默认的h2,于是我就打算使用mysql。
过程
当我安装mysql时,总是因为各种各样的错误启动不了。
什么找不到mysqld.sock
啊,authentication fail
(好像是这个)啊,总之就是启动不了。
问了chatGPT,去Stack Overflow上找,都不能解决。
我觉得还是因为我很久以前装过mysql,但是后来删了,没删干净的原因,于是我寻找着完全清除的方法。
解决办法
参考这篇文章,然后使用sudo find / -name *mysql*
,去网上搜这些文件夹的功能,能不能删。最后我删了许多文件,虽然我也不知道具体是什么起了作用,但是最后还是成功了(被这东西卡了3天)。
升级halo
一波未平,一波又起
按照安装文档里面的docker-compose
命令,我装了docker compose插件但是找不到这个命令。我也不知道docker compose
和docker-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
作为后台服务启动容器