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


959

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

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

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



5
이 RENAME DATABASE 구문은 MySQL 5.1.7에서 추가되었지만 위험한 것으로 밝혀졌으며 MySQL 5.1.23에서 제거되었습니다.
zloctb 2016 년

11
바라건대 MySQL은 RENAME DATABASE현재이 작업을 수행하는 쉬운 방법이 없기 때문에 위험이없는 새로운 작업 진술을 구현하기를 바랍니다 . 설명서 에서 왜 위험한지 분명하지 않으므로 교체 할 수 있어야합니다. 적어도 사람들은 웹 사이트에 기능 요청 버그를 넣었습니다. 예를 들어, bugs.mysql.com/bug.php?id=58593bugs.mysql.com/bug.php?id=1698 입니다.
에드워드

링크가 이제 끊어졌습니다.
oldboy

답변:


833

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

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


26
나는 file_per_table 설정을 사용하여 30 개 이상의 테이블이있는 InnoDB 데이터베이스 로이 작업을 수행했으며 일부 테이블은 3 + 백만 행이지만 <1 초 안에 완료되었습니다. 더 복잡한 작업을 수행하는 대신 스토리지에서 파일을 이동시키는 것 같습니다. 가능하면 +2 :)
Dave Rix

87
에서 - "이름 바꾸기 DATABASE는 위험한 것으로 나타났다와 MySQL 5.1.23에서 제거" dev.mysql.com/doc/refman/5.1/en/rename-database.html
Palani의

13
보기에는 작동하지 않습니다. 뷰 이름을 변경하여 데이터베이스에서 다른 뷰로 이동할 수는 없습니다. 사용 DROP VIEW하고 CREATE VIEW대신. 서투른, 네 mysqldump먼저 모든 테이블을 이동 한 후보기를 이동 하려고 할 수 있습니다 . 또한 SHOW TABLES테이블과 뷰가 표시되므로주의하십시오.
tuomassalo

9
또한 트리거가있는 테이블에서는 작동하지 않습니다. 테이블을 이동하기 전에 트리거를 찾아 덤프 및 삭제 한 다음 덤프 된 트리거를 대상 db로 가져와야합니다.
Olfan

5
업데이트 (예 : 작업) 링크 문서화 왜 RENAME DATABASE제거 : dev.mysql.com/worklog/task/?id=4030을
알렉시스

443

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

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

86
OP가 말했듯이 "그것은 매우 큰 데이터베이스에 대한 옵션이 아닙니다."
순례

3
원본 데이터베이스를 삭제하는 것을 잊지 마십시오
Pavel Radzivilovsky

3
훌륭한 답변! 제안의 커플은 더이 아마 모든 능력에 의해 인터넷 검색되는으로 개선하기 : (1)는 가장 좋은 대답 (2) 보인다 넣어 정상에 파블로 마린 - 가르시아의 코드 조각을 이동 -p<password>대신 -p때문에 문이 나타나는 프롬프트없이 실행 어디서나 .
Steve Chambers

9
파이프 버전을 사용하면 다음과 같은 두 개의 "Enter password :"프롬프트가 표시됩니다. Enter password: Enter password: 하나의 암호를 사용하지만 둘 다 사용하지는 않습니다. 세부 사항이 누락 되었습니까?
Ryan

33
아무도 이것을 언급하지 않은 것에 놀랐지 만 --routines저장 프로 시저가 복사되도록 mysqldump 명령에 플래그를 추가해야합니다 .
Carlos P

205

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

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

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

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


76
환경에 PHP가 있거나 phpmyadmin을 사용한다고 가정하십시오.
Chris

26
phpMyAdmin이 있어도 매우 위험합니다. 백엔드는 두 개의 db를 알 수없는 상태로 두는 중반 프로세스가 실패하거나 시간이 오래 걸리므로 프런트 엔드가 멈추거나 PHP 시간이 초과 될 수 있습니다.
mozboz

20
사실 @mozboz이지만, 10 년 동안이 일을 해왔으며 그 문제는 없었습니다. 쉘을 통해 명령을 실행하고 컴퓨터가 충돌하는 경우에도 동일합니다. 가능성이 있지만 무엇입니까? 1 ~ 1 조?
raphie

24
콘솔을 통한 스크립트는 동일한 문제로 중단 될 수있는 프런트 엔드이기도합니다.
Greg Greg

11
그러나 콘솔 작업은 PhpMyAdmin보다 훨씬 안정적이며, 특히 큰 데이터베이스가 관련된 경우에는 OP의 경우입니다. 개인적으로 상당히 큰 데이터베이스가 있다면 PMA 대신 콘솔 방법을 강력히 제안합니다. 말할 것도없이, 작은 데이터베이스에서 PMA도 마찬가지입니다.
Teodor Sandu

107

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;하거나 다른 많은 수 를 실행하여 해당 제한을 변경할 수 있습니다 .


@BlakeFrederick RENAME DATABASE를 사용하지 않으므로 문제가 무엇입니까?
tuxayo

테이블에 참조 제한 조건이있는 경우 작동합니까? 나는 기대하지 않습니다.
고인돌

42

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
완전한! 나는 이것을 InnoDB와 MyISAM 테이블로 테스트했다. 내가 테스트 한 가장 빠른 솔루션 (테이블 이름 바꾸기는 거의 즉각적이며 지연되지 않습니다)!
Philipp

큰! 나중에 권한을 수정해야합니다.
Adam Faryna 2009 년

