DBMS/MySQL

[MySQL] 데이터베이스 이름 변경 (RENAME DATABASE)

ryean 2020. 11. 25. 18:05
반응형

 


 

MySQL 에서는 버전 5.1.7 에서 RENAME DATABASE 구문이 추가되었으나,

database 의 내용이 손실될 위험성이 발견이 되어 버전 5.1.23 이후부터 제거됐다고 한다.

 

그래서 database 이름을 변경하려면 새로운 database 를 생성한 후, 기존 databse 의 데이터를 옮겨야한다.

이를 RENAME TABLE 구문과 mysqldump 를 이용하여 변경해줄 수 있다.

 

 

 

1. RENAME TABLE 을 이용한 database 이름 변경


1) 새 database 생성

 

CREATE DATABASE `새DB명`;

 

 

2) 기존 database 의 테이블을 모두 옮겨준다. 

 

RENAME TABLE `기존DB명.기존TABLE명` TO `새DB명.새로운TABLE명`;

 

 

3) 옮길 procedure 가 있다면 아래 쿼리를 통해 옮겨준다.

 

UPDATE mysql.proc
SET db = '기존DB명'
WHERE db = '새DB명'

 

 

4) 정상적으로 새 database 에 옮겨졌다면 기존 database 를 삭제한다. (선택 사항)

 

DROP DATABASE `기존DB명`;

 

 

하지만 위 방법은 다수의 테이블이 존재한다면 일일히 쿼리를 만들어줘야하기에 굉장히 번거로울 것 이다.

그래서 위 쿼리를 information_schema.tablesconcat 을 이용하여 간단히 만들어줄 수 있다.

 

SELECT concat('RENAME TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' TO ','새DB명.',TABLE_NAME,';')
FROM information_schema.tables
WHERE TABLE_SCHEMA LIKE '기존DB명';

 

 

나의 예를 들어보자.

 - 기존DB명 : test

 - 새DB명: test2

 

SELECT concat('RENAME TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' TO ','test2.',TABLE_NAME,';')
FROM information_schema.tables
WHERE TABLE_SCHEMA LIKE 'test';

 

 

위의 쿼리를 실행하면 아래와 같은 결과를 얻을 수 있으며,

결과의 내용을 실행시켜주면 아주 편리하게 테이블을 옮길 수 있다.

 

 

 

 

2. mysqldump 를 이용한 database 이름 변경


1) 기존 database 를 dump 한다. (backup)

 

$ mysqldump -u root -p 기존DB명 > 기존DB명.sql

 

  1-1) 만일 옮길 procedure 도 있다면, 아래 구문을 이용하여 dump한다.

 

$ mysqldump -u root -p --routines 기존DB명 > 기존DB명.sql

 

 

2) 옮길 새 database 를 생성한다. (기존에 생성했다면 skip 하면 된다.)

 

$ mysql -u root -p -e "CREATE DATABASE 새DB명"

 

 

3) 기존 database 의 dump 파일을 새 database 에 옮긴다. (restore)

 

$ mysql -u root -p 새DB명 < 기존DB명.sql

 

 

4) 정상적으로 새 database 에 옮겨졌다면, 기존 database 를 삭제한다. (선택 사항)

 

$ mysql -u root -p -e "DROP DATABASE 기존DB명"

 

 

 

위 두가지 방법을 통해 간단히 database 이름을 변경해 줄 수 있다.

 

 

 

 

 

 

 

반응형