MySQL腾讯云(Ubuntu系统)安装失败解决方案--记录一种罕见的安装启动失败案例

MySQL腾讯云(Ubuntu系统)安装失败解决方案–记录一种罕见的安装启动失败案例

目前我尝试时,不能正常按照sudo apt-get mysql-sever 语句安装,应该是腾讯云提供的源的问题。可行的安装方式为:

sudo apt install mysql-client-core-5.7
sudo apt-get install mysql-server-5.7

sudo apt install mysql-client-core-8.0
sudo apt-get install mysql-server-8.0

顺利的情况下,可以成功安装并运行起来,没有报错。(未出现红字)
然而,遇到报错就麻烦:
Fig.1 mysql 安装报错情况
出现E: Sub-process /usr/bin/dpkg returned an error code (1),说明安装过程出现错误,我尝试了一些可以查询到的方法,如【链接1】【链接2】。但对于我这个问题并没有效果,问题还没解决。

我了解到 /var/log/mysql/error.log记录着mysql安装的log,于是通过nano /var/log/mysql/error.log查看。
Fig.2 log内容
发现由于权限问题,mysqld无法再/tmp中创建文件夹,导致mysql无法启动。(其实此时mysql已经完成了安装,但是无法正常启动。使用sudo systemctl start mysql.service就会出现Fig.1的错误)。
权限问题一般也不是太复杂,可能是由于/tmp的读写权限没有给到当前用户?不过我用的sudo,应该也不会出现这种问题。然后我查询了/tmp的读写权限,已经给到最高了rwxrwxrwx,所有用户可读写。那也不是这个问题啊!

然后我在此折腾了半天,反复remove、install 无济于事。
终于,我在咨询人工智能Kimi时,获得了一丝线索,在此感谢Kimi足够详细的回答。
在反复询问Kimi以及不断尝试,我注意到两个未尝试过的信息:
在这里插入图片描述
在这里插入图片描述
由于mysql的log只提示了权限问题,并不能帮助我解决问题,只能考虑是其他原因。SELinux和AppArmor我不知道是什么东西,然后我先试了一下dmesg
在这里插入图片描述
一试刚好发现了这个熟悉的东西,然后我直接把报错发给了人工智能解读,人工智能的回答让我茅塞顿开,终于找到了问题的根源。以下为人工智能对错误的解答


这些日志条目是AppArmor安全模块生成的审计日志,它们记录了AppArmor阻止的某些操作。下面是对这些日志条目的逐条解读:

  • 日志格式:每条日志都包含了时间戳、审计类型(type=1400表示AppArmor的DENIED事件)、操作类型、涉及的程序、文件名、进程ID(pid)、命令名称(comm)、以及其他一些详细信息。

  • AppArmor=“DENIED”:这表明AppArmor阻止了某个操作。

  • operation=“open” 或 operation=“mknod”

    • open 表示尝试打开一个文件,但被拒绝。
    • mknod 表示尝试创建一个文件系统节点,比如创建一个设备文件,但被拒绝。
  • profile=“/usr/sbin/mysqld”:这指定了被AppArmor用于mysqld(MySQL服务器守护进程)的配置文件路径。

  • name:被尝试访问或创建的文件或文件系统节点的路径。

  • pid:发起请求的进程的进程ID。

  • comm=“boot”:尝试执行操作的命令名称,这里是boot,这可能是一个脚本或程序,用于在系统启动时执行某些任务。

  • requested_mask=“wr” 或 requested_mask=“c”:请求的权限掩码,wr 表示写入权限,c 表示创建权限。

  • denied_mask=“wr” 或 denied_mask=“c”:被拒绝的权限掩码,与请求的权限相同。

  • fsuid=116 ouid=116:尝试执行操作的有效用户ID和所有者用户ID。

根据这些日志条目,可以看出MySQL服务器在尝试访问或创建位于/www/cosfs_temp/mysql_temp/目录下的文件时,被AppArmor拒绝了写入和创建文件系统节点的权限。这通常是因为AppArmor的配置文件没有为mysqld进程提供足够的权限来执行这些操作。

解决这个问题通常需要以下步骤:

  1. 查看AppArmor配置文件:检查/etc/apparmor.d/目录下与mysqld相关的AppArmor配置文件。

  2. 编辑AppArmor配置文件:如果需要,编辑配置文件以允许对/www/cosfs_temp/mysql_temp/目录的写入和创建操作。

  3. 重新加载AppArmor配置:修改配置文件后,重新加载AppArmor以应用更改:

    sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
    
  4. 检查MySQL配置:确保MySQL的配置文件(如my.cnfmy.ini)中的相关设置正确。

  5. 重启MySQL服务:应用更改后,重启MySQL服务以确保新的AppArmor设置生效:

    sudo systemctl restart mysql
    
  6. 监控日志:在更改后,继续监控系统日志以确保问题已经解决。


人工智能解答了我的问题,我接着让他给出更信息详细的解决方案:

要编辑AppArmor配置文件以允许对/www/cosfs_temp/mysql_temp/目录的写入和创建操作,你可以按照以下步骤操作:

  1. 定位AppArmor配置文件
    首先,需要找到控制mysqld的AppArmor配置文件。通常这些文件位于/etc/apparmor.d/目录下。可以使用以下命令查找可能的配置文件:

    sudo ls /etc/apparmor.d/ | grep mysql
    
  2. 查看配置文件内容
    使用文本编辑器查看配置文件的内容,例如:

    sudo nano /etc/apparmor.d/usr.sbin.mysqld
    
  3. 添加规则
    在配置文件中,你需要添加规则以允许对特定目录的写入访问。例如,你可以添加如下规则:

    /www/cosfs_temp/mysql_temp/ rwk,  # your_path/* rwk
    

    这条规则允许对/www/cosfs_temp/mysql_temp/目录及其内容进行读取(r)、写入(w)、创建(k)操作。

  4. 修改规则
    如果配置文件中已经有关于/tmp的规则,可能需要修改它们以包括/www/cosfs_temp/mysql_temp/目录。例如,如果规则是:

    /tmp/ r,
    

    你可能需要修改为:

    /tmp/* r,
    /www/cosfs_temp/mysql_temp/* rwk,
    
  5. 保存并关闭文件
    修改完成后,保存并关闭文件。

  6. 重新加载AppArmor配置
    为了使更改生效,需要重新加载AppArmor配置文件。可以使用以下命令:

    sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
    
  7. 重启MySQL服务
    重新加载配置后,重启MySQL服务以应用新的AppArmor设置:

    sudo systemctl restart mysql
    
  8. 测试更改
    更改完成后,应该测试以确保MySQL服务可以正常访问/www/cosfs_temp/mysql_temp/目录。

  9. 监控日志
    监控系统日志以确保AppArmor没有再次拒绝MySQL的访问请求。

请注意,修改AppArmor配置可能会影响到系统的安全性。在修改配置之前,请确保你了解这些更改的后果,并且这些更改是必要的。如果你不确定,最好咨询有经验的系统管理员或者安全专家。


我按照他的解决方案,成功解决了我的问题,注意对应路径改成你的路径,切记路径后带(/path/* rw,)。感谢Kimi!谨以此记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值