unix erlaubt mysql nicht zu schreiben

Der folgende comand läuft ohne Fehlermeldung:
Code:
sudo -u mysql touch fooo
Der MySQL server läuft doch sicher mit der mysql UID?

Dann muss es auch möglich sein in das Verzeichnis wo du das vorige Kommando ausgeführt hast zu schreiben:
Bash:
$ cd /tmp
$ sudo -u mysql touch foo
$ ls -lh
total 0
-rw-r--r-- 1 mysql mysql 0 2010-09-21 16:16 foo
$ mysql -p test_db

mysql> select * from user into outfile '/tmp/bar';
Query OK, 3 rows affected (0.00 sec)
Gruß
 
Hi

das ist ja das merkwürdige.
Wenn ich die folgenden kommandos ausführe klappt das.

Code:
$ cd /tmp
$ sudo -u mysql touch foo
$ ls -lh
-rw-r--r-- 1 mysql mysql 0 2010-09-21 16:16 foo
$ mysql -u -p 
 
mysql> select * from user into outfile '/tmp/bar';
Query OK, 3 rows affected (0.00 sec)
Aber sobald ich in ein anderes Verzeichnis schreiben will sieht das so aus.
Code:
$ cd /home/...
$ sudo -u mysql touch foo
$ ls -lh
-rw-r--r-- 1 mysql mysql 0 2010-09-21 16:16 foo
$ mysql -u -p
 
mysql> select * from user into outfile '/home/.../bar';
ERROR 1 (HY000): Can't create/write to file '/home/.../bar' (Errcode: 13)

Gruß Air
 
Hi.

OK, jetzt hab ich dein Problem verstanden und konnte es auch bei mir nachvollziehen.

Das Problem ist apparmor.

Schau in die /etc/apparmor.d/usr.sbin.mysqld - da sind die Zugriffsrechte gelistet, alles andere wird nicht erlaubt.

Du müßtest also soetwas wie
Code:
/home/.../ w
hinzufügen.

Gruß
 
Hi,

das war genau das was ich gebraucht hab. Es funktioniert, aber bei mysql 5.0 musste man das nicht machen.

Naja für die, die das gleiche Problem haben (es gibt etliche wenn man mal googelt) hier eine kleine Anleitung:

1. Datei öffnen
Code:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
Der Inhalt sieht in etwa so aus:
HTML:
# vim:syntax=apparmor
# Last Modified: Tue Jun 19 17:37:30 2007
#include <tunables/global>

/usr/sbin/mysqld {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/user-tmp>
  #include <abstractions/mysql>
  #include <abstractions/winbind>

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

  network tcp,

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

  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/my.cnf r,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid w,
  /var/run/mysqld/mysqld.sock w,

  /sys/devices/system/cpu/ r,
}
2. In diese Datei einfach den Pfad zu den anderen hinzufügen und dahinter die Rechte definieren
r -> read
w -> write
x ->execute
die Zeile mit komma abschliessen:
HTML:
# vim:syntax=apparmor
# Last Modified: Tue Jun 19 17:37:30 2007
#include <tunables/global>

/usr/sbin/mysqld {
.
.
.
  network tcp,

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

  /den/gewünschten/pfad/eingeben Rechte,
  
  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
.
.
.
}

Viel Spaß damit

Gruß Air
 
Zurück