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


48

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

MySQL 온라인 매뉴얼에서 RENAME DATABASE 명령에 대해 언급했습니다 (이 문서 페이지는 Oracle에 의해 얼마 전에 제거되었습니다).

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

어떻게 진행합니까? 이론적 근거 : 우리는 프로젝트의 코드 이름으로 시작했고 이제 데이터베이스 이름이 프로젝트의 최종 이름을 반영하기를 원합니다.


네 가지 답변 모두 의미가 있습니다. 가능한 많은 솔루션이있는 질문입니다.
nalply 2016 년


답변:


59

에서 일란 Hazan에 의해 블로그 게시물 :

MySQL에서는 데이터베이스 이름 변경이 지원되지 않습니다. MySQL 데이터베이스의 이름을 바꾸려면 다음 중 하나를 수행하십시오.

  1. 새 데이터베이스를 작성하고 이전 데이터베이스의 모든 테이블 이름을 새 데이터베이스에 포함 시키십시오.

    CREATE database new_db_name;
    RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;
    DROP database db_name;
    
  2. Linux 쉘에서 mysqldump를 사용하여 이전 데이터베이스를 백업 한 다음 MySQL 유틸리티를 사용하여 덤프 된 데이터베이스를 새 이름으로 복원하십시오. 마지막으로 drop database 명령을 사용하여 이전 데이터베이스를 삭제하십시오. 이 옵션은 큰 데이터베이스에서 성능이 떨어질 수 있습니다.

    mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "CREATE DATABASE new_db_name"
    mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "DROP DATABASE db_name"
    
  3. 간단한 Linux 스크립트 작성 (내가 가장 좋아하는 솔루션)

    #!/bin/bash
    
    dbuser=xxxx
    dbpass=xxxx
    olddb=xxxx
    newdb=xxxx
    
    mysqlconn="mysql -u $dbuser -p$dbpass -h localhost"
    
    $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";
          echo "Renamed $olddb.$name to $newdb.$name";
    done;
    
    #$mysqlconn -e "DROP DATABASE $olddb"
    
  4. 모든 테이블이 MyISAM이면 이전 데이터베이스 폴더 이름을 바꿀 수 있습니다.

    1. MySQL 서버를 종료하십시오.
    2. 데이터베이스 폴더 이름을 새 이름으로 바꾸십시오.
    3. MySQL 서버를 시작하십시오.

다음은 MySQL 내에서 SQL에서 테이블 이름 바꾸기 명령을 직접 생성하는 다른 방법입니다. blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin

이렇게하면 첫 번째 솔루션에 대한 쿼리를 만드는 데 도움이됩니다. RENAME TABLE 뒤에 붙여 넣기 결과를 복사하십시오 SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';.
Syclone

그러나 새 DB에 데이터를 삽입하지 않으면 데이터가 손실됩니다.
rainman

감사합니다. 이것이 가장 좋은 대답입니다. 정말 고맙습니다!
typelogic

이 스크립트는 매우 깔끔하며 MariaDB 10.1에서 즉시 사용할 수 있습니다.
Luc

12

MySQL은 이것을 짜증나게합니다. 견실하고 신뢰할 수있는 유일한 솔루션은 사용하는 것 phpMyAdmin입니다.

Login-> click Scheme-> click Operations-> 찾기 Rename database to:-> 쓰기 NewName> click Go.

저것과 같이 쉬운. 모든 권한이 이월됩니다.


6
GUI를 솔루션에 대한 +1,하지만 커뮤니티 위키 답변에서 간단한 명령 및 스크립트는 완벽하게 "견고하고 신뢰할 수있는"이다
윌 셰퍼드

7

매우 간단한 해결책을 찾았습니다. MySQL을 종료하고 데이터베이스 디렉토리의 이름을 바꾸고 다시 시작하십시오. 그게 다야!

이전 이름을 참조하는 SQL 코드 또는 데이터가 있으면 조금 위험합니다. 그런 다음 응용 프로그램을 다시 시작하기 전에 변경해야합니다. 하지만 그렇게 할 필요는 없었지만 YMV입니다.

인터넷 검색은 다음과 같은 몇 가지 포인터를 제공합니다.

https://stackoverflow.com/questions/67093/how-do-i-quickly-rename-a-mysql-database-change-schema-name

http://www.delphifaq.com/faq/databases/mysql/f574.shtml


5

새 데이터베이스를 만든 다음 이전 데이터베이스에서 테이블을 .sql 파일 (mysqldump 사용)에 덤프하고 파일을 편집하고 일종의 작업을 수행 s/old_database/new_database/g한 다음 새 db로 다시 가져옵니다.
아마도 최선의 방법은 아니지만 작동합니다.


2

MySQL Management-Tool (예 : phpMyAdmin)을 사용할 기회가 있으면 쿼리를 생성 할 때 쉽게 이름을 바꿀 수 있습니다.

phpMyAdmin에서 그들은 또한 각 테이블을 생성하고 "INSERT INTO ... SELECT * FROM ..."에 의해 데이터를 삽입합니다. 따라서 체인을 연결하여 데이터를 복사합니다.

이 작업을 수행 할 수 없으면 덤프를 작성하고 sql-File을 새 데이터베이스로 다시 가져 오는 것이 좋습니다.

행운을 빕니다!

안부, 벤


2

데이터베이스 이름을 바꾸려면 다음 방법을 사용했습니다.

  1. mysqldump 또는 DB 도구 (예 : heidiSQL, mysql 관리자 등)를 사용하여 파일 백업

  2. 일부 텍스트 편집기에서 백업 (예 : backupfile.sql) 파일을 엽니 다.

  3. 데이터베이스 이름을 검색하고 바꾸고 파일을 저장하십시오.

  4. 편집 된 SQL 파일 복원

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