기본 MySQL 데이터 디렉토리를 다른 경로로 변경할 수 있습니까? 이전 위치에서 데이터베이스에 액세스 할 수 있습니까?
기본 MySQL 데이터 디렉토리를 다른 경로로 변경할 수 있습니까? 이전 위치에서 데이터베이스에 액세스 할 수 있습니까?
답변:
다음 명령을 사용하여 MySQL을 중지하십시오.
sudo /etc/init.d/mysql stop
/var/lib/mysql
다음 명령을 사용하여 기존 데이터 디렉토리 (기본값은에 있음 )를 복사하십시오 .
sudo cp -R -p /var/lib/mysql /newpath
다음 명령으로 MySQL 구성 파일을 편집하십시오.
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
에 대한 항목을 datadir
찾아 경로 /var/lib/mysql
를 새 데이터 디렉토리로 변경하십시오.
터미널에서 다음 명령을 입력하십시오.
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
로 시작하는 줄을 찾으십시오 /var/lib/mysql
. /var/lib/mysql
새로운 경로로 줄을 바꾸십시오 .
파일을 저장하고 닫습니다.
다음 명령으로 AppArmor 프로파일을 다시 시작하십시오.
sudo /etc/init.d/apparmor reload
다음 명령으로 MySQL을 다시 시작하십시오.
sudo /etc/init.d/mysql restart
이제 MySQL에 로그인하면 이전과 동일한 데이터베이스에 액세스 할 수 있습니다.
alias /var/lib/mysql/ -> /newpath/,
빠르고 쉬운 작업 :
# Create new directory for MySQL data
mkdir /new/dir/for/mysql
# Set ownership of new directory to match existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql
# Set permissions on new directory to match existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql
# Stop MySQL before copying over files
service mysql stop
# Copy all files in default directory, to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/
/etc/my.cnf
파일을 편집 하고 아래 [mysqld]
줄을 추가하십시오.
datadir=/new/dir/for/mysql/
CageFS (CloudLinux 유무에 관계없이)를 사용하고 있고 MySQL 디렉토리를 변경하려는 경우이 파일에 새 디렉토리를 추가해야합니다.
/etc/cagefs/cagefs.mp
그런 다음이 명령을 실행하십시오.
cagefsctl --remount-all
현재 데이터를 새 디렉토리에 복사하고 my.cnf
MySQL 을 변경해야 합니다.
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
서버가 실행되고 있지 않을 때는 데이터베이스를 복사해야합니다 .
ln -s
정적 기호 스라소니를 사용하면 그렇지 않습니다.
my.cnf
먼저 mysql 서버를 중지해야합니다. 예 :
# /etc/init.d/mysql stop
그런 다음 이전 데이터 디렉토리 (예 : / var / lib / mysql)를 복사해야합니다. 다음을 통해 새 디렉토리에 대한 권한
# cp -R -p /var/lib/mysql /new/data/dir
이제 /etc/mysql/my.cnf
새로운 데이터를 변경 하고 서버를 다시 시작할 수 있습니다
# /etc/init.d/mysql restart
나처럼 데비안에 있고 mysql 디렉토리를 집이나 / home / ...의 경로로 옮기고 싶다면 해결책은 다음과 같습니다.
어느 날 mariadb 설명서에서 해결책을 찾으십시오. 이것이 어떤 사람들을 돕기를 바랍니다!
컴퓨터에 데이터베이스를 유지하고 싶지만 외장 하드 드라이브에 데이터가 있고 두 장치를 사용하여 전환했습니다.
Mac에 있고 Homebrew를 사용하여 MySQL을 설치 한 경우이 방법이 효과적입니다. 그렇지 않으면 datadir
머신 에서 MySQL의 적절한 위치를 대체하기 만하면됩니다 .
#cd to my data dir location
cd /usr/local/var/
#copy contents of local data directory to the new location
cp -r mysql/ /Volumes/myhd/mydatadir/
#temporarily move the old datadir
mv mysql mysql.local
#symlink to the new location
ln -s /Volumes/myhd/mydatadir mysql
그런 다음 다시 전환하려면 다음을 수행하십시오.
mv mysql mysql.remote
mv mysql.local mysql
로컬 데이터베이스를 다시 사용하고 있습니다. 희망이 도움이됩니다.
먼저 mysqld를 중지
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
그런 다음 /etc/mysql/my.cnf
Start mysqld 에서 datadir을 변경 하십시오.
참고 :
# 1 : SELinux 설정을 조정해야 할 수도 있습니다 (문제가 발생할 경우 SELinux를 비활성화 한 상태로 시도). Apparmor (우분투)도 문제가 될 수 있습니다.
# 2 : MySQL 설치 DB 참조 참조
먼저 mysql을 중지하십시오
sudo service mysql stop
mysql 데이터를 새 위치로 복사하십시오.
sudo cp -rp /var/lib/mysql /yourdirectory/
apparmor를 사용하는 경우 다음 파일을 편집하고 다음을 수행하십시오.
sudo vim /etc/apparmor.d/usr.sbin.mysqld
/ your / your /로 / var / lib /를 대체 한 후 파일에없는 경우 다음을 추가하십시오.
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
명령을 사용하여 파일을 저장하십시오.
:wq
my.cnf 파일을 편집하십시오
sudo vim /etc/mysql/my.cnf
/ your / your 디렉토리 /로 / var / lib /를 바꾸고 다음 명령으로 저장하십시오
:wq
마지막으로 mysql을 시작하십시오
sudo service mysql start
@ raid0, 최적화 ici 에 대해 더 알아보기
이 솔루션은 Workbench를 사용하여 Windows 7에서 작동합니다. 이를 위해서는 관리자 권한이 필요합니다. 데이터를 실제로 저장하려는 위치에 대한 바로 가기와 같은 접점을 만듭니다.
워크 벤치를 열고 인스턴스-시작 / 종료 서버를 선택하십시오.
https://bitsum.com/junctionmaster.php 에서 정션 마스터 설치
C : \ ProgramData \ MySQL \ MySQL Server 5.6으로 이동하십시오.
데이터를 마우스 오른쪽 단추로 클릭하고 "이동 후 링크 폴더를 ..."로 선택하십시오. 경고 지점 대상을 "따옴표없이 새 데이터 디렉토리"로 이동하십시오. 이동 및 링크를 클릭하십시오.
이제 "따옴표없이 새 데이터 디렉토리"로 이동하십시오.
데이터를 마우스 오른쪽 버튼으로 클릭 보안 탭으로 이동 편집 클릭 유형 추가 네트워크 서비스를 클릭 한 다음 이름 확인 확인을 클릭하고 모든 권한 허용 확인란을 클릭 한 다음 확인
워크 벤치로 돌아가서 서버 시작
이 방법은 Windows 7 Enterprise에서 MySQL Workbench 6.2를 사용하여 나에게 효과적이었습니다.
Windows 사용자이고 모든 답변이 Linux 사용자를위한 것임을 알기 위해 여기에 착륙 한 경우 실망하지 마십시오! 내가했던 방식대로 시간을 낭비하지 않겠습니다.
해결책 전에 약간의 헛소리 이야기 :
MySQL은 Data 디렉토리를 사용하여 생성 한 다른 데이터베이스의 데이터를 저장합니다. 결국, 데이터베이스 클래스에서 배운 데이터베이스 약속이 그대로 유지되도록 응용 프로그램 및 파일 형식으로 약간의 저글링을 추가하여 파일 형식으로 파일을 저장해야합니다.
이제 미래에 만들 수있는 큰 데이터베이스를 저장할 공간이 충분한 지 확인하고 싶었습니다. 더 많은 공간을 가진 다른 드라이브에 넣고 싶습니다.
따라서 다음을 수행하십시오.
1 단계 : MySQL 서비스 중지
Window Key + R - will open Run
servies.msc - will open services manager
Locate MySQL80 (80 is for version 8.0, look for the one you've).
Stop it. (Right click, Stop)
2 단계 : 현재 데이터 디렉토리 찾기
Goto C:\ProgramData\MySQL\MySQL Server 8.0
기본적으로 여기에 이름이 지정된 폴더가 있어야합니다. Data
는 MySQL에서 기본 설정으로 사용되는 이며 다른 더 나은 위치를 찾지 못하면 제공됩니다.
my.ini
파일을 찾으십시오 .
편집기에서 엽니 다 (메모장 ++).
datadir
파일에서 찾으려면 CTRL + F를 수행하십시오.
여기에 언급 된 것은 데이터 디렉토리를 위해 MySQL에서 현재 사용중인 실제 위치입니다. 이것이 당신이 바꾸고 싶은 것입니다.
3 단계 : 새 데이터 디렉토리로 바꾸십시오.
새 데이터 디렉토리가 W : __ MySQL_Data가되고 싶다고 가정 해 봅시다. 파일 의 datadir
값 my.ini
을이 값으로 변경합시다
. 기억할 필요가 없도록 이전 값을 주석 처리하십시오.
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
이제 xcopy
기본값 datadir
을 로 복사하십시오 W:\
. 명령 프롬프트 실행 (Window + R, cmd, Enter)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X
복사 한 폴더의 이름을 변경 한 새 datadir
값으로 바꿉니다 . 여기:W:/__MySQL_Data
왜 간단하게 복사하지 않습니까? COOL!이 아니기 때문에 복사 한 폴더에 대한 권한을 잃지 않도록 도와 주므로 다시 시작할 때 MySQL80
"로컬 컴퓨터의 MySQL80 서비스가 시작되었다가 중지되었습니다. 일부 서비스는 자동으로 중지됩니다. 다른 서비스 나 프로그램에서 사용하고 있지 않습니다. " -의례 : Microsoft
4 단계 : 서비스 다시 시작
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
5 단계 : 완료! 이제 일하러 돌아와!
컴퓨터를 업그레이드 할 때 상자에서 상자로 이동할 때 종종이 작업을 수행해야합니다. / var / lib / mysql을 더 나은 위치로 옮기는 것 외에도 오래된 MySQL 설치에서 오래된 DB 테이블을 복원해야하는 경우가 종종 있습니다. 이렇게하려면 ...
MySQL /home
은 다른 물리적 디스크에서 매핑 되었기 때문에 디렉토리 로 이동 해야했습니다. my.cnf에서 디렉토리를 변경하는 대신 라이브를보다 간단하게하기 위해 새 디렉토리 /home/mysql
를 원래 디렉토리 대신 매핑했습니다 /var/lib/mysql
. 그것은 우리에게 매력처럼 작동합니다 (CentOS 7.1에서 테스트).
새 디렉토리를 작성하고 올바른 권한을 설정하십시오.
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
실행중인 경우 MySQL을 중지하십시오.
systemctl stop mysql
데이터 디렉토리를 이동하십시오.
mv -f /var/lib/mysql/* /home/mysql
영구 마운트를 작성하고 실행하십시오.
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
서버를 다시 시작하십시오.
systemctl start mysql
프로그래밍 방식으로 (gedit로 수동 텍스트 입력하지 않고) 위의 user1341296의 답변을 기반으로 한 Dockerfile 버전이 있습니다.
FROM spittet/ruby-mysql
MAINTAINER you@gmail.com
RUN cp -R -p /var/lib/mysql /dev/shm && \
rm -rf /var/lib/mysql && \
sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g' /etc/mysql/my.cnf && \
/etc/init.d/mysql restart
Docker 허브에서 사용할 수 있습니다 : https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
먼저 설정 파일이 어디에 있는지 알아야합니다. 설정 파일은 어디에 있습니까?
apt-get 또는 yum install로 설치 한 경우。
구성 파일이 나타날 수 있습니다
/etc/mysql/my.cnf
데이터 파일이 나타날 수 있습니다
/ var / lib / mysql
그리고 당신이해야 할 일은
그런 다음 작업이 완료되었습니다.
그러나 apt 또는 yum으로 설치하지 않으면 direcotry가 이것을 좋아하지 않을 수 있으며 mysql 파일을 찾을 수 있습니다.
어디 mysql
SuSE 13.1에서는 mysql 데이터 디렉토리를 다른 곳 (예 : / home / example_user /)으로 옮기고보다 유익한 이름을 지정하는 것이 좋습니다.
/ var / lib /에서 :
# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql
나는 mysql을 다시 시작했다.
# systemctl restart mysql.service
그러나 그조차도 필요하지 않은 것으로 의심됩니다.
환경 중 하나에 대해 mysql 데이터 디렉토리를 새 위치로 변경했지만 mysql 서버를 다시 시작하는 동안 시간이 걸렸습니다. 그래서 포트를 확인하고 다른 프로세스가 mysql 포트에서 수신하고 있음을 발견했습니다. 그래서 프로세스를 종료하고 mysql 서버를 다시 시작했는데 제대로 작동했습니다.
나는 훌륭하게 작동하는 데이터 디렉토리를 변경하기 위해 아래 단계를 따랐다. 리눅스에서 mysql 데이터 디렉토리 변경
위의 단계는 기초와 기본입니다. 나는 그들을 따라 여전히 "mysql을 시작하지 못했습니다"라는 오류가 발생했습니다.
새 폴더에 mysql 데이터를 저장하려면 해당 폴더에 mysql : mysql 권한과 소유권이 있는지 확인해야합니다.
이 외에도 / data / mysql /과 같은 경우 mysql의 상위 디렉토리에 대한 권한과 소유권을 확인해야합니다. 여기서 / data / 디렉토리는 root : root 여야합니다. / mysql의 상위 디렉토리 소유권을 변경 한 후 "mysql을 시작하지 못했습니다"오류를 수정했습니다. 내 VM의 OS는 RHEL 7.6입니다.
SE Linux를 사용하는 경우 / etc / selinux / config를 편집하고 SELINUX = enforce를 SELINUX = permissive로 변경하여 허용 모드로 설정하십시오.
datadir
재산