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 년 후에 답변을 편집 해 드리겠습니다.
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
)을 실행하기 전에 MYDATABASE의 모든 발생을 점검 cat mydump.sql | grep "MYDATABASE"
하여 데이터베이스 이름 만 변경되고 다른 데이터는 그대로 유지하십시오.
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
# 잠재적으로 더 안전한 스팀 편집. 내 데이터베이스 덤프에는 USE 또는 CREATE DATABASE 문이 포함되어 있지 않지만 db 이름은 SQL 주석, 뷰 및 트리거 (MySQL 5.7)에 있습니다. 주석에서 데이터베이스 이름을 바꾸지는 않지만 결과 데이터베이스에는 영향을 미치지 않습니다. 이것은 나를 위해 잘 작동했습니다.
파일이 당신이 가지고 있고 쉘 / 콘솔에서 파일을 조작하는 경우 ,, 및 옵션으로 sed
시작하는 줄에서 문자열 대체를 수행 하는 데 사용 합니다 (mysqldump 주석)CREATE DABATASE
CREATE TABLE
USE
--
데이터베이스 작성, 테이블 작성, 사용 및 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
사용되지 않았다.
--no-create-db
하고하지 않고 --database
또는 --databases
.
다음 두 규칙을 사용하여 덤프를 수행하는 경우 :
--databases
, 등의 옵션을 사용하지 말고 --database
이러한 옵션없이 명령 끝에 데이터베이스 이름을 입력하십시오.--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
--no-create-db
하고하지 않고 --database
또는 --databases
.
-Ddb2
있다면 앞에 하이픈 이 없어야합니다. 적어도 포함시킬 때 MySQL 구문 오류가 발생했습니다.