4 votes

Impossible de modifier le répertoire de données de mysql (Errcode : 13 - Permission refusée)

J'ai changé le répertoire de données de mysql.

Pour cela

  1. J'ai déplacé le dossier /var/lib/mysql vers un nouveau répertoire

  2. a changé le répertoire de données dans /etc/mysql/mysql.conf.d/mysqld.cnf ,

  3. changé la configuration de l'apparmor dans /etc/apparmor.d/usr.sbin.mysqld :

    /newDirectory/mysql/ r,
    /newDirectory/mysql/** rwk,
  4. ajouté alias /var/lib/mysql/ -> /newDirectory/mysql/, à

    /etc/apparmor.d/tunables/alias
  5. a accordé la propriété et la permission à mysql

    sudo chown -R mysql.mysql /newDirectory/mysql
    sudo chmod -R 775 /newDirectory/mysql

Mais je ne peux toujours pas lancer mysql et j'obtiens l'erreur suivante :

mysqld: Can't change dir to '/newDirectory/mysql/' (Errcode: 13 - Permission denied)

Quelle autre raison pourrait être à l'origine de cette erreur ?

EDIT :

journalctl -xe
Aug 24 13:29:30 Server audit[2288]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/2288/status" pid=2288 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=121 ouid=121
Aug 24 13:29:30 Server audit[2288]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=2288 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=121 ouid=0
Aug 24 13:29:30 Server audit[2288]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/2288/status" pid=2288 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=121 ouid=121
Aug 24 13:29:30 Server kernel: audit: type=1400 audit(1535110170.413:3083): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/2288/status" pid=2288 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=121 ouid=121
Aug 24 13:29:30 Server kernel: audit: type=1400 audit(1535110170.413:3084): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=2288 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=121 ouid=0
Aug 24 13:29:30 TIE-Server kernel: audit: type=1400 audit(1535110170.413:3085): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/2288/status" pid=2288 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=121 ouid=121
Aug 24 13:29:30 Server mysqld[2288]: mysqld: Can't change dir to '/newDirectory/mysql/' (Errcode: 13 - Permission denied)

EDIT2 :

Inspiré par ce post https://askubuntu.com/a/953988/863451 j'ai ajouté dans le fichier /etc/apparmor.d/usr.sbin.mysqld

/proc/*/status r,
/sys/devices/system/node/ r,

Malheureusement, cela n'a rien changé.

EDIT 3 :

Après avoir essayé d'exécuter la solution de George Udosen ( https://askubuntu.com/a/1068832/863451 ) les journaux d'erreurs ressemblent à ceci :

