/var/lib/mysql/user.lower-test 파일을 만들 수 없습니다


12

MySQL 데이터베이스는 몇 달 동안 문제가 없었습니다. 오늘 Synaptic Package Manager를 사용하여 업그레이드 가능한 패키지를 확인했을 때 다양한 MySQL 구성 요소 (-common, -client, -server 등)가 나타났습니다. 따라서 5.6.25-1-ubuntu2.0으로 업그레이드하기로 결정했습니다 (설치 된 버전을 기록하지 않았지만 5.6.21이라고 생각했습니다).

Error occured: Can't connect to MySQL server on '127.0.0.1' (111)

그런 다음 서버가 실행되고 있지 않다는 것을 알았습니다. 로그 파일에서 나는 다음 메시지를 좋아한다.

Can't create file /var/lib/mysql/user.lower-test

온라인에서 한 시간 정도 검색을했는데 이전에 문제가보고되었지만 '업데이트 후'문제와 관련하여 다음 단계를 확신 할 수 없었습니다.

답변:


6

이 문제는 권한 문제이거나 mysql 데이터 디렉토리를 다른 위치 / var / lib / mysql로 ​​변경하는 것으로 보입니다.

sudo로 실행 해보십시오

/ var / lib / mysql이 mysql 사용자가 소유하고 그룹이 mysql로 ​​설정된 것처럼 보입니다.

$ sudo chown -R mysql /var/lib/mysql
$ sudo chgrp -R mysql /var/lib/mysql
$ sudo chmod 755 /var/lib/mysql

/ var / lib / mysql 디렉토리가 실제로 존재하며 데이터 디렉토리에 해당하는지 확인 했습니까? 그렇지 않은 경우 mysqld 섹션에서 datadir 매개 변수를 지정해야합니다.

[mysqld]
datadir=/var/lib/mysql

그런 다음 MySQL이 새 데이터 디렉토리와 하위 디렉토리를 읽고 \ 실행하고 \ 수정할 수 있도록 apparmor를 구성하도록 선택할 수 있습니다. 다음을 수행하려면 루트 여야합니다.

/etc/init.d/apparmor stop
/etc/init.d/apparmor teardown
update-rc.d -f apparmor remove
apt-get purge apparmor
reboot

나는이 모든 것을 겪었지만 아무 소용이 없었다. 백업이 있으면 다시 설치하기로 결정하고 모든 문제가 발생했습니다. 그러나 문제는 리눅스인가 아니면 MySQL인가?
MichaelJohn

@MichaelJohn은 아무 말도 할 수 없습니다. 그것은 apparmor 또는 mysql 패키지 손상일 수 있습니다
Hitesh Mundra

Ubuntu Xenial : apparmor은 설치시 자동으로 설치되고 활성화됩니다 mysql-server-5.6. 이전에 비활성화 한 경우에도 마찬가지입니다. apparmor의 종속성이므로 패키지를 제거 할 수 없습니다 mysql-server-5.6. 당신은 수행하여 "파일을 만들 수 없습니다 /var/lib/mysql/user.lower-test"오류를 해결할 수 있습니다service apparmor stop; service apparmor teardown; update-rc.d -f apparmor remove
MageHost - 제론 Vermeulen에게

6

MySQL의 여러 인스턴스를 실행하려고 할 때이 문제가 발생했지만 apparmor를 제거하는 대신 usr.sbin.mysqld 파일을 업데이트했습니다.

vim /etc/apparmor.d/usr.sbin.mysqld

예를 들어, 이것은 내 파일 모양이며 쓰기 권한이 필요한 폴더를 추가하면 모든 것이 제대로 작동합니다.

/usr/sbin/mysqld {

  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/*.cnf r,
  /usr/lib/mysql/plugin/ r,
  /usr/lib/mysql/plugin/*.so* mr,
  /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/lib/mysql1/ r,
  /var/lib/mysql1/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid rw,
  /var/run/mysqld/mysqld.sock w,
  /var/run/mysqld/mysqld1.pid rw,
  /var/run/mysqld/mysqld1.sock w,
  /run/mysqld/mysqld.pid rw,
  /run/mysqld/mysqld.sock w,

  /sys/devices/system/cpu/ r,

}

1
이것은 나에게도 효과가있었습니다. 이 작업을 수행하려면 서버를 다시 시작해야했습니다. AppArmour를 중지했다가 다시 시작해도 작동하지 않았습니다.
MikeHoss

3

/ var / lib / mysql을 다른 디스크로 옮기고 원래 디렉토리를 symlink로 바꾸려고 할 때 문제가 발생했습니다.

Apparmor는이 구성에서 액세스를 거부합니다.

이것이 Apparmor 개발자들에 의해 버그가 아닌 것으로 간주되는 이유. 임시 해결책은 바인드 마운트를 사용하는 것입니다. 보다

설명을 위해.

그래서

mount --bind /newmysqldatadir /var/lib/mysql
service mysql start

나를 위해 문제를 해결했습니다.


1

나는 비슷한 문제가 있었다. 컴퓨터에 Ubuntu Server를 다시 설치하고 하드 드라이브에서 / etc /의 전체 백업을 만들었습니다. 다시 설치 한 후 모든 중요한 파일을 / drive / etc /에서 내 시스템 / etc로 복사했습니다.

이를 수행하는 동안 usr.sbin.mysqld.bak라는 usr.sbin.mysqld 파일에 대한 bak을 작성하여 동일한 /etc/apparmor.d/ 디렉토리에 보관했습니다.

추가 검색 시이 블로그 게시물을 찾았습니다 : https://blogs.oracle.com/jsmyth/apparmor-and-mysql

apparmor-utils를 설치하고 / usr / sbin / mysqld에서 aa-complain을 시도했지만 2 개의 apparmor 구성이 정의되어 있다고 말했습니다 (내 파일 모두).

나는 당신이 직면하고있는 문제가 아닐 수도 있지만, 명확성을 위해, 멍청하지 말고 app sbin 디렉토리의 동일한 디렉토리에 백업 파일을 만듭니다.


0

또한 파티션이 가득 차지 않았는지 확인하십시오.

알 수없는 이유로 데이터를 다른 파티션으로 이동해도 작동하지 않았습니다.

따라서 빠른 수정을 위해 llvm을 망치거나 gparted 대신에 내 /swapfile크기를 줄였습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.