추신. 라이브 DB에서 작업하는 경우 이름 바꾸기 쿼리를 실행하기 전에이 작업을 수행하는 것이 좋습니다.
Adam Faryna 2009 년

테이블에 참조 제한 조건이있는 경우 작동합니까? 나는 기대하지 않습니다.
고인돌

24

세 가지 옵션 :

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

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

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


myisam 참조의 경우 + 왜 이것이 효과가 없었는지 알 수 없었습니다.
Christian Payne

5
이 질문은 이것이 MyISAM이 아니라 InnoDB에서 작동해야 함을 나타냅니다
D-Rock

@ D-Rock은 제목을 기반으로 사람들을 여기로 데려 오는 Google에 알려줍니다.
jiggunjer

24

간단한 방법

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

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 데이터베이스에서 작동하지 않습니다. 이 경우 데이터베이스를 덤프하고 다시 가져와야합니다.


16
폴더 이름을 바꾸면 장난감이 깨집니다.
ViniciusPires

1
@Rahly, 테이블 당 하나의 파일이 설정되어 있어도 여전히 위험하지만, 플래그를 설정 한 후 데이터베이스가 생성되었는지 확실하지 않으면 테이블 당 하나의 파일이 설정되기 전에 생성 된 테이블에 문제가 발생합니다.
Qian Chen

일반적으로 말해서, 대부분의 사람들은 한 가지 방법으로 시스템을 사용하게 될 것입니다. 사람들은 파일 당 하나의 테이블이 있는지 없는지에 대해 무작위로 플립 플롭하지 않을 것입니다. 또한 시나리오 에서조차도 플래그 전에 테이블을 만든 경우 처음에는 별도의 파일로 존재하지 않으므로 이동이 작동하지 않고 여전히 안전하며 위험하지 않습니다. 이동 중에는 데이터베이스가 실행되고 있지 않습니다.
Rahly

OS X에 homebrew와 함께 설치된 mysql과 동일 :launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist cd /usr/local/var/mysql mv old-name new-name launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
coberlin

22

이 쉘 스크립트를 사용할 수 있습니다 :

참조 : MySQL 데이터베이스의 이름을 바꾸는 방법은 무엇입니까?

#!/bin/bash
set -e # terminate execution on command failure

mysqlconn="mysql -u root -proot"
olddb=$1
newdb=$2
$mysqlconn -e "CREATE DATABASE $newdb"
params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES \
                           WHERE table_schema='$olddb'")
for name in $params; do
      $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name";
done;
$mysqlconn -e "DROP DATABASE $olddb"

작동 중입니다.

$ sh rename_database.sh oldname newname

6
이것에 조심하십시오. 루트 사용자로 로그인하지 않으면 권한이 제한 될 수 있습니다. 이름 바꾸기가 실패하지만 삭제가 성공하면 데이터베이스가 삭제됩니다. 그렇지 않으면 멋진 스크립트입니다.
Lex

3
set -e스크립트 시작 부분에 추가 했는데, 이로 인해 실패시 실행이 종료되고 해당 문제가 완화됩니다.
Mikkel

19

나는 최근에야 아주 좋은 방법을 찾았고 MyISAM 및 InnoDB와 함께 작동하며 매우 빠릅니다.

RENAME TABLE old_db.table TO new_db.table;

나는 그것을 어디서 읽었는지 기억하지 못하지만 신용은 내가 아닌 다른 사람에게 간다.


@ArkadijKuzhel은 그렇게 생각하지 않습니다. RENAME DATABASE에 대해 이야기하고 있다고 생각합니다.
Rob Grant

이것은 정말 도움이되었습니다. 새 빈 데이터베이스를 만든 다음 코드를 사용하면 모든 테이블을 원하는 이름으로 가져 왔습니다.
7

3
허용 대답과 같은 문제에서이 겪고있다 - "이름 바꾸기 DATABASE는 위험한 것으로 밝혀졌다와 MySQL 5.1.23에서 제거"- dev.mysql.com/doc/refman/5.1/en/rename-database.html에서
Blake Frederick

16

완전한 이름 바꾸기 를 수행하는 가장 간단한 방탄 및 완전 방지 방법 (오래된 데이터베이스를 삭제하여 사본이 아닌 이름 바꾸기) :

mysqladmin -uroot -pmypassword create newdbname
mysqldump -uroot -pmypassword --routines olddbname | mysql -uroot -pmypassword newdbname
mysqladmin -uroot -pmypassword drop olddbname

단계 :

  1. 줄을 메모장에 복사하십시오.
  2. "olddbname", "newdbname", "mypassword"(+ 선택적으로 "root")에 대한 모든 참조를 동등한 것으로 바꾸십시오.
  3. 명령 행에서 하나씩 실행하십시오 (프롬프트가 표시되면 "y"입력).

비밀번호가 안전하지 않으므로 콘솔에 비밀번호를 추가하지 마십시오. 이 작업을 이미 수행 한 경우 history -cw를 사용하여 제거하십시오. 대신 암호를 비워두고 프롬프트 후에 입력하십시오.
Tommie C.

완료하지 않고 20 분 이상 비정상적으로 오래 걸립니다. 취소해도 되나요?
Sigu Magwa

15

이것이 내가 사용하는 것입니다 :

$ mysqldump -u root -p olddb >~/olddb.sql
$ mysql -u root -p
mysql> create database newdb;
mysql> use newdb
mysql> source ~/olddb.sql
mysql> drop database olddb;