**journalctl -xe**
Aug 27 11:04:33 Server mysqld[19214]: 2018-08-27T09:04:33.673061Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)
Aug 27 11:04:33 Server mysqld[19214]: 2018-08-27T09:04:33.844943Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_
Aug 27 11:04:33 Server mysqld[19214]: 2018-08-27T09:04:33.845053Z 0 [Warning] Can't create test file /newDirectory/Server.lower-test
Aug 27 11:04:33 Server mysqld[19214]: 2018-08-27T09:04:33.845104Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.23-0ubuntu0.16.04.1) starting as process 19214 ...
Aug 27 11:04:33 Server mysqld[19214]: 2018-08-27T09:04:33.849145Z 0 [Warning] Can't create test file /newDirectory/mysql/Server.lower-test
Aug 27 11:04:33 Server mysqld[19214]: 2018-08-27T09:04:33.849168Z 0 [Warning] Can't create test file newDirectory/mysql/Server.lower-test
Aug 27 11:04:33 Server mysqld[19214]: 2018-08-27T09:04:33.850029Z 0 [ERROR] failed to set datadir to /newDirectory/mysql/
Aug 27 11:04:33 Server mysqld[19214]: 2018-08-27T09:04:33.850049Z 0 [ERROR] Aborting
Aug 27 11:04:33 Server mysqld[19214]: 2018-08-27T09:04:33.850071Z 0 [Note] Binlog end
Aug 27 11:04:33 Server mysqld[19214]: 2018-08-27T09:04:33.850133Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
Aug 27 11:04:33 Server systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
Aug 27 11:05:03 Server systemd[1]: Failed to start MySQL Community Server.
-- Subject: Unit mysql.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mysql.service has failed.
-- 
-- The result is failed.
Aug 27 11:05:03 Server systemd[1]: mysql.service: Unit entered failed state.
Aug 27 11:05:03 Server systemd[1]: mysql.service: Failed with result 'exit-code'.
Aug 27 11:05:04 Server systemd[1]: mysql.service: Service hold-off time over, scheduling restart.
Aug 27 11:05:04 Server systemd[1]: Stopped MySQL Community Server.
-- Subject: Unit mysql.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mysql.service has finished shutting down.
Aug 27 11:05:04 TIE-Server systemd[1]: Starting MySQL Community Server...
-- Subject: Unit mysql.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mysql.service has begun starting up.
Aug 27 11:05:04 Server mysqld[19313]: mysqld: Can't change dir to '/newDirectory/mysql/' (Errcode: 13 - Permission denied)
Aug 27 11:05:04 Server mysqld[19313]: 2018-08-27T09:05:04.170717Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
Aug 27 11:05:04 Server mysqld[19313]: 2018-08-27T09:05:04.170788Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)
Aug 27 11:05:04 Server mysqld[19313]: 2018-08-27T09:05:04.345141Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_
Aug 27 11:05:04 Server mysqld[19313]: 2018-08-27T09:05:04.345239Z 0 [Warning] Can't create test file /newDirectory/mysql/Server.lower-test
Aug 27 11:05:04 Server mysqld[19313]: 2018-08-27T09:05:04.345288Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.23-0ubuntu0.16.04.1) starting as process 19313 ...
Aug 27 11:05:04 Server mysqld[19313]: 2018-08-27T09:05:04.349475Z 0 [Warning] Can't create test file /newDirectory/mysql/Server.lower-test
Aug 27 11:05:04 Server mysqld[19313]: 2018-08-27T09:05:04.349498Z 0 [Warning] Can't create test file /newDirectory/mysql/Server.lower-test
Aug 27 11:05:04 Server mysqld[19313]: 2018-08-27T09:05:04.350320Z 0 [ERROR] failed to set datadir to /newDirectory/mysql/
Aug 27 11:05:04 Server mysqld[19313]: 2018-08-27T09:05:04.350339Z 0 [ERROR] Aborting
Aug 27 11:05:04Server mysqld[19313]: 2018-08-27T09:05:04.350357Z 0 [Note] Binlog end
Aug 27 11:05:04 TIE-Server mysqld[19313]: 2018-08-27T09:05:04.350414Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
Aug 27 11:05:04 TIE-Server systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE

**systemctl status mysql.service**
    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-08-27 11:18:01 CEST; 11s ago
      Process: 21747 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)
      Process: 21730 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
     Main PID: 21747 (code=exited, status=1/FAILURE);         : 21749 (mysql-systemd-s)
        Tasks: 2
       Memory: 6.2M
          CPU: 291ms
       CGroup: /system.slice/mysql.service
               control
                 21749 /bin/bash /usr/share/mysql/mysql-systemd-start post
                 21779 sleep 1

    Aug 27 11:18:01 Server systemd[1]: Starting MySQL Community Server...
    Aug 27 11:18:01 TIE-Server mysqld[21747]: mysqld: Can't change dir to 'newDirectory/mysql/' (Errcode: 13 - Permisson denied)
    Aug 27 11:18:01 Server mysqld[21747]: 2018-08-27T09:18:01.671709Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
    Aug 27 11:18:01 Server mysqld[21747]: 2018-08-27T09:18:01.671780Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)
    Aug 27 11:18:01 Server mysqld[21747]: 2018-08-27T09:18:01.844978Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_
    Aug 27 11:18:01 Server mysqld[21747]: 2018-08-27T09:18:01.845090Z 0 [Warning] Can't create test file /newDirectory/mysql/Server.lower-test
    Aug 27 11:18:01 Server mysqld[21747]: 2018-08-27T09:18:01.845141Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.23-0ubuntu0.16.04.1) starting as process 21747 ...
    Aug 27 11:18:01 Server systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE

