MySQL 데이터 파일을 다른 파티션으로 옮기는 방법은 무엇입니까?


27

두 개의 파티션으로 분할 된 하드 드라이브가 있으므로 홈 디렉토리 데이터를 잃지 않고 Ubuntu를 쉽게 다시 설치하고 다른 버전을 시험해 볼 수 있습니다. 다음과 같이 설정됩니다.

20GB  -> /     (root)
180GB -> /home 

많은 개발 작업을 수행하고 있으므로 /var/www폴더가에 연결되어 /home/valorin/workspace있습니다.

그러나 MySQL 데이터 파일 로이 작업을 수행하고 싶습니다. 시스템을 다시 설치할 때마다 전체 SQL 덤프를 수행 한 다음 더 많은 작업을 수행하기 전에 모든 DB를 복원해야한다는 성가심이 생깁니다.

MySQL을 중단하지 않고 가장 좋은 방법은 무엇입니까?

답변:


30

글쎄, 실제로이 질문에 대한 잠재적 우분투 특정 답변이 있습니다.

Gergoes 링크에서 언급했듯이 이것은 기본적으로 /etc/mysql/my.cnf 를 수정 하고 [mysqld] 섹션 에서 datadir = 에 대한 새 값을 설정하는 것 입니다. 지금까지 답변의 불특정 부분.

다소 현대적인 버전의 Ubuntu를 실행한다고 가정하면 기본적으로 AppArmor 가 강제 모드 로 / usr / sbin / mysqld 에 대한 프로필과 함께 설치되어 있을 수 있습니다 . 기본 프로필은 새 datadir을 허용하지 않을 가능성이 높습니다.

새로운 datadir이 / home / data / mysql 이 될 것이라고 가정하자 .

/etc/apparmor.d/usr.sbin.mysqld 파일을 열면 규칙 중 두 줄이 있습니다.

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

위의 예를 가정하면이 두 줄로 대체되거나 (아마도 바람직 할) 보완되어야합니다.

/home/data/mysql/ r,
/home/data/mysql/** rwk,

새로운 datadir을 사용하여 MySQL 서버를 시작하기 전에 새로운 apparmor 프로파일을 명시 적으로 다시로드해야합니다.

$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

Natty (11.4)에서는 작동하지 않는 것 같습니다. 변경된 데이터 디렉토리를 읽으려면 / usr / sbin / mysqld를 사용하여 MySQL을 시작해야했습니다. 그렇지 않으면 이전 데이터 디렉토리를 계속 읽었습니다. 이것은 내 편에 오류가 될 수 있습니다.
3 컵

위의 내용은 Ubuntu 12.04 (Precise)의 문제를 해결하지 못했습니다. "alias / var / lib / mysql /-> / home / data / mysql /"행을 포함하도록 /etc/apparmor.d/tunables/alias 파일을 편집해야한다는 것을 알았습니다. 다른 AppArmor 파일을 변경할 필요가 없었습니다. "/etc/init.d/apparmor restart"로 AppArmor를 다시 시작한 후 "mystart"로 MySQL을 다시 시작한 직후에 작동했습니다.
mak

사용할 새 폴더에 특정 권한을 설정해야한다고 생각합니다. 그들이 무엇인지 아는 사람이 있습니까? mysql 설치가 mysql 사용자를 생성한다는 것을 알고 있습니다. 기본적으로 / var / lib / mysql 폴더의 내용에 액세스 할 수 없습니다.
NullVoxPopuli 2016 년

4

수퍼 유저에게는이 probelm을 해결하는 방법에 대한 단계별 지침이 있습니다.

다음은 동일한 작업을 수행하는 다른 지침입니다. http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

여기에 다시 게시됩니다. 수퍼 유저 인 경우 원본에 대한 투표를하십시오.

권한에 대한 일반적인 혼란 후 문제는 내가 권한과 경로를 가지고 있지 않은 것이 아니라 AppArmor가 mysql이 새 위치를 읽고 쓰지 못하게한다는 것을 깨달았습니다.

이것은 내 솔루션입니다.

먼저 MySQL을 중지하십시오. 따라서 이상한 일이 발생하지 않습니다.

$ sudo stop mysql

그런 다음 모든 데이터베이스 디렉토리를 새 홈으로 이동하십시오.

$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

파일을 이동하지 마십시오. mysql에 의해 생성되며 폴더 (데이터베이스)를 이동하십시오.

그런 다음 mysql이 새 폴더를 사용할 수 있도록 AppArmor에게 정중하게 요청하십시오.

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

라인 추가 :

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

그런 다음 mysql에게 datadir이 이동했음을 알리십시오.

$ sudo vim /etc/mysql/my.cnf 

줄을 바꾸십시오 :

datadir=/var/lib/mysql

에:

datadir=/my-new-db-dir/

참고 : 데이터베이스 설정에 따라 innodb-data-home-dir 등을 변경해야 할 수도 있습니다.

그런 다음 AppArmor를 다시 시작하여 새 설정을 읽으십시오.

$ sudo /etc/init.d/apparmor restart

그리고 새로운 datadir을 사용하여 MySQL을 다시 시작하십시오 :

$ sudo start mysql

이것이 도움이되기를 바랍니다!


0

이것은 실제로 우분투 특정이 아닙니다. 그럼에도 불구하고 여기 도움이 될만한 것이 있습니다 : http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location


내가 일할 수 없었던 부분은 AppArmour 였고 당신의 게시물은 그것을 전달할 때만 설명했기 때문에 지침은 실제로 도움이되지 않았습니다. 또한이 사이트는 우분투 관련 질문에 대한 것입니까? 도움을 구하는 신규 사용자는 우분투에 특정한 것이 무엇인지, 그리고 일반적인 것인지 물어보아야 할 곳을 어떻게 알 수 있습니까?
Stephen RC

웹 사이트를 사용할 수 없습니다.
Hengjie


-1

이것은 그렇게 작동하지 않습니다.

사용자 mysql은 새로운 디렉토리에 쓸 수있는 권리가있다 :

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