14
거대한 데이터베이스에는 사용할 수 없습니다.
mikesl

14

MySQL은 현재 명령 인터페이스를 통한 데이터베이스 이름 변경을 지원하지 않지만 MySQL이 데이터베이스를 저장하는 디렉토리에 액세스 할 수 있으면 데이터베이스 이름을 바꿀 수 있습니다. 기본 MySQL 설치의 경우 일반적으로 MySQL이 설치된 디렉토리 아래의 Data 디렉토리에 있습니다. Data 디렉토리에서 이름을 바꾸려는 데이터베이스 이름을 찾아 이름을 바꾸십시오. 디렉토리 이름을 바꾸면 일부 권한 문제가 발생할 수 있습니다. 알아 두세요

참고 : 데이터베이스 이름을 바꾸기 전에 MySQL을 중지해야합니다

새 데이터베이스를 만들고 (원하는 이름을 사용하여) 이전 데이터에서 새 데이터로 필요한 데이터를 내보내거나 가져 오는 것이 좋습니다. 꽤 간단합니다.


13

PHPMyAdmin에서 데이터베이스의 이름을 바꾸면 덤프가 생성 된 다음 새 이름으로 데이터베이스가 삭제되고 다시 생성됩니다.


4
이 기능은 데이터베이스를 클릭 할 때 "작업"탭 아래에 약간 숨겨져 있습니다.
Maris B.

13

두 가지 방법이 있습니다.

방법 1 : 데이터베이스 스키마 이름을 바꾸는 잘 알려진 방법은 Mysqldump를 사용하여 스키마를 덤프하고 다른 스키마에서 복원 한 다음 이전 스키마를 삭제하는 것입니다 (필요한 경우).

쉘에서

 mysqldump emp > emp.out
 mysql -e "CREATE DATABASE employees;"
 mysql employees < emp.out 
 mysql -e "DROP DATABASE emp;"

위의 방법은 쉽지만 시간과 공간이 많이 소모됩니다. 스키마가 100GB를 초과하면 어떻게됩니까?공간을 절약하기 위해 위의 명령을 함께 파이프하는 방법이 있지만 시간을 절약 할 수는 없습니다.

이러한 상황을 해결하려면 스키마의 이름을 바꾸는 또 다른 빠른 방법이 있지만 수행하는 동안 일부주의를 기울여야합니다.

방법 2 : MySQL은 다른 스키마에서도 작동하는 테이블 이름을 바꾸는 데 매우 유용한 기능을 가지고 있습니다. 이 이름 바꾸기 작업은 원 자성이므로 이름을 바꾸는 동안 다른 사람은 테이블에 액세스 할 수 없습니다. 테이블 이름을 변경하거나 스키마는 메타 데이터 만 변경되므로 완료하는 데 시간이 약간 걸립니다. 다음은 이름 바꾸기를 수행하는 절차 적 접근 방식입니다.

원하는 이름으로 새 데이터베이스 스키마를 작성하십시오. MySQL의“RENAME TABLE”명령을 사용하여 이전 스키마에서 새 스키마로 테이블 이름을 바꿉니다. 이전 데이터베이스 스키마를 삭제하십시오. If there are views, triggers, functions, stored procedures in the schema, those will need to be recreated too. 테이블에 트리거가 있으면 MySQL의“RENAME TABLE”이 실패합니다. 이를 해결하기 위해 다음과 같은 작업을 수행 할 수 있습니다.

1) Dump the triggers, events and stored routines in a separate file. 이것은 mysqldump 명령에 -E, -R 플래그 (트리거를 덤프하는 -t -d 외에)를 사용하여 수행되었습니다. 트리거가 덤프되면 RENAME TABLE 명령이 작동하기 위해 스키마에서 트리거를 삭제해야합니다.

 $ mysqldump <old_schema_name> -d -t -R -E > stored_routines_triggers_events.out

2) “BASE”테이블의 목록 만 생성하십시오. 이들은 information_schema.TABLES테이블 의 쿼리를 사용하여 찾을 수 있습니다 .

 mysql> select TABLE_NAME from information_schema.tables where 
    table_schema='<old_schema_name>' and TABLE_TYPE='BASE TABLE';

3) 뷰를 아웃 파일로 덤프하십시오. 동일한 information_schema.TABLES테이블 에서 쿼리를 사용하여 뷰를 찾을 수 있습니다 .

mysql> select TABLE_NAME from information_schema.tables where 
   table_schema='<old_schema_name>' and TABLE_TYPE='VIEW';
 $ mysqldump <database> <view1> <view2>  > views.out

4) old_schema의 현재 테이블에서 트리거를 삭제하십시오.

mysql> DROP TRIGGER <trigger_name>;
...

5) 2 단계에서 찾은 모든“기본”테이블의 이름이 변경되면 위의 덤프 파일을 복원하십시오.

mysql> RENAME TABLE <old_schema>.table_name TO <new_schema>.table_name;
...
$ mysql <new_schema> < views.out
$ mysql <new_schema> < stored_routines_triggers_events.out

위의 방법으로 복잡한 사항 : 사용자가 올바른 schema_name과 일치하도록 GRANTS를 업데이트해야 할 수도 있습니다. 이것들은 mysql.columns_priv, mysql.procs_priv, mysql.tables_priv, mysql.db 테이블에 대한 간단한 업데이트로 old_schema 이름을 new_schema로 업데이트하고“Flush privileges;”를 호출하여 해결할 수 있습니다. "방법 2"는 "방법 1"보다 약간 더 복잡해 보이지만 완전히 스크립트 가능합니다. 위의 단계를 적절한 순서로 수행하는 간단한 bash 스크립트는 다음에 데이터베이스 스키마의 이름을 바꾸는 동안 공간과 시간을 절약 할 수 있습니다.

