Category: "MySQL, Oracle, 데이터베이스" , Tags: dmp, index, mysqldump
더위에 매우 약한 사장입니다.
도쿄의 여름은 최악으로 더워요.
좀 더 식혀 주세요라고 여러방면으로 부탁하고 싶어요.
단 아직 여름이 아니지만.
그럼, 슬슬 MySQL의 이야기를 조금씩.
10년이상 데이터베이스의 일을 해 와서, 여러가지 접해 본 결과, Oracle밖에 없다라고 생각하고 있었을 때 였습니다.
MySQL의 이름은 들은 적은 있고, 가볍고, 빠르다라고 하는 굉장히 좋은 평판도 듣고 있어서, 업계의 사람으로서 어느 정도 정보는 얻고 있었습니다.
실제로는 예비지식 없이 갑작스럽게 실전투입 된 것이지만, 첫 인상으로서는, 「거의 Oracle」이라고 느꼈습니다.「낙승」이라고. 사실은 여기에서부터 악전 고투가 시작되지만, 이 시점에서는 알 도리가 없었음.
Oracle기술자가 MySQL에서 장애를 겪게 되는 몇 개의 포인트를 소개하겠습니다.
여러 곳에서 이야기 되고 있기 때문에, 많이 이야기하려고는 생각하지 않고 있지만,
기술 지원하고 있을 때 등에 반드시 나오는 이야기꺼리를 소개해 보죠.
수준이 높은 사람은 읽을 필요가 없지만, 저희 페이지에 도달하고 있는 시점에서,
어느 쪽이냐라고 말하자면 MySQL초보자SE (「MySQL은 몰라요」라고 말하는데도 「괜찮아,괜찮어」라고 말해, 예비지식을 학습하는 틈도 없이, 순식간에 의뢰처에 투입되어서 방치되는 한참 일할 나이의 SE)가 많다고 생각되므로,뭐 괜찮지 않을까라고.
무엇인가에 도움이 되면 좋겠네요. 응원하고 있어요.
그 1:mysqldump에서의 출력을 임포트 했을 때에 프라이머리 이외의 index가 꺼진다.
Oracle의 export와 닮아서 사용하는 상황이 꽤 다른 것이 mysqldump.
생생해서, 저는 mysqldump 쪽이 맘에 듭니다.
그건 그렇고 타이틀의 건은, 실제로 mysqldump의 출력을 봐 보면 지극히 당연한 것이지만.
우선,
mysqldump -F -l -uxxxx -p –all-databases > test.sql 으로 출력한 파일을 임포트 하려고 할 경우,
dmp파일 내의 Table 정의에 대한 출력은 아래와 같이 됨.
Drop table
Create Table
Lock Tables
Alter Table Disable Keys
Insert Table
Alter Table Enable Keys
윗 처럼 선두의 drop으로 테이블 정의의 모든 것이 삭제되기 때문에, Create문장에 포함된 Primary Key 이외의 Index는 원래로 되돌릴 수 없음. 당연하지만.
만약 DB정의도, 테이블 정의도, Index정의도 그대로로, 데이터를 모두 truncate 하고 있는 것 같은 경우에, 데이터만 임포트를 하고 싶다면, 아래의 커맨드로 dump 하면 데이터만의 dmp을 만들 수 있음.
mysqldump -F -l -uxxx -p –all-databases –no-create-info –no-create-db –skip-add-drop-database –skip-add-drop-table > test.sql
–no-create-info :create table을 출력하지 않음
–no-create-db :create database를 출력하지 않음
–skip-add-drop-database :drop database를 출력하지 않음
–skip-add-drop-table :drop table을 출력하지 않음
테스트시 등, 데이터만 빈번하게 출납을 되풀이할 때에는 유효할지도 모름.
단, 큰 테이블로 여러개의 Index를 펼치고 있는 것 같은 경우에는, Insert전에 많은 Index가 있으면 당연 Insert속도는 늦어짐.
현실적으로는 Create Index의 SQL을 별도로 만들어 두고, drop table 하는 dmp을 출력시켜서,
임포트가 끝난 후에 Index를 펼치는 쪽이 더 빠를 경우도 있음 (수고를 빼고도)
mysqldump의 옵션에 의한 출력 결과의 차이를 아는 것 만으로도 의미가 있다고 생각해요.
시도해 봐 주시길.


