2015-01-16 2 views
3

mysqldump를 사용하여 my mysql 데이터베이스의 복사본을 만들고 싶습니다.mysqldump로 다른 메모리 엔진을 설정하십시오.

나는

mysqldump db1 | mysql db2 

그러나 DB1 엔진 =의 MyISAM 모든 테이블입니다이 유닉스 명령을 사용합니다. DB2가 엔진 = 메모리를 가진 모든 테이블을 가지기를 바란다.

누구나 한 명령에서이 작업을 수행하는 방법을 알고 있습니까? for-loop에서 모든 테이블을 변경하기 위해 PHP/Python 등의 스크립트를 호출하고 싶지 않습니다.

감사합니다.

+1

'sed'를 파이프하여'MyISAM'을'memory' 또는 정확한 문자열이 무엇이든 대체 할 수 있습니다. 그러나 db 데이터가 'myisam'이라는 단어를 자연스럽게 포함한다면, 테이블 구조뿐만 아니라 데이터도 바꿀 수 있습니다. 더 나은 옵션은 임시 파일로 덤프하고 파일을 편집 한 다음 모든 구조를 적절하게 변경 한 다음 가져 오기를 수행하는 것입니다. –

+0

답장을 보내 주셔서 감사합니다. 그러나 유닉스 명령으로 사용하고 싶기 때문에 스크립트 나 플러그인을 사용할 필요가 없습니다. 원본 데이터베이스가 대상 데이터베이스와 다른 서버에 있기 때문에. – user3605780

+0

그래서'sed'를 사용하십시오. 잘못된 것을 검색/대체 할 때 DB의 데이터를 손상시킬 수 있다는 것을 알고 있어야합니다. –

답변

4

Marc B 덕분에이 솔루션을 발견했습니다.

전체 문자열 'ENGINE = MyISAM'을 사용하면 문제가 발생하지 않습니다. 다른 사람은 RandomSeed에서 2 단계 옵션을 사용할 수 있습니다 (미성년자 조정과를 : --no-만들 테이블은 --no-만들-정보이어야한다) :

mysqldump --no-data db1 > dump.sql && sed -i 's/ENGINE=MyISAM/ENGINE=MEMORY/g' dump.sql && mysql db2 < dump.sql && mysqldump --no-create-info db1 | mysql db2 && rm -rf dump.sql 

이 두 단계 방법은 당신이있는 경우에 안전 귀하의 데이터 어딘가에 'ENGINE = MyISAM'을 가질 가능성. 그러나 명령이 실행될 때 데이터 (db2)에 액세스 할 수 없으므로 대형 데이터베이스에서 문제가 발생할 수 있습니다.

입력 해 주셔서 감사합니다.