Percona Remote DBA 팀은 다음과 같은 방식으로 작동하는“rename_db”라는 스크립트를 작성했습니다.

[root@dba~]# /tmp/rename_db
rename_db <server> <database> <new_database>

이 스크립트의 사용을 보여주기 위해 샘플 스키마 "emp", 테스트 트리거 생성, 해당 스키마에 저장된 루틴을 사용했습니다. 스크립트를 사용하여 데이터베이스 스키마의 이름을 바꾸려고 시도하는데 시간이 많이 걸리는 덤프 / 복원 방법과는 달리 완료하는 데 몇 초가 걸립니다.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| emp                |
| mysql              |
| performance_schema |
| test               |
+--------------------+


[root@dba ~]# time /tmp/rename_db localhost emp emp_test
create database emp_test DEFAULT CHARACTER SET latin1
drop trigger salary_trigger
rename table emp.__emp_new to emp_test.__emp_new
rename table emp._emp_new to emp_test._emp_new
rename table emp.departments to emp_test.departments
rename table emp.dept to emp_test.dept
rename table emp.dept_emp to emp_test.dept_emp
rename table emp.dept_manager to emp_test.dept_manager
rename table emp.emp to emp_test.emp
rename table emp.employees to emp_test.employees
rename table emp.salaries_temp to emp_test.salaries_temp
rename table emp.titles to emp_test.titles
loading views
loading triggers, routines and events
Dropping database emp

real    0m0.643s
user    0m0.053s
sys     0m0.131s


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| emp_test           |
| mysql              |
| performance_schema |
| test               |
+--------------------+

위 출력에서 ​​볼 수 있듯이 데이터베이스 스키마 "emp"의 이름이 1 초 이내에 "emp_test"로 바뀌 었습니다. 마지막으로, 이것은 "방법 2"에 사용되는 Percona의 스크립트입니다.

#!/bin/bash
# Copyright 2013 Percona LLC and/or its affiliates
set -e
if [ -z "$3" ]; then
    echo "rename_db <server> <database> <new_database>"
    exit 1
fi
db_exists=`mysql -h $1 -e "show databases like '$3'" -sss`
if [ -n "$db_exists" ]; then
    echo "ERROR: New database already exists $3"
    exit 1
fi
TIMESTAMP=`date +%s`
character_set=`mysql -h $1 -e "show create database $2\G" -sss | grep ^Create | awk -F'CHARACTER SET ' '{print $2}' | awk '{print $1}'`
TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`
STATUS=$?
if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then
    echo "Error retrieving tables from $2"
    exit 1
fi
echo "create database $3 DEFAULT CHARACTER SET $character_set"
mysql -h $1 -e "create database $3 DEFAULT CHARACTER SET $character_set"
TRIGGERS=`mysql -h $1 $2 -e "show triggers\G" | grep Trigger: | awk '{print $2}'`
VIEWS=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='VIEW'" -sss`
if [ -n "$VIEWS" ]; then
    mysqldump -h $1 $2 $VIEWS > /tmp/${2}_views${TIMESTAMP}.dump
fi
mysqldump -h $1 $2 -d -t -R -E > /tmp/${2}_triggers${TIMESTAMP}.dump
for TRIGGER in $TRIGGERS; do
    echo "drop trigger $TRIGGER"
    mysql -h $1 $2 -e "drop trigger $TRIGGER"
done
for TABLE in $TABLES; do
    echo "rename table $2.$TABLE to $3.$TABLE"
    mysql -h $1 $2 -e "SET FOREIGN_KEY_CHECKS=0; rename table $2.$TABLE to $3.$TABLE"
done
if [ -n "$VIEWS" ]; then
    echo "loading views"
    mysql -h $1 $3 < /tmp/${2}_views${TIMESTAMP}.dump
