[mysql] MySQL 데이터베이스의 이름을 빠르게 바꾸려면 어떻게해야합니까 (스키마 이름 변경)?
에서 MySQL의 매뉴얼 MySQL은 이를 다루고 있습니다.
일반적으로 데이터베이스를 덤프하고 새 이름으로 다시 가져옵니다. 매우 큰 데이터베이스에는 옵션이 아닙니다. 분명히 RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
나쁜 일을하고 소수의 버전에만 존재하며 전반적으로 나쁜 생각입니다 .
답변
들어 이노 , 다음은 작동하는 것 같다 : 다음 새 데이터베이스로 차례로 각 테이블의 이름을 변경, 새로운 빈 데이터베이스를 만들 :
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 DATABASE
MySQL 에서 누락 된 명령 에뮬레이션 :
- 새로운 데이터베이스 생성
-
다음을 사용하여 이름 바꾸기 쿼리를 작성하십시오.
SELECT CONCAT('RENAME TABLE ',table_schema,'.',table_name, ' TO ','new_schema.',table_name,';') FROM information_schema.TABLES WHERE table_schema LIKE 'old_schema';
-
그 출력을 실행
- 오래된 데이터베이스 삭제
MySQL에서 누락 된 RENAME DATABASE 명령 에뮬레이션 에서 가져 왔습니다 .
답변
세 가지 옵션 :
-
새 데이터베이스를 작성하고 서버를 끄고 한 데이터베이스 폴더에서 다른 데이터베이스 폴더로 파일을 이동 한 후 서버를 다시 시작하십시오. 모든 테이블이 MyISAM 인 경우에만 작동합니다.
-
새 데이터베이스를 작성하고 CREATE TABLE … LIKE 문을 사용한 다음 INSERT … SELECT * FROM 문을 사용하십시오.
-
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 데이터베이스에서 작동하지 않습니다. 이 경우 데이터베이스를 덤프하고 다시 가져와야합니다.