태그 보관물: mysqldump

mysqldump

다른 이름으로 mysql 데이터베이스 복원 복원하는 방법 덤프 파일을 열고 편집하고

mysqldump 파일과 다른 이름으로 mysql 데이터베이스를 복원하는 방법 덤프 파일을 열고 편집하고 싶지 않습니다. 다른 더 좋은 방법이 있습니까?



답변

mysqldump가 데이터베이스를 만들거나 선택하지 않는 방식으로 덤프를 만들도록 할 수 있습니다.

예 : 데이터베이스 db1을 덤프하고 데이터베이스 db2로로드 중입니다.

이것은 CREATE DATABASE와 USE 명령을 덤프에 넣습니다.

mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql

이것은 CREATE DATABASE와 USE 명령을 덤프에 넣지 않습니다 ( 원하는 것입니다 ).

mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql

다음 네 가지 방법 중 하나로 다른 데이터베이스 (예 : db2)에로드 할 수 있습니다.

옵션 1

$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2

옵션 2

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql

옵션 3

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql

옵션 4

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql

시도 해봐 !!!


답변

나는 덤프, 편집 및 삽입의 큰 팬입니다. 그러나 텍스트 파일 (덤프 파일)을 열어서 변경할 필요는 없습니다 (여러 줄 길이 일 때 특히 유용합니다). 데이터베이스를 덤프하려면 MYDATABASE.

mysqldump MYDATABASE > mydump.sql

그런 다음 sed를 사용하여 이전 데이터베이스 이름을 다음과 같이 새 이름으로 바꿉니다.

sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql

새 데이터베이스를 생성하고 다시 가져 오기만하면 새 데이터 배지 MYNEWDATABASE에 모든 테이블이 생성됩니다.

mysqladmin create MYNEWDATABASE

mysql MYNEWDATABASE < mydump.sql

편집 : 의견 섹션의 일부 좋은 사람들이 지적했듯이, 일부 데이터가 위의 방법으로 변경되면이를 피할 수있는 정확한 방법이 위험합니다.

1) 이렇게 변경하기 전에 덤프에서이를 잡으십시오.

cat mydump.sql | grep "MYDATABASE"

2)`를 추가하여 다음과 같이 더 안전하게 만들 수 있습니다.

sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql

다른 사람이 구체적으로 제안하는 경우 4 년 후에 답변을 편집 해 드리겠습니다.


답변

나는 오래 전에 이것을 한 번했습니다.

모든 데이터를 내보낼 때 파일의 시작 부분에 “use database x”와 같은 데이터베이스 이름을 설정하는 옵션이 있습니다.

따라서이 선언을 변경할 수 있습니다.


답변

파일이 당신이 가지고 있고 쉘 / 콘솔에서 파일을 조작하는 경우 ,, 및 옵션으로 sed시작하는 줄에서 문자열 대체를 수행 하는 데 사용 합니다 (mysqldump 주석)CREATE DABATASECREATE TABLEUSE--

데이터베이스 작성, 테이블 작성, 사용 및 mysqldump 주석과 일치하는 행에서 db 이름 바꾸기

dbfile="yoursqldumpfile.sql";
dbname="current_db_name";
dbnewname="new_db_name";
dbnewfile="/tmp/$dbnewname.sql";
cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile

물론 여기에 언급 된 많은 답변과 같이 mysqldump 백업에 CREATE DATABASE 및 USE 행이 포함되어 있지 않은 경우 더 쉽습니다. 옵션을 의미 --all-databases, --databases또는 짧은 버전 -A또는 -B사용되지 않았다.


답변

다음 두 규칙을 사용하여 덤프를 수행하는 경우 :

  1. --databases, 등의 옵션을 사용하지 말고 --database이러한 옵션없이 명령 끝에 데이터베이스 이름을 입력하십시오.
  2. 옵션을 포함 --no-create-db

다음을 수행하면 mysqldump가 데이터베이스를 참조하지 않고 SQL을 작성하므로 가져 오기 중에 mysql 명령 끝에 새 데이터베이스 이름을 사용할 수 있습니다!

mysqldump  --no-create-db old_db_name --single-transaction --compress --order-by-primary --host old_db_host -u old_db_user -pOld_db_password | mysql --host new_host -u new_user -pnewpassword new_db_name