fi
echo "loading triggers, routines and events"
mysql -h $1 $3 < /tmp/${2}_triggers${TIMESTAMP}.dump
TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`
if [ -z "$TABLES" ]; then
    echo "Dropping database $2"
    mysql -h $1 $2 -e "drop database $2"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.columns_priv where db='$2'" -sss` -gt 0 ]; then
    COLUMNS_PRIV="    UPDATE mysql.columns_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.procs_priv where db='$2'" -sss` -gt 0 ]; then
    PROCS_PRIV="    UPDATE mysql.procs_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.tables_priv where db='$2'" -sss` -gt 0 ]; then
    TABLES_PRIV="    UPDATE mysql.tables_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.db where db='$2'" -sss` -gt 0 ]; then
    DB_PRIV="    UPDATE mysql.db set db='$3' WHERE db='$2';"
fi
if [ -n "$COLUMNS_PRIV" ] || [ -n "$PROCS_PRIV" ] || [ -n "$TABLES_PRIV" ] || [ -n "$DB_PRIV" ]; then
    echo "IF YOU WANT TO RENAME the GRANTS YOU NEED TO RUN ALL OUTPUT BELOW:"
    if [ -n "$COLUMNS_PRIV" ]; then echo "$COLUMNS_PRIV"; fi
    if [ -n "$PROCS_PRIV" ]; then echo "$PROCS_PRIV"; fi
    if [ -n "$TABLES_PRIV" ]; then echo "$TABLES_PRIV"; fi
    if [ -n "$DB_PRIV" ]; then echo "$DB_PRIV"; fi
    echo "    flush privileges;"
fi

참조 제한 조건은 어떻습니까?
고인돌

13

단계 :

  1. http : // localhost / phpmyadmin /을 누르십시오
  2. DB를 선택하십시오
  3. 작업 탭을 클릭하십시오
  4. "데이터베이스 이름 바꾸기"탭이 나타납니다. 새 이름을 추가하고 권한 조정을 확인하십시오.
  5. 이동을 클릭하십시오.

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


1
일부 환경에는 환경이 제한되어 있으므로 phpMyAdmin 솔루션은 일반적으로 좋지 않은 솔루션입니다.
Daniel Antunes Pinto

"좋은"솔루션은 아니지만 내가 찾던 것이 었으므로 감사합니다.
jamie

1
그것이 당신을 위해 일하는 경우 친절하게 투표 .. 그것은 도움이 될 것입니다 .. 감사합니다
Shubham Jain

1
이것은 phpMyAdmin 환경에서 +1
William

12

Mac 사용자 인 경우 Sequel Pro의 데이터베이스 메뉴에 데이터베이스 이름 바꾸기 옵션이 있습니다. http://www.sequelpro.com/


5
데이터베이스에보기 또는 트리거가있는 경우이 옵션에주의하십시오. 이 메뉴 옵션 뒤에는 새 데이터베이스를 작성하고 모든 테이블을 이동시키는 스크립트가 있습니다. 뷰 또는 트리거에는 작동하지 않으므로 이전 데이터베이스에 남아 있습니다. 결과적으로 수정이 필요한 두 개의 손상된 데이터베이스가 생성됩니다.
Olfan

10

여기에있는 대부분의 답변은 다음 두 가지 이유로 잘못되었습니다.

  1. 뷰와 트리거가있을 수 있으므로 RENAME TABLE 만 사용할 수 없습니다. 트리거가 있으면 RENAME TABLE이 실패합니다.
  2. (질문에서 요청한대로) 큰 데이터베이스의 이름을 "빠르게"바꾸려면 mysqldump를 사용할 수 없습니다

Percona에는이 작업을 수행하는 방법에 대한 블로그 게시물이 있습니다. https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/

Simon R Jones가 게시 한 (작성된) 스크립트는 해당 게시물에 제안 된 내용을 수행합니다. 스크립트에서 찾은 버그를 수정했습니다. 여기에서 볼 수 있습니다 :

https://gist.github.com/ryantm/76944318b0473ff25993ef2a7186213d

사본은 다음과 같습니다.

#!/bin/bash
# Copyright 2013 Percona LLC and/or its affiliates
# @see https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/
set -e
if [ -z "$3" ]; then
    echo "rename_db <server> <database> <new_database>"
    exit 1
fi
db_exists=`mysql -h $1 -e "show databases like '$3'" -sss`
if [ -n "$db_exists" ]; then
    echo "ERROR: New database already exists $3"
    exit 1
fi
TIMESTAMP=`date +%s`
character_set=`mysql -h $1 -e "SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = '$2'" -sss`
TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`
STATUS=$?
if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then
    echo "Error retrieving tables from $2"
    exit 1
fi
echo "create database $3 DEFAULT CHARACTER SET $character_set"
mysql -h $1 -e "create database $3 DEFAULT CHARACTER SET $character_set"
TRIGGERS=`mysql -h $1 $2 -e "show triggers\G" | grep Trigger: | awk '{print $2}'`
VIEWS=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='VIEW'" -sss`
if [ -n "$VIEWS" ]; then
    mysqldump -h $1 $2 $VIEWS > /tmp/${2}_views${TIMESTAMP}.dump
fi
mysqldump -h $1 $2 -d -t -R -E > /tmp/${2}_triggers${TIMESTAMP}.dump
for TRIGGER in $TRIGGERS; do
    echo "drop trigger $TRIGGER"
    mysql -h $1 $2 -e "drop trigger $TRIGGER"
done
for TABLE in $TABLES; do
    echo "rename table $2.$TABLE to $3.$TABLE"
    mysql -h $1 $2 -e "SET FOREIGN_KEY_CHECKS=0; rename table $2.$TABLE to $3.$TABLE"
done
if [ -n "$VIEWS" ]; then
    echo "loading views"
    mysql -h $1 $3 < /tmp/${2}_views${TIMESTAMP}.dump
