云服务器上的 mysql 莫名其妙启动不了,在重装过程中执行 sudo apt-get install mysql-server
命令时遇到报错:
dpkg: error processing archive /var/cache/apt/archives/mysql-server-core-8.0_8.0.32-0ubuntu0.20.04.2_amd64.deb (--unpack):
unable to create '/usr/lib/mysql/plugin/adt_null.so.dpkg-new' (while processing './usr/lib/mysql/plugin/adt_null.so'): Operation not permitted
dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)
Errors were encountered while processing:
/var/cache/apt/archives/mysql-server-core-8.0_8.0.32-0ubuntu0.20.04.2_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
报错主干是 dpkg: error processing archive ... unable to create '/usr/lib/mysql/plugin/...' Operation not permitted
。
意思是说 dpkg 在处理文档时出错,出错原因是没有权限在 /usr/lib/mysql/plugin/
下创建文件。
实际上我们是在超级用户权限下来执行安装命令的,按理说不会权限不足,而且如果我们直接执行 chmod 命令会提示 chmod: changing permissions of '/usr/lib/mysql/plugin': Operation not permitted
,所以我们需要先通过 chattr 来修改底层属性再 chmod。
首先我们通过 lsattr 命令来看一下目标文件的属性:
root@iZwz9fsfltolu74amg1v0rZ:/home/atreus# lsattr /usr/lib/mysql/
----i---------e----- /usr/lib/mysql/zlib_decompress
----i---------e----- /usr/lib/mysql/plugin
----i---------e----- /usr/lib/mysql/private
e 表示表明该文件正在使用扩展区来映射磁盘上的块,i 表示不得任意更动文件或目录,所以我们需要删除 i 属性。
通过 chattr -i
来删除指定文件的 i 属性,然后再通过 chmod 修改权限:
root@iZwz9fsfltolu74amg1v0rZ:/home/atreus# chattr -i /usr/lib/mysql/plugin
root@iZwz9fsfltolu74amg1v0rZ:/home/atreus# lsattr /usr/lib/mysql/
----i---------e----- /usr/lib/mysql/zlib_decompress
--------------e----- /usr/lib/mysql/plugin
----i---------e----- /usr/lib/mysql/private
root@iZwz9fsfltolu74amg1v0rZ:/home/atreus# chmod 777 /usr/lib/mysql/plugin
类似的,我们还要修改 zlib_decompress 和 private 这两个目录的属性以及权限,不然后续都会报错。
修改成功后再次执行 sudo apt-get install mysql-server
就能成功安装 mysql 了!
如果对安全性有担忧,可以在 mysql 安装成功后在把三个目录的 i 属性加回去。