EDIT 4 :

L'état actuel du profil mysql apparmor :

sudo aa-status | grep -e "^[[:alnum:]]" -e mysql
apparmor module is loaded.
80 profiles are loaded.
41 profiles are in enforce mode.
39 profiles are in complain mode.
   /usr/bin/mysql
   /usr/sbin/mysqld
12 processes have profiles defined.
8 processes are in enforce mode.
4 processes are in complain mode.
   /usr/sbin/mysqld (8455) 
0 processes are unconfined but have a profile defined.

EDIT5 :

Le montage de la liaison n'a pas aidé non plus : https://askubuntu.com/a/663945/863451

0voto

Je pense que vous pouvez essayer,

ajouter l'autorisation r les lignes suivantes à /etc/apparmor.d/usr.sbin.mysqld à l'intérieur de /usr/sbin/mysqld section, il en sera ainsi :

/proc/*/status r,
/sys/devices/system/node/ r,

et ensuite vous pouvez recharger l'armement en utilisant,

service apparmor reload

et recommencez à utiliser MySql,

service mysql start

EDIT

Je pense que vous devriez enlever votre /sys/devices/system/node/node0/meminfo r, où se trouve sur votre systemctl n'ont pas.

J'espère que cela vous aidera.

0voto

George Udosen Points 33267

WARNING : Sauvegarde /etc/apparmor.d/usr.sbin.mysqld, et votre base de données mysql.

Permettez-moi de partager avec vous un moyen beaucoup plus simple de résoudre ce problème. Maintenant, j'ai suivi vos étapes dans :

  1. J'ai déplacé le dossier /var/lib/mysql dans un nouveau répertoire avec la commande :

    sudo cp -r --preserve /var/lib/mysql /new/location
  2. a changé le répertoire de données dans /etc/mysql/mysql.conf.d/mysqld.cnf ,

  3. changé la configuration de l'apparmor dans /etc/apparmor.d/usr.sbin.mysqld :

    /newDirectory/mysql/ r,
    /newDirectory/mysql/** rwk,

Note : Je n'ai pas fait étape 4 car l'étape 1 s'en occupe.

Maintenant, installez apparmor tools :

 sudo apt install apparmor*

Cela va installer :

apparmor-easyprof
apparmor-notify
apparmor-profiles
apparmor-profiles-extra
apparmor-utils

Le profil d'apparmor de mysql ne lui permet pas d'accéder à ce nouvel emplacement de répertoire, représenté ici par la balise enforce état vu lorsque vous exécutez

sudo aa-status | grep -e "^[[:alnum:]]" -e mysql

Résultats :

[sudo] password for georgek: 
apparmor module is loaded.
114 profiles are loaded.
72 profiles are in enforce mode.
   /usr/sbin/mysqld
42 profiles are in complain mode.
9 processes have profiles defined.
7 processes are in enforce mode.
   /usr/sbin/mysqld (2066) 
2 processes are in complain mode.
0 processes are unconfined but have a profile defined.

Maintenant, nous allons modifier le profil actuel pour mysql avec l'option sudo aa-genprof commande. Cela permettra de scanner le /var/log/syslog et recherchez apparmor pour mysql et l'utiliser pour générer un nouveau profil pour lui. Commençons, exécuter les commandes à partir de deux terminaux séparément . Exécuter le aa-genprof l'un d'abord et l'autre quand il y est invité par l'État. aa-genprof commandement :

 sudo systemctl restart mysql
 sudo aa-genprof /usr/bin/mysql

Plusieurs options vous seront proposées dans ce format.

[(S)can system log for AppArmor events] / (F)inish
...
(A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inish

Lisez les règles à ajouter et cliquez sur ces touches de votre clavier pour les accepter ou les refuser comme bon vous semble. Dans mon cas, je les ai toutes acceptées. Ensuite, quand c'est fait, vous verrez cette ligne :

(S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t

Cliquez sur S pour finir. A la fin, mon /etc/apparmor.d/usr.sbin.mysqld sera mis à jour. Exécutez maintenant sudo systemctl restart mysql il devrait maintenant être autorisé à accéder à ce dossier.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X