fi
echo "loading triggers, routines and events"
mysql -h $1 $3 < /tmp/${2}_triggers${TIMESTAMP}.dump
TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`
if [ -z "$TABLES" ]; then
    echo "Dropping database $2"
    mysql -h $1 $2 -e "drop database $2"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.columns_priv where db='$2'" -sss` -gt 0 ]; then
    COLUMNS_PRIV="    UPDATE mysql.columns_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.procs_priv where db='$2'" -sss` -gt 0 ]; then
    PROCS_PRIV="    UPDATE mysql.procs_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.tables_priv where db='$2'" -sss` -gt 0 ]; then
    TABLES_PRIV="    UPDATE mysql.tables_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.db where db='$2'" -sss` -gt 0 ]; then
    DB_PRIV="    UPDATE mysql.db set db='$3' WHERE db='$2';"
fi
if [ -n "$COLUMNS_PRIV" ] || [ -n "$PROCS_PRIV" ] || [ -n "$TABLES_PRIV" ] || [ -n "$DB_PRIV" ]; then
    echo "IF YOU WANT TO RENAME the GRANTS YOU NEED TO RUN ALL OUTPUT BELOW:"
    if [ -n "$COLUMNS_PRIV" ]; then echo "$COLUMNS_PRIV"; fi
    if [ -n "$PROCS_PRIV" ]; then echo "$PROCS_PRIV"; fi
    if [ -n "$TABLES_PRIV" ]; then echo "$TABLES_PRIV"; fi
    if [ -n "$DB_PRIV" ]; then echo "$DB_PRIV"; fi
    echo "    flush privileges;"
fi

파일을 파일에 저장 rename_db하고 스크립트를 실행 가능하게 chmod +x rename_db한 다음 다음 과 같이 사용하십시오../rename_db localhost old_db new_db


나는이 스크립트를 좋아한다. 그것은 거의 보편적이다. 그러나 정의자가 루트가 아닌 여러 체인 된 VIEW가있는 경우를 처리하지 못했습니다.
ENargit

9

전체 덤프 및 복원을 수행하지 않고도 데이터베이스 내의 모든 테이블 이름을 다른 데이터베이스 아래로 바꿀 수 있습니다.

존재하는 경우 삭제 절차 mysql.rename_db;
DELIMITER ||
프로 시저 작성 mysql.rename_db (in old_db VARCHAR (100), new_db VARCHAR (100))
시작
SELECT CONCAT ( 'CREATE DATABASE', new_db, ';')`# 새 데이터베이스 만들기`;
SELECT CONCAT ( 'RENAME TABLE`', old_db, '`.`', table_name, '`TO`', new_db, '`.`', table_name, '`;')`# alter table` FROM information_schema.tables WHERE table_schema = old_db;
SELECT CONCAT ( 'DROP DATABASE`', old_db, '`;')`# drop old database`;
끝 ||
DELIMITER;

$ time mysql -uroot -e "call mysql.rename_db ( 'db1', 'db2');" | mysql -uroot

그러나 대상 DB의 트리거는 만족스럽지 않습니다. 먼저 삭제 한 다음 이름을 바꾼 후 다시 작성해야합니다.

mysql -uroot -e "call mysql.rename_db ( 'test', 'blah2');" | mysql -uroot
4 행의 오류 1435 (HY000) : 잘못된 스키마에서 트리거

mysql 5.x 에서이 작업을 수행하는 작은 조정주의 mysql --batch-uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot 사항 --batch를 사용하여 형식을 원시 형식으로 변경하여 결과를 0 형식으로 출력해야합니다.
mikesl

8

다음은 명령 줄에서 자동화하기 위해 작성한 배치 파일이지만 Windows / MS-DOS 용입니다.

구문은 rename_mysqldb 데이터베이스입니다. newdatabase -u [user] -p [password]

:: ***************************************************************************
:: FILE: RENAME_MYSQLDB.BAT
:: ***************************************************************************
:: DESCRIPTION
:: This is a Windows /MS-DOS batch file that automates renaming a MySQL database 
:: by using MySQLDump, MySQLAdmin, and MySQL to perform the required tasks.
:: The MySQL\bin folder needs to be in your environment path or the working directory.
::
:: WARNING: The script will delete the original database, but only if it successfully
:: created the new copy. However, read the disclaimer below before using.
::
:: DISCLAIMER
:: This script is provided without any express or implied warranties whatsoever.
:: The user must assume the risk of using the script.
::
:: You are free to use, modify, and distribute this script without exception.
:: ***************************************************************************

:INITIALIZE
@ECHO OFF
IF [%2]==[] GOTO HELP
IF [%3]==[] (SET RDB_ARGS=--user=root) ELSE (SET RDB_ARGS=%3 %4 %5 %6 %7 %8 %9)
SET RDB_OLDDB=%1
SET RDB_NEWDB=%2
SET RDB_DUMPFILE=%RDB_OLDDB%_dump.sql
GOTO START

:START
SET RDB_STEP=1
ECHO Dumping "%RDB_OLDDB%"...
mysqldump %RDB_ARGS% %RDB_OLDDB% > %RDB_DUMPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=2
ECHO Creating database "%RDB_NEWDB%"...
mysqladmin %RDB_ARGS% create %RDB_NEWDB%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=3
ECHO Loading dump into "%RDB_NEWDB%"...
mysql %RDB_ARGS% %RDB_NEWDB% < %RDB_DUMPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=4
ECHO Dropping database "%RDB_OLDDB%"...
mysqladmin %RDB_ARGS% drop %RDB_OLDDB% --force
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=5
ECHO Deleting dump...
DEL %RDB_DUMPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
ECHO Renamed database "%RDB_OLDDB%" to "%RDB_NEWDB%".
GOTO END

:ERROR_ABORT
IF %RDB_STEP% GEQ 3 mysqladmin %RDB_ARGS% drop %NEWDB% --force
IF %RDB_STEP% GEQ 1 IF EXIST %RDB_DUMPFILE% DEL %RDB_DUMPFILE%
ECHO Unable to rename database "%RDB_OLDDB%" to "%RDB_NEWDB%".
GOTO END

:HELP
ECHO Renames a MySQL database.
ECHO Usage: %0 database new_database [OPTIONS]
ECHO Options: Any valid options shared by MySQL, MySQLAdmin and MySQLDump.
ECHO          --user=root is used if no options are specified.
GOTO END    

