Loading...
MySQL 9.5 Reference Manual 9.5의 2.9.1 Initializing the Data Directory의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Initializing the Data Directory
MySQL이 설치된 후에는, mysql 시스템
스키마의 테이블을 포함하여 데이터 디렉터리를 초기화해야 합니다:
일부 MySQL 설치 방법의 경우, Section 2.9, “Postinstallation Setup and Testing”에 설명된 대로 데이터 디렉터리 초기화가 자동으로 수행됩니다.
다른 설치 방법의 경우에는 데이터 디렉터리를 수동으로 초기화해야 합니다. 여기에는 Unix 및 Unix 계열 시스템에서의 일반 바이너리 및 소스 배포판에서의 설치와, Windows에서 ZIP Archive 패키지로부터의 설치가 포함됩니다.
이 절에서는 데이터 디렉터리 초기화가 자동이 아닌 MySQL 설치 방법에 대해 데이터 디렉터리를 수동으로 초기화하는 방법을 설명합니다. 서버에 접근 가능하고 제대로 동작하는지 테스트할 수 있는 몇 가지 명령에 대해서는 Section 2.9.3, “Testing the Server”를 참조하십시오.
참고
기본 인증 플러그인은
caching_sha2_password이며,
'root'@'localhost' 관리 계정은
기본적으로 caching_sha2_password를 사용합니다.
여기 나오는 예제에서 서버는 mysql 로그인 계정의
사용자 ID로 실행될 예정입니다.
계정이 존재하지 않으면 생성하거나(참조:
Create a mysql User and Group),
서버 실행에 사용할 다른 기존 로그인 계정 이름으로
대체하십시오.
/usr/local/mysql입니다
(필요하다면 시스템에 맞게 경로 이름을 조정하십시오):1cd /usr/local/mysql
이 디렉터리 안에는 서버뿐 아니라 클라이언트 및
유틸리티 프로그램이 들어 있는 bin 서브디렉터리를
포함하여 여러 파일 및 서브디렉터리가 있습니다.
secure_file_priv 시스템
변수는 임포트 및 익스포트 작업을 특정 디렉터리로 제한합니다.
해당 변수값으로 지정할 수 있는 위치에 디렉터리를 생성합니다:1mkdir mysql-files
디렉터리의 사용자 및 그룹 소유권을
mysql 사용자 및 mysql
그룹에 부여하고, 디렉터리 퍼미션을 적절히 설정합니다:
1chown mysql:mysql mysql-files 2chmod 750 mysql-files
mysql
스키마가 포함됩니다. 예를 들면:1bin/mysqld --initialize --user=mysql
특히 사용할 수 있는 커맨드 옵션에 관한 중요한 정보는 Data Directory Initialization Procedure를 참조하십시오. 서버가 초기화를 수행하는 방법에 대한 자세한 내용은 Server Actions During Data Directory Initialization를 참조하십시오.
일반적으로 데이터 디렉터리 초기화는 MySQL을 처음 설치한 후에만 수행하면 됩니다. (기존 설치를 업그레이드하는 경우에는 업그레이드 절차를 대신 수행하십시오. 참조: Chapter 3, Upgrading MySQL.)
그러나 데이터 디렉터리를 초기화하는 커맨드는 기존
mysql 스키마 테이블을 덮어쓰지 않으므로,
어떤 상황에서도 실행해도 안전합니다.
옵션 파일이 없으면 서버는 기본 설정으로
시작합니다. (참조:
Section 7.1.2, “Server Configuration Defaults”.)
MySQL 서버가 시작 시 사용할 옵션을 명시적으로 지정하려면,
/etc/my.cnf 또는
/etc/mysql/my.cnf 같은 옵션 파일에
옵션을 넣습니다. (참조:
Section 6.2.2.2, “Using Option Files”.)
예를 들어 옵션 파일을 사용하여
secure_file_priv 시스템
변수를 설정할 수 있습니다.
시스템 부팅 시 수동 개입 없이 MySQL이 자동으로 시작되도록 설정하려면, Section 2.9.5, “Starting and Stopping MySQL Automatically”를 참조하십시오.
데이터 디렉터리 초기화는 mysql 스키마에
타임존 테이블을 생성하지만, 해당 테이블을
채우지는 않습니다. 이를 위해서는
Section 7.1.15, “MySQL Server Time Zone Support”의
지침을 따르십시오.
MySQL 설치의 최상위 디렉터리로 위치를 변경합니다.
일반적으로 /usr/local/mysql입니다
(필요하다면 시스템에 맞게 경로 이름을 조정하십시오):
1cd /usr/local/mysql
데이터 디렉터리를 초기화하려면,
mysqld를
--initialize 또는
--initialize-insecure 옵션과 함께 실행합니다.
'root'@'localhost' 계정에 대해 서버가
랜덤 초기 패스워드를 생성하도록 할지, 아니면 해당 계정을
패스워드 없이 생성할지에 따라 선택합니다:
“secure by default” 설치(즉,
랜덤 초기 root 패스워드 생성을
포함한 설치)에는
--initialize를 사용합니다.
이 경우 패스워드는 만료된 것으로 표시되며 새 패스워드를 선택해야
합니다.
--initialize-insecure를
사용하면 root 패스워드가 생성되지 않습니다.
이는 안전하지 않습니다. 서버를 실제 프로덕션 용도로 사용하기 전에
적절한 시점에 해당 계정에 패스워드를 설정할 것이라고
가정합니다.
새로운 'root'@'localhost' 패스워드를
설정하는 방법은
Post-Initialization root Password Assignment를
참조하십시오.
참고
서버는 모든 메시지(초기 패스워드 포함)를 표준 에러 출력으로 기록합니다. 이는 에러 로그로 리다이렉트될 수 있으므로, 화면에서 메시지를 볼 수 없다면 에러 로그를 확인하십시오. 에러 로그 및 그 위치에 대한 정보는 Section 7.4.2, “The Error Log”를 참조하십시오.
Windows에서는 --console
옵션을 사용하여 메시지를 콘솔로 보내십시오.
Unix 및 Unix 계열 시스템에서는
데이터베이스 디렉터리 및 파일이 mysql 로그인 계정의
소유여야 하며, 그래야 나중에 서버를 실행할 때
읽기 및 쓰기 접근 권한을 가질 수 있습니다.
이를 보장하기 위해 시스템 root 계정으로
mysqld를 시작하고 아래와 같이
--user 옵션을 포함합니다:
1bin/mysqld --initialize --user=mysql 2bin/mysqld --initialize-insecure --user=mysql
또는 mysql로 로그인한 상태에서
mysqld를 실행할 수도 있습니다.
이 경우 커맨드에서 --user
옵션을 생략할 수 있습니다.
Windows에서는 다음 커맨드 중 하나를 사용합니다:
1bin\mysqld --initialize --console 2bin\mysqld --initialize-insecure --console
참고
필요한 시스템 라이브러리가 누락된 경우 데이터 디렉터리 초기화가 실패할 수 있습니다. 예를 들어 다음과 같은 에러가 발생할 수 있습니다:
1bin/mysqld: error while loading shared libraries: 2libnuma.so.1: cannot open shared object file: 3No such file or directory
이런 경우 누락된 라이브러리를 수동으로 설치하거나 시스템의 패키지 매니저를 사용해 설치해야 합니다. 이후 데이터 디렉터리 초기화 커맨드를 다시 시도하십시오.
mysqld가 설치 디렉터리나 데이터 디렉터리의
올바른 위치를 식별할 수 없는 경우,
--basedir나
--datadir와 같은 다른 옵션을
지정해야 할 수도 있습니다. 예를 들면 (하나의 줄에 커맨드를 입력):
1bin/mysqld --initialize --user=mysql 2 --basedir=/opt/mysql/mysql 3 --datadir=/opt/mysql/mysql/data
또는 관련 옵션 설정을 옵션 파일에 넣고 해당 파일 이름을
mysqld에 전달할 수도 있습니다.
Unix 및 Unix 계열 시스템에서 옵션 파일 이름이
/opt/mysql/mysql/etc/my.cnf라고 가정해 봅니다.
다음 내용을 파일에 넣습니다:
1[mysqld] 2basedir=/opt/mysql/mysql 3datadir=/opt/mysql/mysql/data
그런 다음 mysqld를 다음과 같이 실행합니다
(마찬가지로 하나의 줄에 커맨드를 입력하며,
--defaults-file 옵션을
먼저 둡니다):
1bin/mysqld --defaults-file=/opt/mysql/mysql/etc/my.cnf 2 --initialize --user=mysql
Windows에서는 C:\my.ini에
다음과 같은 내용이 들어 있다고 가정합니다:
1[mysqld] 2basedir=C:\\Program Files\\MySQL\\MySQL Server 9.5 3datadir=D:\\MySQLdata
그런 다음 mysqld를 다음과 같이 실행합니다
(역시 하나의 줄에 커맨드를 입력하고,
--defaults-file 옵션을
먼저 둡니다):
1bin\mysqld --defaults-file=C:\my.ini 2 --initialize --console
주의
데이터 디렉터리를 초기화할 때는
디렉터리 위치를 설정하는 데 사용되는
--basedir 또는
--datadir 같은 옵션과,
필요하다면 --user
옵션 이외의 다른 옵션은 지정하지 않아야 합니다.
일반 사용 중 MySQL 서버가 사용할 옵션은
초기화 이후 서버를 재시작할 때 설정할 수 있습니다.
자세한 내용은
--initialize 옵션 설명을
참조하십시오.
참고
서버가 수행하는 데이터 디렉터리 초기화 시퀀스는 [mysql_secure_installation](https://dev.mysql.com/doc/refman/9.5/en/mysql-secure-installation.html "6.4.2 mysql_secure_installation — Improve MySQL Installation Security)이 수행하는 작업을 대체하지 않습니다.
--initialize 또는
--initialize-insecure 옵션과 함께
호출되면,
mysqld는 데이터 디렉터리 초기화 시퀀스 중에
다음과 같은 작업을 수행합니다:
서버는 다음과 같이 데이터 디렉터리의 존재 여부를 확인합니다:
데이터 디렉터리가 존재하지 않으면 서버가 생성합니다.
데이터 디렉터리가 존재하지만 비어 있지 않은 경우 (즉, 파일 또는 서브디렉터리를 포함하는 경우), 서버는 다음과 같은 에러 메시지를 출력한 후 종료합니다:
1[ERROR] --initialize specified but the data directory exists. Aborting.
이 경우 데이터 디렉터리를 제거하거나 이름을 바꾼 후 다시 시도하십시오.
데이터 디렉터리에 있는 각 엔트리의 이름이
마침표(.)로 시작하는 경우에는,
해당 데이터 디렉터리가 비어 있지 않아도 허용됩니다.
데이터 디렉터리 내에서 서버는
mysql 시스템 스키마와 그 테이블을 생성합니다.
여기에는 데이터 딕셔너리 테이블, 권한 테이블, 타임존
테이블, 서버 사이드 도움말 테이블이 포함됩니다.
Section 7.3, “The mysql System Schema”를
참조하십시오.
서버는 InnoDB 테이블을
관리하는 데 필요한
system tablespace 및 관련 데이터 구조를
초기화합니다.
참고
mysqld가
InnoDB system tablespace를 설정한 후에는,
tablespace 특성에 대한 특정 변경을 위해서는
새로운 instance 전체를
설정해야 합니다. 해당 변경에는 시스템 테이블스페이스의 첫 파일 이름과
undo 로그 수가 포함됩니다. 또한
InnoDB 파일의 생성 및 위치에 영향을 미치는
다른 파라미터(예:
innodb_data_home_dir 및
innodb_log_group_home_dir)를
필요에 따라 지정해야 합니다.
이 옵션들이 구성 파일에 있으나 해당 파일이
MySQL이 기본적으로 읽는 위치에 있지 않은 경우,
mysqld를 실행할 때
--defaults-extra-file
옵션을 사용하여 파일 위치를 지정하십시오.
서버는 'root'@'localhost'
슈퍼유저 계정 및 기타 예약된 계정을 생성합니다
(참조:
Section 8.2.9, “Reserved Accounts”).
일부 예약된 계정은 잠겨 있어 클라이언트가 사용할 수 없지만,
'root'@'localhost'는 관리용으로
사용되며, 여기에 패스워드를 설정해야 합니다.
'root'@'localhost' 계정에 대한
패스워드와 관련된 서버 동작은 서버를 어떻게
호출했는지에 따라 달라집니다:
--initialize를 사용하고
--initialize-insecure는
사용하지 않은 경우, 서버는 랜덤 패스워드를 생성하고 이를
만료된 것으로 표시한 후 패스워드를 표시하는 메시지를
기록합니다:
1[Warning] A temporary password is generated for root@localhost: 2iTag*AfrH5ej
--initialize-insecure를
사용한 경우(단독 또는
--initialize와 함께. 왜냐하면
--initialize-insecure가
--initialize를 내포하기 때문입니다),
서버는 패스워드를 생성하거나 만료된 것으로 표시하지 않으며,
다음과 같은 경고 메시지를 기록합니다:
1[Warning] root@localhost is created with an empty password ! Please 2consider switching off the --initialize-insecure option.
새 'root'@'localhost' 패스워드를
설정하는 방법은
Post-Initialization root Password Assignment를
참조하십시오.
서버는
HELP 스테이트먼트에 사용되는
서버 사이드 도움말 테이블을 채웁니다(참조:
Section 15.8.3, “HELP Statement”).
서버는 타임존 테이블은 채우지 않습니다.
이를 수동으로 채우는 방법은
Section 7.1.15, “MySQL Server Time Zone Support”를
참조하십시오.
init_file 시스템
변수가 SQL 스테이트먼트 파일 이름으로 지정된 경우,
서버는 해당 파일 내의 스테이트먼트를 실행합니다.
이 옵션을 사용하면 커스텀 부트스트래핑 시퀀스를
수행할 수 있습니다.
서버가 부트스트랩 모드로 동작할 때는
일부 기능이 사용할 수 없으므로 파일 안에 허용되는
스테이트먼트가 제한됩니다. 여기에는 계정 관리와 관련된
스테이트먼트(예: CREATE USER 또는 GRANT),
복제, 글로벌 트랜잭션 식별자와 관련된
스테이트먼트가 포함됩니다.
서버가 종료됩니다.
--initialize 또는
--initialize-insecure로
서버를 시작하여 데이터 디렉터리를 초기화한 후에는,
서버를 정상적으로(즉, 위 옵션 없이) 시작하고
'root'@'localhost' 계정에 새 패스워드를
설정합니다:
서버를 시작합니다. 관련 지침은 Section 2.9.2, “Starting the Server”를 참조하십시오.
서버에 접속합니다:
--initialize를 사용하고
--initialize-insecure는
사용하지 않은 상태에서 데이터 디렉터리를 초기화했다면,
root로 서버에 접속합니다:
1mysql -u root -p
그런 다음 패스워드 프롬프트에서 초기화 시퀀스 중에 서버가 생성한 랜덤 패스워드를 입력합니다:
1Enter password: (enter the random root password here)
이 패스워드를 모를 경우 서버 에러 로그를 확인하십시오.
--initialize-insecure를
사용하여 데이터 디렉터리를 초기화했다면,
root로 패스워드 없이 서버에 접속합니다:
1mysql -u root --skip-password
접속한 후에는 ALTER USER 스테이트먼트를 사용하여
새 root 패스워드를 설정합니다:
1ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';
Section 2.9.4, “Securing the Initial MySQL Account”도 참조하십시오.
참고
호스트 127.0.0.1로의 접속 시도는
일반적으로 localhost 계정으로
리졸브됩니다. 그러나 서버를
skip_name_resolve를
활성화한 상태로 실행하면 실패합니다.
그렇게 할 계획이라면 접속을 수락할 수 있는 계정이
존재하도록 해야 합니다. 예를 들어
--host=127.0.0.1 또는
--host=::1로 root로 접속할 수 있도록
다음 계정을 생성합니다:
1CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password'; 2CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
이 스테이트먼트는
init_file
시스템 변수를 사용해 실행할 파일에 넣을 수도 있습니다.
자세한 내용은
Server Actions During Data Directory Initialization를
참조하십시오.
2.9 Postinstallation Setup and Testing
2.9.2 Starting the Server