之前写过一篇博客“MySQL变动数据库数据存储目次”,昆山软件公司,其时的测试情况是RHEL和CentOS,谁想最近在Ubuntu下面变动MySQL数据库数据存储目次时碰着了之前未碰着的问题,之前的履历用不上了(可能说之前的总结不是太全面),修改完MySQL数据库数据存储目次后重启MySQL,发明MySQL处事无法启动。
root@mylnx2:/etc/mysql/mysql.conf.d# service mysql start Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
连MySQL的错误日志也未生成,利用service mysql status呼吁可以输出一些较具体的信息,如下所示:
root@mylnx2:/etc/mysql/mysql.conf.d# service mysql status ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: activating (start-post) (Result: exit-code) since Mon 2018-10-15 22:33:00 CST; 28s ago Process: 12947 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE) Process: 12932 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 12947 (code=exited, status=1/FAILURE); : 12948 (mysql-systemd-s) Tasks: 2 Memory: 1.9M CPU: 367ms CGroup: /system.slice/mysql.service └─control ├─12948 /bin/bash /usr/share/mysql/mysql-systemd-start post └─13045 sleep 1 Oct 15 22:33:00 mylnx2 systemd[1]: Starting MySQL Community Server... Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.013763Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000) Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.013836Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000) Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.207533Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.207663Z 0 [Warning] Can't create test file /mysql_data/mysql/mylnx2.lower-test Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.207717Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.23-0ubuntu0.16.04.1-log) starting as process 129 Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.215413Z 0 [Warning] Can't create test file /mysql_data/mysql/mylnx2.lower-test Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.215445Z 0 [Warning] Can't create test file /mysql_data/mysql/mylnx2.lower-test Oct 15 22:33:01 mylnx2 systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
错误信息为“[Warning] Can’t create test file /mysql_data/mysql/mylnx2.lower-test”。其实这里是踩到了“AppArmor”这个坑,之前对Ubuntu相识不多,所以直到碰着这个问题,昆山软件开发,才相识、知道这么个观念。下面是百科对AppArmor的先容:
ppArmor是一个高效和易于利用的Linux系统安详应用措施。AppArmor对操纵系统和应用措施所受到的威胁举办从内到外的掩护,甚至是未被发明的0day裂痕和未知的应用措施裂痕所导致的进攻。AppArmor安详计策可以完全界说个体应用措施可以会见的系统资源与各自的特权。AppArmor包括大量的默认计策,它将先进的静态阐明和基于进修的东西团结起来,AppArmor甚至可以使很是巨大的应用可以利用在很短的时间内应用乐成。
AppArmor对MySQL所能利用的目次权限做了限制,如下截图所示,划定了MySQL利用的数据文件路径权限。
# cat /etc/apparmor.d/usr.sbin.mysqld
劳务调派系统用的目次权限做了限制" class="aligncenter size-full wp-image-30482" title="73542-20181015233711358-1847425623" src="/uploads/allimg/c181119/15425G25523340-13B4.png" />
我将MySQL的数据库数据存储目次从 /var/lib/mysql 切换到 /mysql_data/mysql 下面。所以就碰着了上面错误,需要修改或新增两笔记录,从而使mysqld可以利用 /mysql_data/mysql 这个目次。
/mysql_data/mysql/ r, /mysql_data/mysql/** rwk,
然后重启AppArmor处过后,劳务派遣管理系统,然后就可以重启MySQL处事了。
sudo service apparmor restart
虽然 /etc/apparmor.d/usr.sbin.mysqld 尚有 Allow plugin access 需要调解,这个不是重点,在此略过。
踌躇了一会,照旧记录一下这个小小案例!固然网上已有不少人总结这个,可是本身动手总结一下,印象也深刻一点!