:END
SET RDB_OLDDB=
SET RDB_NEWDB=
SET RDB_ARGS=
SET RDB_DUMP=
SET RDB_STEP=

7

TodoInTX의 저장 프로 시저는 저에게 효과적이지 않았습니다. 여기 내 찌르다 :

-저장 프로 시저 rename_db : 테이블 복사 방법으로 데이터베이스 이름을 바꿉니다.
-주의 사항 : 
- 'new'데이터베이스 이름과 동일한 이름을 가진 기존 데이터베이스를 복제합니다.
-테이블 만 복사합니다. 저장 프로 시저 및 기타 데이터베이스 개체는 복사되지 않습니다.
-Tomer Altman (taltman@ai.sri.com)

구분자 //
존재하는 경우 DROP 절차 rename_db;
프로 시저 작성 rename_db (old_db VARCHAR (100), new_db VARCHAR (100))
시작
    DECLARE current_table VARCHAR (100);
    선언 완료 INT DEFAULT 0;
    DECLARE old_tables CURSOR FOR information_schema.tables에서 table_name을 선택하십시오. 여기서 table_schema = old_db;
    선언되지 않은 핸들을 선언합니다. 완료 = 1;

    SET @output = CONCAT ( 'DROP SCHEMA IF EXISTS', new_db, ';'); 
    @output에서 준비 stmt;
    실행 표준;

    SET @output = CONCAT ( '만약 존재하지 않는 경우 스키마', new_db, ';');
    @output에서 준비 stmt;
    실행 표준;

    old_tables를여십시오;
    반복
        FETCH old_tables INTO current_table;
        그렇지 않은 경우
        SET @output = CONCAT ( 'alter table', old_db, '.', current_table, 'rename', new_db, '.', current_table, ';');
        @output에서 준비 stmt;
        실행 표준;

        END IF;
    END REPEAT가 끝날 때까지;

    CLOSE old_tables;

종료//
구분자;

이것은 테이블에 대해서만 작동하며 이러한 테이블에 트리거가없는 경우에만 작동합니다. 이것에 의해 뷰와 트리거가 이동되지 않습니다.
Olfan

7

가장 간단한 방법은 HeidiSQL 소프트웨어를 사용하는 것입니다. 무료이며 오픈 소스입니다. Windows 및 Wine이 설치된 모든 Linux (Linux, BSD, Solaris 및 Mac OS X에서 Windows 응용 프로그램 실행)에서 실행됩니다.

HeidiSQL을 다운로드하려면 http://www.heidisql.com/download.php로 이동하십시오 .

와인을 다운로드하려면 http://www.winehq.org/로 이동하십시오 .

HeidiSQL에서 데이터베이스의 이름을 바꾸려면 데이터베이스 이름을 마우스 오른쪽 버튼으로 클릭하고 '편집'을 선택하십시오. 그런 다음 새 이름을 입력하고 '확인'을 누르십시오.

너무 간단합니다.


1
저장 프로 시저가 있으면 이름을 바꿀 수 없습니다.
abksharma

@abksharma 실제로 메시지 Database "database_name" contains stored routine(s) which cannot be moved.트리거 (적어도 MariDB 데이터베이스의 경우)는 저장된 루틴으로 계산됩니다. 저장 프로 시저가 없지만 모든 트리거를 삭제할 때까지 데이터베이스 이름을 바꿀 수 없습니다.
izogfif

7

Mac 사용자의 경우 Sequel Pro(무료)를 사용하면 데이터베이스 이름을 바꾸는 옵션 만 제공됩니다. 이전 DB는 삭제하지 않지만.

관련 DB를 열면 다음을 클릭하십시오 : Database->Rename database...


때로는 오래된 DB를 살아 있지만 비어 있습니다. 그래도 복사본을 만들면 복사본을 만들고 이전 복사본을 삭제할 수 있습니다. 여전히 두 가지 간단한 단계입니다.
Roee Gavirel '

6

서버 오류에 대한 질문을 제기 MySQL의 프록시를 사용하여 매우 큰 데이터베이스를 복원 할 때 다운 타임을 해결하기 위해 노력. 나는 성공하지 못했지만 결국 데이터베이스 크기 때문에 덤프 / 가져 오기가 옵션이 아니기 때문에 RENAME DATABASE 기능이 필요하다는 것을 깨달았습니다.

MySQL에는 RENAME TABLE 기능이 내장되어 있으므로 간단한 Python 스크립트를 작성하여 작업을 수행했습니다. 나는 한 GitHub의에 게시 그것을 다른 사람에게 유용 할 수있는 경우에.



2
RENAME DATABASE가 RENAME TABLE이 아닌 구문에서 삭제되었습니다.
Duke

6

편의를 위해 아래는 db-name 및 new db-name이라는 두 개의 매개 변수로 실행해야하는 작은 쉘 스크립트입니다.

홈 디렉토리에서 .my.cnf 파일을 사용하지 않으면 mysql-line에 login-parameters를 추가해야 할 수도 있습니다. 이 스크립트를 실행하기 전에 백업하십시오.


#!/usr/bin/env bash

mysql -e "CREATE DATABASE $2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
for i in $(mysql -Ns $1 -e "show tables");do
    echo "$1.$i -> $2.$i"
    mysql -e "rename TABLE $1.$i to $2.$i"
done
mysql -e "DROP DATABASE $1"

