web-dev-qa-db-ja.com

権限がmysqlログへの書き込みを拒否しました

私はVagrantで新しいUbuntu(Vivid 15.04)インストールをテストして、mysqlで問題が発生し、カスタムの場所にログを記録しています。

/var/log/syslogなるほど

/usr/bin/mysqld_safe: cannot create /var/log/mysqld.log: Permission denied

もし私が ls -l /varなるほど

drwxrwxr-x 10 root syslog 4096 Jun  8 19:52 log

/ var/logを見ると、ファイルは存在しません

Apparmorを一時的に無効にして、それが問題の原因であるかどうかを特定したと思いましたが、それでも問題が発生しているかどうかはわかりません(編集:まだ有効になっている可能性があるため、これが問題か単純かはわかりません)権限)。

Mysqlとしてファイルを手動で作成しようとすると、拒否されます(テストのためにbashアクセスを一時的に許可しましたが、後で削除します)。

touch /var/log/mysql.log
touch: cannot touch ‘/var/log/mysql.log’: Permission denied

別の実行中のサーバー(centos)を見ると、上記のようなアクセス許可がある(そしてmysqlユーザーとして書き込む)ので、mysqlは通常、/ var/logディレクトリにアクセスするためのアクセス許可をどのように取得するのでしょうか。通常の実行を介してそのフォルダにアクセスしますか?

これが私のmysqlのapparmorプロファイルです


/usr/sbin/mysqld {
  #include 
  #include 
  #include 
  #include 
  #include 

  capability dac_override,
  capability sys_resource,
  capability setgid,
  capability setuid,

  network tcp,

  /etc/hosts.allow r,
  /etc/hosts.deny r,

  /etc/mysql/** r,
  /usr/lib/mysql/plugin/ r,
  /usr/lib/mysql/plugin/*.so* mr,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysqld.log rw,
  /var/log/mysqld.err rw,
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid rw,
  /var/run/mysqld/mysqld.sock w,
  /run/mysqld/mysqld.pid rw,
  /run/mysqld/mysqld.sock w,

  /sys/devices/system/cpu/ r,

/var/log/mysqld.log rw,

  # Site-specific additions and overrides. See local/README for details.
  #include 
}

上記のファイルをapparmor.d/disable directoruにも追加しました

注:この行を追加しました/var/log/mysqld.log rw、もともとそこにはなく、同じ問題があります(apparmorのリロード後)。


apparmor module is loaded.
5 profiles are loaded.
5 profiles are in enforce mode.
   /sbin/dhclient
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/sbin/tcpdump
0 profiles are in complain mode.
1 processes have profiles defined.
1 processes are in enforce mode.
   /sbin/dhclient (565) 
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

Jun  8 20:33:33 vagrant-ubuntu-vivid-64 systemd[1]: Starting MySQL Community Server...
Jun  8 20:33:33 vagrant-ubuntu-vivid-64 mysqld_safe[11231]: 150608 20:33:33 mysqld_safe Logging to '/var/log/mysqld.log'.
Jun  8 20:33:33 vagrant-ubuntu-vivid-64 mysqld_safe[11231]: touch: cannot touch ‘/var/log/mysqld.log’: Permission denied
Jun  8 20:33:33 vagrant-ubuntu-vivid-64 mysqld_safe[11231]: chmod: cannot access ‘/var/log/mysqld.log’: No such file or directory
Jun  8 20:33:33 vagrant-ubuntu-vivid-64 mysqld_safe[11231]: 150608 20:33:33 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Jun  8 20:33:33 vagrant-ubuntu-vivid-64 mysqld_safe[11231]: /usr/bin/mysqld_safe: 126: /usr/bin/mysqld_safe: cannot create /var/log/mysqld.log: Permission denied
8
Ian

ほとんどの人は/var/log内にmysqlという名前のディレクトリを作成し、このフォルダーの所有者をmysqlユーザーに変更しているようです。

Sudo mkdir /var/log/mysql
Sudo chown mysql:mysql /var/log/mysql   

それでうまくいくはずです。必ずサーバーのログの場所を更新して再起動してください。テストしたら、mysqlのapparmorプロファイルを再度有効にします。

12
Seth