개발개발/Database 15

Mysql 테이블 단위로 dump 남기기

디비를 백업하는 과정에서 한번에 dump 를 남기면 만들긴 편하지만 나중에 특정 테이블 복구할때 불편해지는 경우가 있다. 그런 경우 테이블 단위로 백업을 해놨으면 할때가 있는데. 그때 사용할 스크립트. #!/bin/bash ID="아이디" PW="패스워드" DB="백업디비" NOW=$(date +"%Y%m%d") NOWTIME=$(date +"%Y%m%d%H") BACKUPPATH="/백업저장할위치/$NOW" if [ ! -d $BACKUPPATH ]; then mkdir -p $BACKUPPATH fi DBS="$(mysql -e 'show tables' -u$ID -p$PW $DB | grep -v 'Tables_in_tourde')" for table in $DBS do BACKUPFILE="$BA..

MySql 에서 두 테이블간의 데이터 복사 방법

[이슈] A_TABLE 라는 테이블의 특정한 조건에 해당되는 데이터를B_TABLE 라는 테이블로 옮기고 싶다. [방법]INSERT INTO B_TABLE (필드1, 필드2, 필드3, 필드4) SELECT 필드1, 필드2, 필드3, 필드4 FROM A_TABLE WHERE 조건 끝~ [속도]15,000개 복사 : 0.06x 초100,000개 복사 : 3.0x 초 갯수가 늘어날 수록 확연하게 느려지는데 이 부분은 서버의 디스크와 메모리 상태에 영향이 있을꺼 같은데. 체크 안해봤음. 나중에 SSD 로 바꾸거나 64비트 설치했을때 테스트 해봐야 될꺼 같음. [참고자료]http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

MySql 에서 정렬 후 그룹 하는 방법.

사용자들이 올린 글 중에 가장 최신의 글 한개씩만 출력해주는 부분이 필요했다. 정렬 후 그룹화 아무 생각없이 손 가는대로 뭐 되겠지 라는 생각으로 쿼리를 만들었다. SELECT * FROM tableName GROUP BY tableName.user_idx ORDER BY tableName.register_date 한눈에 실행해서 봤을땐 "뭐 그룹핑도 되고 최신에 올린것도 뜨네..." 라고 생각을 하고 덮었는데 다시 테스트를 해보니. 사용자별 가장 최신 글이 아닌 그룹된 사용자 중 가장 최신 게시물 순으로 정렬이 되는거 아닌가!!!! 원하는 프로세스는 [정렬 => 그룹화] 인데. 동작하는 프로세스는 [그룹화 => 정렬] 이였다. 제길!!! 해결 방안은 2가지. 우선! [1안] 테이블 구조를 날짜 역순으로..

Unable to lock ./ibdata1, error: 11 에러

mysql 를 재시작하는데 # service mysqld start Timeout error occurred trying to start MySQL Daemon. Starting MySQL: [FAILED] 라는 메시지가 나오면서 재시작이 안되는 문제 발견 mysql 로그를 살펴보니 # tail -f mysqld.log InnoDB: Check that you do not already have another mysqld process InnoDB: using the same InnoDB data or log files. InnoDB: Unable to lock ./ibdata1, error: 11 라는 메시지 뜸. 구글링을 해보니 디비 관련 파일에 문제가 생겼다는 거 같음 문제처리방법 # mv ibda..

MySQL 검색속도 : int 와 varchar 누가 더 빠르냐? #2

이전에 테스트 해봤을때 테이블의 데이터 형을 정교하게 다듬지 못하고 더 큰 데이터형을 사용했던 문제가 있었다. 다시 한번 데이터 형을 정리하여 테스트를 해봤다. 나머지 사항은 이전과 동일하고 테스트만 진행함 [테스트 결과] 1000개 랜덤한 숫자(매번계산) 1000개 동일한 숫자(계산없음) 데이터갯수 VARCAHR INT VARCAHR INT 10만개 0.5852 0.3639 0.5763 0.3183 100만개 0.4824 0.4782 0.4716 0.3645 1000만개 0.7839 1.9888 0.7659 0.4827 [분석] 1. 검색 속도 부분에서는 INT 형으로 검색하는 것이 VARCHAR 로 검색하는 것 보다 빠르다. 2. 나누는 작업이 추가될 경우 오히려 속도가 늦어짐 3. 1000만개 데이..

MySQL 검색속도 : int 와 varchar 누가 더 빠르냐?

이론서나 관련 내용에서는 INT 형이 VARCHAR 형보다 빠르다고 한다. 이 부분에 대해서는 동의~ 하지만 문제는 과연 얼마나 빠르냐? 라는 것이 궁금해서 호작질을 시작했다. [목적] INT 형과 VARCHAR 의 속도 차이를 알아본다. INT 형 검색이 속도가 빨라 VARCHAR 데이터를 숫자형으로 나눠서 검색을 하는 것이 더 효율적인지를 알아봄 [실험방법] 캐쉬를 사용하지 않은 상테에서 각 단계별로 5회 / 회당 1000번 랜덤한 데이터를 조회한다. 각회당 5초의 시간을 쉬어준다. 결과를 평균내어 소수점 4자리에서 반올림하여 사용한다. [데이터] 01010000000 ~ 01099999999 의 데이터(전화번호) 중복되지 않는 랜덤한 데이터를 10만개, 100만개, 1000만개 단위로 입력 [테이블..

Mysql mysql-bin 파일 삭제 & 관리

리플리케이션이나 다른 작업으로 인해 master-bin.00001 등의 파일이 생성될때가 있다. 해당 파일 삭제 방법 // 30일 이전 데이터 삭제 # mysql -uroot -p -e "PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)" or mysql> PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY); // 로그 파일로 복구 # /usr/local/mysql/bin/mysqlbinlog .../master-bin.00001 > backup_log.sql

mysql 에서 group by 사용할때 결과값 행수를 알아내기.

검색된 값이 몇개인지를 알기 위해 "select count(1) from table" 로 알아냈는데. group by 를 사용하여 셀렉해온 결과물에 대해서는 count 가 각각의 행마다 적용이 되어 원하는 값이 안나오게 되었다. 그래서 뒤져본 결과 PHP 함수상에서 mysql_num_rows 라는 함수가 있다. 속도는 느리지만 이것을 사용하는게 대안. 다른 방법들 중 제대로 되는것들은 드뭄. 대신 갯수가 많아지면 어떤 결과가 나올지 모르겠네. 아구

Mysql 백업하기

콘솔상에서 백업을 할 일이 왕왕 있음. 필요한 백업 명령어 전체 백업 받기 $ mysqldump -u아이디 -p패스워드 데이터베이스명 > 저장파일명 특정 테이블만 백업 받기 $ mysqldump -u아이디 -p패스워드 데이터베이스명 테이블명1 테이블명2 > 저장파일명 구조만 백업 받기 $ mysqldump -u아이디 -p패스워드 --no-data 데이터베이스명 > 저장파일명 데이터만 백업 받기 $ mysqldump -u아이디 -p패스워드 --no-create-info 데이터베이스명 > 저장파일명 복구 $ mysql -u아이디 -p패스워드 데이터페이스명 < 저장된파일명 이정도면 쓰는데 문제 없음...

반응형