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.tables 와 concat 을 이용하여 간단히 만들어줄 수 있다.
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 이름을 변경해 줄 수 있다.