Nie można uruchomić serwera MySQL, jeśli plik .sock zostanie zmieniony w /etc/mysql/my.cnf

8

Zainstalowałem serwer MySQL 5.5 na Ubuntu 12.04. Próbuję uruchomić serwer MySQL na innym pliku skarpety. Domyślnie MySQL działa na /var/run/mysqld/mysqld.sock.

Próbuję uruchomić ten sam serwer na /var/run/mysqld/mysqld1.sock.

W tym celu wprowadziłem następujące zmiany:

  1. Zmiany w /etc/mysql/my.cnf
[klient]
    port = 3306
    socket = /var/run/mysqld/mysqld1.sock

[mysqld_safe]
    socket = /var/run/mysqld/mysqld1.sock
    ładne = 0

[mysqld]
    użytkownik = mysql
    pid-file = /var/run/mysqld/mysqld.pid
    ** gniazdo = /var/run/mysqld/mysqld1.sock**
    port = 3306
    basedir = / usr
    datadir = / var / lib / mysql
    tmpdir = / tmp
    lc-messages-dir = / usr / share / mysql
  1. Dodałem również następujący wiersz do /etc/apparmor.d/usr/sbin.mysqld

    /var/run/mysqld/mysqld1.sock w,

    /var/run/mysqld/mysqld[1-9].sock w,

  2. Zmieniłem także własność katalogu / var / run / mysqld na użytkownika mysql.

    ls -lA / var / run / | grep mysqld

    drwxrwxrwx 2 mysql mysql 40 grudnia 31 17:24 mysqld

Jednak gdy próbuję uruchomić serwer MySQL, pojawia się następujący błąd (jako użytkownik root)

    $ mysqld --user = mysql --verbose
    121231 18:40:56 [Uwaga] Wtyczka „FEDERATED” jest wyłączona.
    121231 18:40:56 InnoDB: Sterty pamięci InnoDB są wyłączone
    121231 18:40:56 InnoDB: Muteksy i rw_locki używają atomowych wbudowań GCC
    121231 18:40:56 InnoDB: Tabele skompresowane używają zlib 1.2.3.4
    121231 18:40:56 InnoDB: Inicjowanie puli buforów, rozmiar = 128,0 M.
    121231 18:40:56 InnoDB: Zakończono inicjalizację puli buforów
    121231 18:40:56 InnoDB: najwyższy obsługiwany format pliku to Barracuda.
    121231 18:40:57 InnoDB: Oczekiwanie na rozpoczęcie wątków w tle
    121231 18:40:58 Uruchomienie InnoDB: 1.1.8; numer kolejny log 1595685
    121231 18:40:58 [Uwaga] Nazwa hosta serwera (adres powiązania): „127.0.0.1”; port: 3306
    121231 18:40:58 [Uwaga] - „127.0.0.1” zmienia się na „127.0.0.1”;
    121231 18:40:58 [Uwaga] Gniazdo serwera utworzone pod adresem IP: „127.0.0.1”.
   ** `121231 18:40:58 [BŁĄD] Nie można uruchomić serwera: Bind na gnieździe unix: Odmowa uprawnień` **

    121231 18:40:58 [BŁĄD] Czy masz już inny serwer mysqld działający na gnieździe: 
    /var/run/mysqld/mysqld1.sock?
    121231 18:40:58 [BŁĄD] Przerwanie **
    121231 18:40:58 InnoDB: Rozpoczęcie zamykania ...
    121231 18:40:58 InnoDB: Zakończono zamykanie; numer kolejny log 1595685
    121231 18:40:58 [Uwaga] mysqld: Zakończono zamykanie

Jeśli uruchomię serwer z domyślnym plikiem gniazda, będę mógł uruchomić serwer. Zaglądałem na ten temat, ale znalazłem tylko rozwiązania sugerujące, że jest to problem z uprawnieniami. Jednak uprawnienia wydają się w porządku. Niektórzy sugerują, że przyczyną może być AppArmor, ale ja też to sprawdziłem - fragment został wklejony powyżej.

Czy ktoś może podać jakieś wskazówki?

[EDYTOWAĆ]

Widzę następujące dane wyjściowe w /var/log/syslog.