1
또한 트리거가 연결된 테이블이나 다른 데이터베이스로 이름을 바꿀 수없는 뷰에는 작동하지 않습니다.
Olfan

6

아무도 이것을 언급하지 않은 것 같지만 여기에 다른 방법이 있습니다.

create database NewDatabaseName like OldDatabaseName;

그런 다음 각 테이블에 대해 다음을 수행하십시오.

create NewDatabaseName.tablename like OldDatabaseName.tablename;
insert into NewDataBaseName.tablename select * from OldDatabaseName.tablename;

그런 다음 원한다면

drop database OldDatabaseName;

이 방법은 거의 네트워크 트래픽이 거의없는 서버에서 전체 전송을 수행 할 수 있으므로 덤프 / 복원보다 훨씬 빠릅니다.

저장 프로 시저 / 뷰 / 등이있는 경우이를 전송해야 할 수도 있습니다.


2
내가 아는 한 5.x는 "like"키워드를 지원하지 create database않습니까? 어디서 구했어?
Dragas

다음은 create table like구문 링크입니다 : dev.mysql.com/doc/refman/5.7/en/create-table-like.html . 데이터베이스 생성과 관련하여 MySQL은 그 절을 삭제 한 것으로 보입니다.
Tuncay Göncüoğlu

4

이동할 테이블이 많은 경우 이름 바꾸기 SQL 스크립트를 생성하는 빠른 방법이 있습니다.

SELECT DISTINCT CONCAT('RENAME TABLE ', t.table_schema,'.', t.table_name, ' TO ',     
t.table_schema, "_archive", '.', t.table_name, ';' ) as Rename_SQL 
FROM information_schema.tables t
WHERE table_schema='your_db_name' ;

좋아 보이지만 저장 프로시 저나 뷰는 이동하지 않습니다.
davidpriceev

테이블 이름과 스키마 이름을 감싸기 위해 해시 표시를 추가해야합니다.
Funkodebat

4

ALTER DATABASEMySQL에 의해 제안 된 방법 RENAME DATABASE이며 삭제되었습니다.

에서 13.1.32 이름 바꾸기 DATABASE 구문 :

RENAME {DATABASE | SCHEMA} db_name TO new_db_name;

이 문장은 MySQL 5.1.7에서 추가되었지만 위험한 것으로 판명되어 MySQL 5.1.23에서 제거되었습니다.


7
구문 예제가 있습니까? alter database데이터베이스 자체의 이름을 바꾸는 데 사용할 수 있는 방법을 모르며 연결된 문서에서 가능하다고 제안하지 않습니다.
Jordan

@Jordan 나도 관심이 있습니다. 나는 5.1 버전에서만 작동하지만 지금은 업데이트 할 수 없다는 것을 시도하고 시도하고 알았습니다.
fancyPants

5
-1 : 제안 된 방식에 대한 글을 쓴 후 제안되지 않은 방식의 예를 제시하면서 완전히 누락되어 예를 보여줍니다.
hakre

3
이것은 잘못이다. MySQL의 데이터베이스 이름 바꾸기 문서 는 rename_database는 매우 구체적인 이름 바꾸기 작업 (일반적인 DB 이름 바꾸기의 경우는 아님)을 위해 고안되었으며 현재는 alter database로 처리됩니다. '새로운 인코딩으로 데이터베이스 이름을 업그레이드하는 작업을 수행하려면 ALTER DATABASE db_name UPGRADE를 사용하십시오 DATA DIRECTORY NAME 대신 '이 명령을 사용하여 원하는대로 데이터베이스의 이름을 바꿀 수는 없습니다.이 명령에는 새로운 db 이름을위한 장소도 없습니다!
Kanat Bolazar

3

MySQL 관리자에서 다음을 수행하십시오.

  1. 카탈로그에서 새 데이터베이스 스키마를 작성하십시오.
  2. 백업으로 이동하여 이전 스키마의 백업을 작성하십시오.
  3. 백업을 실행하십시오.
  4. 복원으로 이동하여 3 단계에서 만든 파일을 엽니 다.
  5. 대상 스키마에서 '다른 스키마'를 선택하고 새 데이터베이스 스키마를 선택하십시오.
  6. 복원을 시작하십시오.
  7. 새 스키마를 확인하고 적절하게 보이면 이전 스키마를 삭제하십시오.

MySQL 관리자는 큰 데이터베이스를 처리 할 수 ​​없으며 그다지 빠르지 않습니다
deadprogrammer

3

phpmyadmin 에서 쉽게 데이터베이스 이름을 바꿀 수 있습니다

select database 

  goto operations tab

  in that rename Database to :

  type your new database name and click go

이전 테이블을 삭제하고 테이블 데이터를 다시로드하도록 요청하십시오.

데이터베이스 이름이 변경되었습니다


3

phpMyAdmin을 사용하는 경우 을 이름을 바꾸려는 데이터베이스를 선택한 후 "작업"탭으로 이동할 수 있습니다. 그런 다음 마지막 섹션 "데이터베이스 복사"(또는 이와 유사한 항목)로 이동하여 이름을 지정하고 아래 옵션을 선택하십시오. 이 경우 "구조 및 데이터"와 "복사하기 전에 데이터베이스 만들기"확인란을 선택하고 마지막으로 해당 섹션에서 "이동"버튼을 눌러야한다고 생각합니다.

그건 그렇고, 나는 스페인어로 phpMyAdmin을 사용하고 있기 때문에 섹션의 이름이 영어인지 확실하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.