MySQL 데이터베이스의 데이터 디렉토리를 마운트 지점으로 사용하는 두 번째 디스크 배열로 이동하려고합니다 /array2/
.
내가 겪고있는 문제는 모든 것을 시도했지만 my.cnf에서 datadir의 위치를 수정 한 후 mysql이 다시 시작되지 않는다는 것입니다.
내가 얻는 것은 :
start: Job failed to start
답변
앱 아머를 잊었습니다.
관심있는 사람은 폴더를 이동하기 위해 다음을 수행했습니다.
mysql 서버를 중지하십시오 :
stop mysql
새 디렉토리를 작성하십시오.
mkdir /array2/mysql
데이터베이스 폴더 만 복사하십시오.
cp -R /var/lib/mysql /array2/mysql
cp -R /var/lib/mysql/users /array2/mysql
my.cnf
파일을 백업 하십시오.
cp /etc/mysql/my.cnf /root/my.cnf.backup
my.cnf
파일을 편집 하십시오.
nano /etc/mysql/my.cnf
이전 datadir 및 소켓에 대한 모든 언급을 새 위치로 변경하십시오.
광산이되었다 :
datadir=/array2/mysql
socket=/array2/mysql/mysql.sock
디렉토리 권한을 업데이트하십시오.
chown -R mysql:mysql /array2/mysql
이전 디렉토리의 이름을 바꾸십시오.
mv /var/lib/mysql /var/lib/mysql-old
다음과 같은 경우에 심볼릭 링크를 만듭니다.
ln -s /array2/mysql /var/lib/mysql
AppArmor에 새 datadir에 대해 알리십시오.
echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias
의류 프로필을 새로 고침
sudo /etc/init.d/apparmor reload
그런 다음 mysql을 시작하십시오.
start mysql
답변
AppArmor가을 (를) 조사하여 범인임을 발견했으며이 프로세스를 수행 syslog
하여 mysql
데이터 위치 를 성공적으로 변경할 수있었습니다 .
아래에서 편집 된 파일에서 시작하는 줄 +
이 추가되고 시작하는 줄 -
은 제거되었습니다. +
이 파일에 줄을 추가 할 때 실제로 부호를 입력 / 붙여 넣어서 는 안됩니다 .
mysql
디렉토리를 새 위치로 복제했습니다 .
sudo rsync -av /var/lib/mysql /new_dir
그런 다음 datadir
줄을 편집 했습니다 /etc/mysql/my.cnf
.
sudo vi /etc/mysql/my.cnf
-datadir = /var/lib/mysql
+datadir = /new_dir/mysql
그런 다음 편집했습니다 /etc/apparmor.d/usr.sbin.mysqld
.
sudo vi /etc/apparmor.d/usr.sbin.mysqld
- /var/lib/mysql/ r,
- /var/lib/mysql/** rwk,
+ /new_dir/mysql/ r,
+ /new_dir/mysql/** rwk,
그런 다음 다시 시작했습니다 mysql
.
답변
알아 두세요
InnoDB 테이블이있는 경우 ibdata*
및 ib_logfile*
파일을 복사해야 합니다. 그렇지 않으면 테이블을 사용할 수 없습니다. 당신은 얻을 것이다 :
‘데이터베이스 이름 .tableName’테이블이 없습니다 ‘
오류.
이 복사 명령을 실행하여 ibdata*
및 ib_logfile*
파일 을 복사 하십시오.
sudo cp -p /var/lib/mysql/ib* /array2/mysql/
답변
방금 다른 방법으로 시도했는데 일부는 유용 할 수 있습니다.
사용 권한이 그대로있는 사본 :
rsync -avzh /var/lib/mysql /path/to/new/place
백업 (문제가 생길 경우) :
mv /var/lib/mysql /var/lib/_mysql
기존 위치 대신 새 빈 디렉토리를 만듭니다.
mkdir /var/lib/mysql
새 위치를 이전 위치에 바인드 마운트하십시오.
mount -B /path/to/new/place /var/lib/mysql
symlinking이 저에게 효과가 없었기 때문에 누군가에게 도움이되기를 바랍니다. 이것이 가장 간단한 방법이었습니다.
답변
datadir을 이동하면 새 datadir 권한을 부여 할 필요가있을뿐 아니라 모든 상위 디렉토리에 권한이 있어야합니다.
나는 datadir을 하드 드라이브로 옮겼으며 우분투에 다음과 같이 마운트되었습니다.
/media/*user*/Data/
내 datadir은 Databases 였습니다 .
각 미디어, 사용자 및 데이터 디렉토리 에 대한 권한을 771로 설정해야했습니다 .
sudo chmod 771 *DIR*
이것이 작동하지 않으면 mysql을 작동시킬 수있는 또 다른 방법은 /etc/mysql/my.cnf의 사용자를 root로 변경하는 것입니다. 보안 관점에서이를 수행하는 데는 몇 가지 문제가있을 것입니다.
답변
나는 bind 옵션과 함께 mount를 사용하는 것을 선호하므로 Apparmor 및 Mysql 구성에서 더 이상 변경되지 않도록합니다.
예를 들면 다음과 같습니다.
에 모든 것을 옮기고 싶다고 가정 해보십시오 /var/www
. 이 디렉토리가 내 개발 환경이며 다른 파티션에 마운트되어 있다고 가정 해 봅시다.
-
먼저 mysql을 중지해야합니다 .
sudo systemctl stop mysql.service
-
파일을 이동한다 (권한 보존)
sudo rsync -av /var/lib/mysql /var/www
/var/www/mysql/
모든 컨텐츠 가 포함 된 디렉토리가 생성 됩니다. -
이전 디렉토리의 모든 것을 제거합니다 :
sudo rm -r /var/lib/mysql/*
-
bind
이전 디렉토리에는 옵션으로 새 디렉토리를 마운트합니다 . 이 줄을
편집/etc/fstab
하고 추가하십시오./var/www/mysql /var/lib/mysql none bind 0 0
이것은
/var/www/mysql
빈 디렉토리에 마운트합니다 . 여기/var/lib/mysql
의bind
옵션은 마술을 수행합니다 .mysql과 apparmor/var/lib/mysql
의 내용으로 채워져/var/www/mysql
아무것도 바뀌지 않은 것처럼됩니다. -
이제 마운트를 수행합니다 :
sudo mount -a
mysql을 다시 시작하십시오.
답변
당신은 당신이 받아 들인 대답에서 그대로 명령을 따르면 실패한다는 것을 알고 있습니까?
cp -R / var / lib / mysql / array2 / mysql
/ var / lib / mysql을 / array2 / mysql / mysql에 복사합니다.
구성 파일을 설정하면 / array2 / mysql / mysql을 디렉토리로 배치하는 것이 좋습니다. 그렇지 않으면 mysqld가 시작되지 않습니다.
더 나은 복사 명령은 다음과 같습니다.
cp -R / var / lib / mysql / array2 / cp -R / var / lib / mysql / users / array2 / mysql
내 2 센트 만 가치가 있습니다.