2 stycznia 12:09:34 praveshp-lt mysqld: 130102 12:09:34 [Uwaga] Wtyczka „FEDERATED” jest wyłączona.
2 stycznia 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Sterty pamięci InnoDB są wyłączone
2 stycznia 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Mutexy i rw_locks używają atomowych wbudowań GCC
2 stycznia 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Skompresowane tabele używają zlib 1.2.3.4
2 stycznia 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Inicjalizacja puli buforów, rozmiar = 128.0M
2 stycznia 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Zakończono inicjalizację puli buforów
2 stycznia 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: najwyższy obsługiwany format pliku to Barracuda.
2 stycznia 12:09:35 praveshp-lt mysqld: 130102 12:09:35 InnoDB: Oczekiwanie na rozpoczęcie wątków w tle
2 stycznia 12:09:36 praveshp-lt mysqld: 130102 12:09:36 Uruchomiono InnoDB: 1.1.8; numer kolejny log 1595685
2 stycznia 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Uwaga] Nazwa hosta serwera (adres powiązania): „127.0.0.1”; port: 3307
2 stycznia 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Uwaga] - „127.0.0.1” rozwiązuje się na „127.0.0.1”;
2 stycznia 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Uwaga] Gniazdo serwera utworzone pod adresem IP: „127.0.0.1”.
2 stycznia 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [BŁĄD] Nie można uruchomić serwera: Bind na gnieździe unix: Odmowa uprawnień
2 stycznia 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [BŁĄD] Czy masz już inny serwer mysqld działający na gnieździe: /var/run/mysqld/mysqld1.sock?
2 stycznia 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [BŁĄD] Przerwanie
2 stycznia 12:09:36 praveshp-lt mysqld: 
2 stycznia 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: Rozpoczęcie zamykania ...
2 stycznia 12:09:36 jądro praveshp-lt: [7060.098580] type = 1400 audit (1357108776.036: 33): apparmor = Operacja "DENIED" = "mknod" rodzic = 6702 profil = "/ usr / sbin / mysqld" name = "/run/mysqld/mysqld1.sock" pid = 7039 comm = "mysqld" Request_mask = "c" denied_mask = "c" fsuid = 116 ouid = 116
2 stycznia 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: Zakończono zamykanie; numer kolejny log 1595685
2 stycznia 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Uwaga] / usr / sbin / mysqld: Zakończono zamykanie

Mówi, że odmówiono zgody, jednak wydaje mi się, że ustawiłem odpowiednie uprawnienia.

użytkownik117844
źródło
1. Sprawdź uprawnienia na /usr/local/mysqli /tmp. Potrzeba co najmniej 775. 2. Zezwolenie na katalog bazy danych mysql w /var/lib/folderze powinno być mysql:root ( chown mysql:root mysql)
Rinzwind,
1
Sprawdziłem uprawnienia i wydają się być w porządku.
user117844
sprawdź także /etc/apparmor.d/usr.sbin.mysqldIstnieje porównanie między starą i nową wersją tutaj: bugs.launchpad.net/ubuntu/+source/mysql-5.1/+bug/876268/...
Rinzwind

Odpowiedzi:

5

Patrząc na ten wiersz w następnym wierszu w dzienniku, wydaje się, że Apparmor odmawia dostępu.

Jan  2 12:09:36 praveshp-lt kernel: [ 7060.098580] type=1400 audit(1357108776.036:33):
     apparmor="DENIED" operation="mknod" parent=6702 profile="/usr/sbin/mysqld" 
     name="/run/mysqld/mysqld1.sock" pid=7039 comm="mysqld" requested_mask="c"
     denied_mask="c" fsuid=116 ouid=116

Aby to umożliwić, dodaj plik /etc/apparmor.d/local/usr.sbin.mysqldz poniższym wpisem i uruchom ponownie MySQL.

/var/run/mysqld/mysqld1.sock w,

Dzięki Rinzwindowi za zwrócenie na to uwagi.

użytkownik117844
źródło
Ha! : D Trochę szukałem;)
Rinzwind
Poprawiłem twoją odpowiedź, aby użyć lokalnego katalogu zmian Apparmor. Unikając opcji zarządzania pakietami, jest mniej prawdopodobne, że później się zepsuje podczas aktualizacji.
gertvdijk