8.11.3.1 심볼릭 링크 사용
- 8.11.3.1.1 Unix에서 데이터베이스에 대한 심볼릭 링크 사용
- 8.11.3.1.2 Unix 기반 MyISAM에 대한 심볼릭 링크 사용
- 8.11.3.1.3 Windows에서 데이터베이스에 대한 심볼릭 링크 사용
데이터베이스와 테이블을 데이터베이스 디렉토리에서 다른 장소로 이동하여 그들을 새로운 위치로 심볼릭 링크로 대체 할 수 있습니다. 이렇게하고 싶다고 생각할 수있는 것은, 예를 들어, 데이터베이스를 더 많은 여유 공간 파일 시스템으로 이동하거나 테이블을 다른 디스크에 분산시켜 시스템의 속도를 높일 경우입니다.
InnoDB
테이블의 경우 섹션 14.5.4 "테이블 공간의 위치 지정" 에 설명 된대로 심볼릭 링크 대신 CREATE TABLE
문에서 DATA DIRECTORY
절을 사용합니다. 이 새로운 기능은 지원되는 크로스 플랫폼 기술입니다.
이렇게하려면 권장되는 방법은 데이터베이스 디렉토리 전체 다른 디스크에 대한 심볼릭 링크를 만드는 것입니다. MyISAM
테이블의 심볼 링크 생성은 최후의 수단으로합니다.
데이터 디렉토리의 위치를 확인하려면 다음 문을 사용합니다.
SHOW VARIABLES LIKE 'datadir';
8.11.3.1.1 Unix에서 데이터베이스에 대한 심볼릭 링크 사용
Unix에서 데이터베이스의 심볼릭 링크를 만드는 방법은 먼저 공간이있는 디스크에 디렉토리를 작성하고 MySQL 데이터 디렉토리에서 그것에 대한 소프트 링크를 작성하는 것입니다.
shell>mkdir /dr1/databases/test
shell>ln -s /dr1/databases/test
/path/to/datadir
MySQL은 하나의 디렉토리에서 여러 데이터베이스 연결을 지원하지 않습니다. 데이터베이스 디렉토리와 심볼릭 링크의 대체 데이터베이스간에 심볼릭 링크를 생성하지 않는 한 작동합니다. MySQL 데이터 디렉토리에 데이터베이스 db1
가 있고 db1
을 가리키는 기호 링크 db2
를 만들려고합니다.
shell>cd
shell>/path/to/datadir
ln -s db1 db2
그 결과, db1
의 모든 테이블 tbl_a
은 db2
에도 테이블 tbl_a
로 표시됩니다. 클라이언트가 db1.tbl_a
를 업데이트하고 다른 클라이언트가 db2.tbl_a
를 업데이트하면 문제가 발생할 수 있습니다.
8.11.3.1.2 Unix 기반 MyISAM에 대한 심볼릭 링크 사용
심볼릭 링크는 MyISAM
테이블에서만 완벽하게 지원되고 있습니다. 다른 스토리지 엔진의 테이블에서 사용되는 파일의 경우 심볼릭 링크를 사용하려고하면 알 수없는 문제가 발생할 수 있습니다. InnoDB
테이블의 경우에는 대신 섹션 14.5.4 "테이블 공간의 위치 지정" 에 설명하는 대체 기술을 사용합니다.
완벽하게 작동하는 realpath()
호출이없는 시스템에서는 테이블의 심볼릭 링크를 작성하지 마십시오. (Linux 및 Solaris에서는 realpath()
를 지원하고 있습니다). 시스템에서 심볼릭 링크를 지원하는지 여부를 확인하려면 다음 문을 사용하여 have_symlink
시스템 변수의 값을 확인합니다.
SHOW VARIABLES LIKE 'have_symlink';
MyISAM
테이블의 기호 연결의 처리는 다음과 같이 작동합니다.
데이터 디렉토리에는 항상 테이블 형식 (
.frm
) 파일 데이터 (.MYD
) 파일 및 인덱스 (.MYI
) 파일이 있습니다. 데이터 파일과 인덱스 파일은 다른 위치로 이동하고 데이터 디렉토리에서 심볼릭 링크로 대체 할 수 있습니다. 서식 파일은 없습니다.데이터 파일과 인덱스 파일은 독립적으로 별도의 디렉토리에 대한 심볼릭 링크를 만들 수 있습니다.
실행중인 MySQL 서버에 심볼릭 링크 생성을 실행하도록 지시하려면,
CREATE TABLE
에DATA DIRECTORY
및INDEX DIRECTORY
옵션을 사용합니다. 섹션 13.1.17 "CREATE TABLE 구문" 을 참조하십시오. 또는 mysqld가 실행되고 있지 않은 경우 명령 줄에서 ln -s를 사용하여 심볼릭 링크 만들기를 수동으로 실행할 수 있습니다.참고DATA DIRECTORY
및INDEX DIRECTORY
옵션 중 하나 또는 모두에 사용되는 경로는 MySQLdata
디렉토리를 포함 할 수 없습니다. (Bug # 32167)myisamchk가 심볼릭 링크를 데이터 파일과 인덱스 파일을 대체하지 않습니다. 그것은 심볼릭 링크가 가리키는 파일에 직접 작용합니다. 임시 파일은 모든 데이터 파일과 인덱스 파일이 위치하고있는 디렉토리에 생성됩니다. 같은 수
ALTER TABLE
,OPTIMIZE TABLE
및REPAIR TABLE
문에 적용됩니다.- 참고
심볼릭 링크를 사용하여 테이블을 삭제하면 심볼릭 링크와 심볼릭 링크가 가리키는 파일이 모두 삭제됩니다. 이것은 시스템
root
로 mysqld를 실행하거나 시스템 사용자에 MySQL 데이터베이스 디렉토리에 쓰기 권한을 허용하거나하지 않는 매우 정당한 이유입니다. ALTER TABLE ... RENAME
또는RENAME TABLE
을 사용하여 테이블의 이름을 변경하고 테이블을 다른 데이터베이스로 이동하지 않는 경우, 데이터베이스 디렉토리의 심볼릭 링크 이름을 새 이름으로 변경되어 데이터 파일과 인덱스 파일도 그에 따라 이름이 변경됩니다.ALTER TABLE ... RENAME
또는RENAME TABLE
을 사용하여 테이블을 다른 데이터베이스로 이동하면 테이블이 다른 데이터베이스 디렉토리로 이동됩니다. 테이블 이름이 변경된 경우 새 데이터베이스 디렉토리의 심볼릭 링크 이름을 새 이름으로 변경되어 데이터 파일과 인덱스 파일도 그에 따라 이름이 변경됩니다.심볼릭 링크를 사용하지 않는 경우,
--skip-symbolic-links
옵션을 mysqld를 시작하고 아무도 mysqld를 사용하여 데이터 디렉토리 밖에있는 파일을 삭제하거나 이름을 변경할 수 없도록 합니다.
이 테이블 심볼릭 링크 작업이 지원되지 않습니다.
ALTER TABLE
은DATA DIRECTORY
및INDEX DIRECTORY
테이블 옵션을 무시합니다.앞에서 언급 한 바와 같이, 데이터 파일과 인덱스 파일에만 심볼릭 링크 할 수 있습니다.
.frm
파일은 심볼릭 링크 할 수 없습니다. 이를 실행하려고하면 (예를 들어, 하나의 테이블 이름을 다른 테이블의 동의어 등) 잘못된 결과가 생성됩니다. MySQL 데이터 디렉토리에 데이터베이스db1
이 데이터베이스에 테이블tbl1
이 있고db1
디렉토리에tbl1
을 가리키는 기호 링크tbl2
를 만들려고합니다.shell>
cd
shell>/path/to/datadir
/db1ln -s tbl1.frm tbl2.frm
shell>ln -s tbl1.MYD tbl2.MYD
shell>ln -s tbl1.MYI tbl2.MYI
스레드가
db1.tbl1
을 읽고 다른 스레드에서db1.tbl2
를 업데이트하면 문제가 발생합니다.쿼리 캐시가 "속았다합니다"(
tbl1
이 업데이트되지 않았 음을 알 방법이 없기 때문에 오래되어 결과를 반환합니다).tbl2
에 대한ALTER
문이 실패합니다.
8.11.3.1.3 Windows에서 데이터베이스에 대한 심볼릭 링크 사용
Windows에서는 데이터베이스 디렉토리에 심볼릭 링크를 사용할 수 있습니다. 이는 데이터베이스 디렉토리에 대한 심볼릭 링크를 설정하여 그것을 다른 장소 (다른 디스크 등)에 넣을 수 있습니다. Windows에서 데이터베이스 심볼릭 링크의 사용은 Unix에서 그 사용과 비슷하지만, 링크 설정 절차는 다릅니다.
mydb
라는 데이터베이스의 데이터베이스 디렉토리를 D:\data\mydb
에 배치하고자합니다. 이렇게하려면 MySQL 데이터 디렉토리에 D:\data\mydb
를 가리키는 기호 링크를 작성합니다. 그러나 심볼릭 링크를 생성하기 전에 필요한 경우 D:\data\mydb
디렉토리를 만들고 그것이 존재하는지 확인합니다. 데이터 디렉토리에 mydb
라는 데이터베이스 디렉토리가 이미있는 경우는 그것을 D:\data
로 이동합니다. 그렇지 않으면 심볼릭 링크는 비활성화됩니다. 문제를 피하기 위해 데이터베이스 디렉토리를 이동할 때 서버가 실행되고 있지 않은지 확인하십시오.
데이터베이스 심볼릭 링크를 생성하는 절차는 Windows 버전에 따라 다릅니다.
Windows Vista, Windows Server 2008 이후에는 네이티브 심볼릭 링크 지원이 있기 때문에 mklink 명령을 사용하여 심볼릭 링크를 만들 수 있습니다. 이 명령에는 관리자 권한이 필요합니다.
위치를 데이터 디렉토리로 변경합니다.
C : \>
cd
\path\to\datadir
데이터 디렉토리에서 데이터베이스 디렉토리의 위치를 가리키는
mydb
라는 심볼릭 링크를 만듭니다.C : \>
mklink /d mydb D:\data\mydb
이후 데이터베이스 mydb
에 작성되는 모든 테이블이 D:\data\mydb
에 작성됩니다.
또는 MySQL에서 지원되는 모든 버전의 Windows에서 데이터 디렉토리에 대상 디렉터리 경로를 저장하는 .sym
파일을 작성하여 MySQL 데이터베이스에 대한 심볼릭 링크를 만들 수 있습니다. 파일은
라는합니다. 여기서 db_name
.symdb_name
은 데이터베이스 이름입니다.
Windows에서 .sym
파일을 사용하여 데이터베이스 심볼릭 링크 지원은 기본적으로 활성화되어 있습니다. .sym
파일 심볼릭 링크가 필요하지 않은 경우, --skip-symbolic-links
옵션으로 mysqld를 시작하고 그 지원을 비활성화 할 수 있습니다. 시스템에서 .sym
파일 심볼릭 링크를 지원하는지 여부를 확인하려면 다음 문을 사용하여 have_symlink
시스템 변수의 값을 확인합니다.
SHOW VARIABLES LIKE 'have_symlink';
.sym
파일 심볼릭 링크를 만들려면 다음 단계를 사용합니다.
위치를 데이터 디렉토리로 변경합니다.
C : \>
cd
\path\to\datadir
데이터 디렉토리에 경로
D:\data\mydb\
를 포함mydb.sym
라는 텍스트 파일을 만듭니다.참고새로운 데이터베이스와 테이블의 경로는 절대 경로로합니다. 상대 경로를 지정하는 경우, 위치는
mydb.sym
파일에 상대적입니다.
이후 데이터베이스 mydb
에 작성되는 모든 테이블이 D:\data\mydb
에 작성됩니다.
.sym
파일 지원은 mklink를 사용하여 사용 가능한 기본 심볼릭 링크 지원과 중복 때문에 .sym
파일의 사용은 MySQL 5.6.9 현재 비추천되어 그 지원은 미래의 MySQL 릴리스에서 제거됩니다.
Windows에서 데이터베이스 심볼릭 링크에 .sym
파일의 사용에는 다음과 같은 제한이 적용됩니다. 이러한 제한은 mklink를 사용하여 작성할 심볼릭 링크에 적용되지 않습니다.
MySQL 데이터 디렉토리에 데이터베이스와 동일한 이름의 디렉토리가 존재하는 경우, 심볼릭 링크는 사용되지 않습니다.
--innodb_file_per_table
옵션을 사용할 수 없습니다.mysqld를 서비스로 실행하는 경우 원격 서버에 매핑 된 드라이브를 심볼릭 링크의 대상으로 사용할 수 없습니다. 해결 방법으로 전체 경로 (
\\servername\path\
)를 사용할 수 있습니다.