[mysql] MySQL 데이터베이스의 이름을 빠르게 바꾸려면 어떻게해야합니까 (스키마 이름 변경)?

에서 MySQL의 매뉴얼 MySQL은 이를 다루고 있습니다.

일반적으로 데이터베이스를 덤프하고 새 이름으로 다시 가져옵니다. 매우 큰 데이터베이스에는 옵션이 아닙니다. 분명히 RENAME {DATABASE | SCHEMA} db_name TO new_db_name; 나쁜 일을하고 소수의 버전에만 존재하며 전반적으로 나쁜 생각입니다 .

이것은 MyISAM 과는 매우 다른 것을 저장 하는 InnoDB 와 함께 작동해야합니다 .



답변

들어 이노 , 다음은 작동하는 것 같다 : 다음 새 데이터베이스로 차례로 각 테이블의 이름을 변경, 새로운 빈 데이터베이스를 만들 :

RENAME TABLE old_db.table TO new_db.table;

그 후에 권한을 조정해야합니다.

쉘에서의 스크립팅의 경우 다음 중 하나를 사용할 수 있습니다.

mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \
    do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done

또는

for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;

노트:

  • 옵션 -p과 비밀번호 사이에는 공백이 없습니다 . 데이터베이스에 비밀번호가 없으면 -u username -ppassword부품을 제거하십시오 .
  • 일부 테이블에 트리거가 있으면 위의 방법을 사용하여 다른 데이터베이스로 이동할 수 없습니다 ( Trigger in wrong schema오류 발생). 이 경우 전통적인 방법으로 데이터베이스를 복제 한 다음 기존 데이터베이스를 삭제하십시오.

    mysqldump old_db | mysql new_db

  • 저장 프로 시저가 있으면 나중에 복사 할 수 있습니다.

    mysqldump -R old_db | mysql new_db


답변

다음 몇 가지 간단한 명령을 사용하십시오.

mysqldump -u username -p -v olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql

또는 I / O를 줄이려면 @Pablo Marin-Garcia가 제안한대로 다음을 사용하십시오.

mysqladmin -u username -p create newdatabase
mysqldump -u username -v olddatabase -p | mysql -u username -p -D newdatabase


답변

솔루션이 더 간단하고 일부 개발자가 제안한 것 같습니다. phpMyAdmin에이를위한 작업이 있습니다.

phpMyAdmin에서 선택하려는 데이터베이스를 선택하십시오. 탭에는 작업이라는 이름이 있으며 이름 바꾸기 섹션으로 이동하십시오. 그게 다야.

많은 사람들이 제안한 것처럼 새 이름으로 새 데이터베이스를 만들고 기존 데이터베이스의 모든 테이블을 새 데이터베이스에 덤프하고 이전 데이터베이스를 삭제합니다.

여기에 이미지 설명을 입력하십시오


답변

SQL을 사용하여 소스 데이터베이스의 각 테이블을 대상 데이터베이스로 전송하는 SQL 스크립트를 생성 할 수 있습니다.

명령에서 생성 된 스크립트를 실행하기 전에 대상 데이터베이스를 작성해야합니다.

이 두 스크립트 중 하나를 사용할 수 있습니다 (원래는 전자와 누군가가 내 대답을 “개선”하도록 제안했습니다 GROUP_CONCAT.

SELECT CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name, '; ')
FROM information_schema.TABLES
WHERE table_schema='$1';

또는

SELECT GROUP_CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name SEPARATOR '; ')
FROM information_schema.TABLES
WHERE table_schema='$1';

($ 1과 $ 2는 각각 소스와 대상입니다)

그러면 실행해야 할 SQL 명령이 생성됩니다.

참고 GROUP_CONCAT많은 수의 테이블과 데이터베이스에 대한 초과 할 수있는 기본 길이 제한이 있습니다. 실행 SET SESSION group_concat_max_len = 100000000;하거나 다른 많은 수 를 실행하여 해당 제한을 변경할 수 있습니다 .


답변

RENAME DATABASEMySQL 에서 누락 된 명령 에뮬레이션 :

  1. 새로운 데이터베이스 생성
  2. 다음을 사용하여 이름 바꾸기 쿼리를 작성하십시오.

    SELECT CONCAT('RENAME TABLE ',table_schema,'.',table_name,
        ' TO ','new_schema.',table_name,';')
    FROM information_schema.TABLES
    WHERE table_schema LIKE 'old_schema';
  3. 그 출력을 실행

  4. 오래된 데이터베이스 삭제

MySQL에서 누락 된 RENAME DATABASE 명령 에뮬레이션 에서 가져 왔습니다 .


답변

세 가지 옵션 :

  1. 새 데이터베이스를 작성하고 서버를 끄고 한 데이터베이스 폴더에서 다른 데이터베이스 폴더로 파일을 이동 한 후 서버를 다시 시작하십시오. 모든 테이블이 MyISAM 인 경우에만 작동합니다.

  2. 새 데이터베이스를 작성하고 CREATE TABLE … LIKE 문을 사용한 다음 INSERT … SELECT * FROM 문을 사용하십시오.

  3. mysqldump를 사용하고 해당 파일로 다시로드하십시오.


답변

간단한 방법

데이터베이스 디렉토리로 변경하십시오.

cd /var/lib/mysql/

MySQL을 종료하십시오 … 이것은 중요합니다!

/etc/init.d/mysql stop

좋아,이 방법은 InnoDB 또는 BDB-Databases에서는 작동하지 않습니다.

데이터베이스 이름 바꾸기 :

mv old-name new-name

… 또는 테이블 …

cd database/

mv old-name.frm new-name.frm

mv old-name.MYD new-name.MYD

mv old-name.MYI new-name.MYI

MySQL 재시작

/etc/init.d/mysql start

끝난…

이 방법은 InnoDB 또는 BDB 데이터베이스에서 작동하지 않습니다. 이 경우 데이터베이스를 덤프하고 다시 가져와야합니다.