○ 앱 만들기 교육 과정.
1. 앱 기획 : 어떤 앱을 만들고 왜 만드는가.
2. 프로젝트 관리 : 우리 팀에선 누가 어떤 역할을 맡을 것인가.
3. 시장조사 : 비슷한 앱을 어떤 것이 있고 우리는 어떻게 앱을 차별화 할 것인가.
4. 기획 및 디자인 : 앱의 메뉴는 어떻게 나누며 어떻게 디자인 할 것인가.
5. 개발 : 어떻게 프로그래밍 하여 앱을 완성할 것인가.
6. 마케팅 : 어떤 마케팅을 하여 시장에 앱을 퍼뜨릴 것인가.
○ 앱 만들기 교육 과정.
1. 앱 기획 : 어떤 앱을 만들고 왜 만드는가.
2. 프로젝트 관리 : 우리 팀에선 누가 어떤 역할을 맡을 것인가.
3. 시장조사 : 비슷한 앱을 어떤 것이 있고 우리는 어떻게 앱을 차별화 할 것인가.
4. 기획 및 디자인 : 앱의 메뉴는 어떻게 나누며 어떻게 디자인 할 것인가.
5. 개발 : 어떻게 프로그래밍 하여 앱을 완성할 것인가.
6. 마케팅 : 어떤 마케팅을 하여 시장에 앱을 퍼뜨릴 것인가.
재미있는 게임 앱 모음. (0) | 2016.11.30 |
---|---|
좋은 중고차 고르기 (0) | 2016.11.14 |
휴대폰 도용 방지. (0) | 2016.04.05 |
인터넷알바 (0) | 2015.09.30 |
섹시 속옷 (0) | 2015.09.21 |
UI 라이브러리
- jQuery UI : http://jqueryui.com/
- Kendo UI : http://demos.telerik.com/kendo-ui/
- 액시스제이 : https://www.axisj.com/ko/axisj/docs
소켓(Socket) 설명. 이해. (0) | 2017.01.18 |
---|---|
소켓 통신. 네트워크 프로그래밍. (0) | 2017.01.18 |
저장 버튼(save button) 더블클릭 방지. (1) | 2015.04.28 |
이클립스 주요 기능 (0) | 2015.03.12 |
IPS(Intrusion Prevention System) 침입방지시스템 (0) | 2014.09.24 |
2016. 7. 15. 17:50 IT/MySQL
[MySQL Program] mysqlbinlog
앱으로 보기 본문 기타 기능
mysqlbinlog 프로그램은 어려운 부분은 아니다. 하지만 간과하기 쉬운 몇가지가 있어서 좀 생각하고 넘어가는게 좋을 것 같다.
mysqlbinlog 프로그램을 사용한다는 것은 binary-log format, relay-log format, statement-based format, row-based format, Point-In-Time recovery 와 같은 주제들에 모두 관심을 갖는다는 의미라서 중요하다.
Section 5.2.4, “The Binary Log”
Section 17.2.4, “Replication Relay and Status Logs”
Section 17.2.1, “Replication Formats”
Section 7.5, “Point-in-Time (Incremental) Recovery Using the Binary Log”
MySQL Internals: The Binary Log (19.7 Event Structure, 19.6 Event Meanings, 19.9 Event Data for Specific Event Types)
[용도]
mysqlbinlog 프로그램은 보통 두 가지 용도로 사용한다.
1. 추적
데이터에 문제가 발생하거나 마스터 슬레이브간 불일치가 발생하거나 어떤 트랜잭션이 문제가 되었거나 등 어떤 문제가 발생했을 때
write 쿼리에 대해 추적할 수 있는 기능을 제공한다.
복제를 위해 또는 이런 증거를 남기기 위해 binary log를 활성화 시켰다면 mysqlbinlog 프로그램으로 Statement 형태로 변환해서 볼 수 있게 된다.
2. 복구
MySQL의 백업정책은 회사마다 다르겠지만 보통 하루 한번은 full backup을 할 것이다.
이때 full backup만 가지고 복구해서 해결되면 다행이지만 그렇지 않은 경우 binary log를 적용하여 PIT recovery를 수행해야한다.
시점은 datetime일 수도 있고 sequence number 일수도 있다.
[사용법]
shell> mysqlbinlog [options] binlog.0000003
[결과파일]
# at 141 (해당 이벤트의 시작 포지션)
#100309 9:28:36 server id 123 end_log_pos 245 (로그 남은 시간, server id, 끝나는 포지션)
Query thread_id=3350 exec_time=11 error_code=0 (thread id, 수행시간 등)
Statement는 사실 그냥 우리가 알아볼수 있는 쿼리형태라서 따로 설명이 필요 없다.
Row-Based Event 에 대해서만 잠시 살펴보겠다.
이벤트 타입은 3가지로 기록된다. (WRITE_ROWS_EVENT, UPDATE_ROWS_EVENT, DELETE_ROWS_EVENT)
(원본쿼리 예제)
CREATE TABLE t
(
id INT NOT NULL,
name VARCHAR(20) NOT NULL,
date DATE NULL
) ENGINE = InnoDB;
START TRANSACTION;
INSERT INTO t VALUES(1, 'apple', NULL);
UPDATE t SET name = 'pear', date = '2009-01-01' WHERE id = 1;
DELETE FROM t WHERE id = 1;
COMMIT;
(결과1) mysqlbinlog 로 본 결과
Statement-Based와는 달리 알아보기 힘들게 되어 있다.
예제에 따라 Write_rows, Update_rows, Delete_rows 이벤트로 나뉘는 걸 확인 할 수 있다.
shell> mysqlbinlog log_file
...
# at 218
#080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==
'/*!*/;
...
# at 302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/*!*/;
...
# at 400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP
'/*!*/;
(결과2) --vervose 옵션을 1개 사용
이제는 좀 알아보기 편하게 되었다. 매칭되는 컬럼의 개수와 값을 알 수 있다.
shell> mysqlbinlog -v log_file
or
shell> mysqlbinlog -v --base64-output=DECODE-ROWS log_file
...
# at 218
#080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==
'/*!*/;
### INSERT INTO test.t
### SET
### @1=1
### @2='apple'
### @3=NULL
...
# at 302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/*!*/;
### UPDATE test.t
### WHERE
### @1=1
### @2='apple'
### @3=NULL
### SET
### @1=1
### @2='pear'
### @3='2009:01:01'
...
# at 400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP
'/*!*/;
### DELETE FROM test.t
### WHERE
### @1=1
### @2='pear'
### @3='2009:01:01'
(결과3) --vervose 옵션을 2개 사용
이제는 컬럼의 데이터 타입과 nullable 도 알 수 있게 되었다.
shell> mysqlbinlog -vv log_file
...
# at 218
#080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==
'/*!*/;
### INSERT INTO test.t
### SET
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
### @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */
...
# at 302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/*!*/;
### UPDATE test.t
### WHERE
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
### @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */
### SET
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
### @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */
...
# at 400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP
'/*!*/;
### DELETE FROM test.t
### WHERE
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
### @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */
(결과4) --base64-output=DECODE-ROWS 와 --verbose 옵션의 조합
binary 형태도 제외하고 보여준다.
shell> mysqlbinlog -v --base64-output=DECODE-ROWS log_file
...
# at 218
#080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F
### INSERT INTO test.t
### SET
### @1=1
### @2='apple'
### @3=NULL
...
# at 302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F
### UPDATE test.t
### WHERE
### @1=1
### @2='apple'
### @3=NULL
### SET
### @1=1
### @2='pear'
### @3='2009:01:01'
...
# at 400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F
### DELETE FROM test.t
### WHERE
### @1=1
### @2='pear'
### @3='2009:01:01'
4.6.7.2 mysqlbinlog Row Event Display
[옵션들]
--read-from-remote-server
옵션의 경우 리모트서버에서 binlog를 읽을 수 있게 처리해준다. 타겟이 되는 서버에 대한 옵션을 같이 써줘야한다.
--host, --password, --port, --protocol, --socket, and --user
--hexdump
16진수로 덤프를 해준다. 복제에 문제가 생겼을 때 trace하는데 유용하다.
--rewrite-db
DB명을 바꿀 수 있다. 별거 아닌 것 같아도 복구 할때 유용하다.
--database
--binlog-do-db 옵션과 마찬가지로 특정 DB만 내린다. 이건 주의해야한다.
--start-datetime, --stop-datetime
시점(시간)을 명시한다.
--start-position, --stop-position
시점(포지션)을 명시한다.
--verbose
row event를 SQL형태로 변환해준다.
--exclude-gtids, --include-gtids, --skip-gtids
GTID 옵션들
[Row-Based 로 변경되는 경우들]
5.2.4.3 Mixed Binary Logging Format
Mysql 세자리 콤마 찍기. (0) | 2016.11.16 |
---|---|
Mysql 수학 함수 (0) | 2016.11.03 |
Mysql Binary log(bin log). (0) | 2016.07.15 |
mysql 여러가지 작업(optimize, Mornitoring 등). (0) | 2016.05.09 |
mysql table name ibd 형태일 시 파일 의미. (0) | 2016.04.28 |
2016. 7. 15. 16:08 IT/MySQL
Mysql 데이터를 좀 더 안정적으로 보호하기 위해선 바이너리 로그가 필수다.
my.cnf에 보면
log-bin=mysql-bin 을 주석처리 하지 않는다면 로그를 지속적으로 쌓을 것이다.
혹은 Mysql 시작시에 --log-bin[=file_name] 을 사용
로그가 용량을 꽤 차지 하게 되므로, 주기적으로 데이터베이스를 백업 받고 바이너리 로그를 지워주는 것이 좋다.
복구할 때는
mysqlbinlog msyql-bin.000001 > bakcup.sql
형식으로해서 쿼리문으로 복구가 가능하다.
로그를 관리할려면 my.cnf에 아래와 같이 설정하면 된다.
binlog_cache_size = 50M # binlog cache 사이즈
max_binlog_size = 500M # bin로그 maximum 사이즈
expire_logs_days = 3 # 로그 만료기간
바이너리 로그 리스트는
mysql> show binary logs;
mysql> show master logs;
해당 로그 파일을 삭제할 때는
mysql> purge master logs to 'mysql-bin.000010';
특정 일자기준으로 삭제할 때는
mysql> purge master logs before date_sub(CURRENT_DATE, INTERVAL 31 DAY);
my.cnf 설정 외에 환경변수를 수정해도 된다.
mysql>show variables;
에서 expire_logs_days를 보면 알 수 있다.
기본적으로는 0으로 되어 있어 삭제가 되지 않으나
mysql> set global expire_logs_days=7;
로 설정하면 7일동안 저장하고 삭제한다.
Mysql 수학 함수 (0) | 2016.11.03 |
---|---|
mysqlbinlog query 보기 (0) | 2016.07.15 |
mysql 여러가지 작업(optimize, Mornitoring 등). (0) | 2016.05.09 |
mysql table name ibd 형태일 시 파일 의미. (0) | 2016.04.28 |
OPTIMIZE TABLE. 테이블 깨졌을 때 조치하는 법. (0) | 2016.01.14 |
2016. 6. 29. 15:41 리눅스(Linux)
Unix/Linux 디스크 용량 확인 (df/du)
디스크 용량을 확인하는 명령어들이다.
df : 디스크의 남은 용량을 확인
df -k : 킬로바이트 단위로 현재 남은 용량을 확인
df -m : 메가바이트 단위로 남은 용량을 왁인
df -h : 보기 좋게 보여줌
df . : 현재 디렉토리가 포함된 파티션의 남은 용량을 확인
du : 현재 디렉토리에서 서브디렉토리까지의 사용량을 확인
du -a : 현재 디렉토리의 사용량을 파일단위 출력
du -s : 총 사용량을 확인
du -h : 보기 좋게 바꿔줌
du -sh * : 한단계 서브디렉토리 기준으로 보여준다.
[Unix] defunct 프로세스. (0) | 2017.05.11 |
---|---|
여러 프로세스 한번에 죽이기 kill (0) | 2016.12.05 |
centos rsync 설정. (0) | 2016.04.28 |
iptables 세팅 (0) | 2016.04.04 |
리눅스/유닉스, sar 을 통한 시스템 관리. (0) | 2016.04.01 |
2016. 5. 30. 11:42 IT/jquery_javascript
1. Front Page
$.ajax({
url:"/test.php",
data:{
mode : "ins",
name : encodeURIComponent(userName)
},
type:"POST",
....
});
encodeURIComponent는 알겠지만 URL 형식으로 데이터를 넣을 수 있도록 문자열을 인코드한다. 결과적으로 name에는 %ED%97%90%EB%AD%90%EC%95%BC 뭐 이런식으로 데이터가 저장된다. 경우에 따라선 자동으로 변환해주나 브라우저 호환성을 위해 강제로 변환하게 하자.
2. Server Page
<?php
$name = $_GET['name'];
// 1. 설명이 필요한가? 전달되는 방법(method)이 다르면 당연히 거기에 맞게 변경해준다.
$name = urldecode($name);
// 2. %ED%97... 식으로 변환된 문자열을 본래 형태의 문자열로 변환한다. 이 반대 역할의 함수는 당연히 urlencode.
$name = iconv("utf-8","euc-kr",$name);
// 3. 변환 이후에는 utf-8로 데이터가 남아서 이걸로 지지고 볶을 순 없다. euc-kr로 변환 후 볶아준다.
$name = mb_convert_encoding($name,"euc-kr","utf-8");
// 4. 일부 서버에서는 iconv 함수를 지원하지 않는 경우도 간혹 있다. 그럴 경우 mb_string 계열 함수를 통해 변환을 해준다.
// 5. 필요하면 추가적인 보안조치(SQL Injection, XSS 필터등)를 해준다.
// 6. echo
echo iconv("euc-kr", "utf-8", "테스트 발송 되었습니다. ");
// 7. PROFIT!
?>
자바스크립트 함수 파라미터 디폴트 처리. (0) | 2018.01.31 |
---|---|
모바일 체크. 모바일 기종 체크. 브라우저 체크. (0) | 2017.07.12 |
iframe submit (0) | 2016.05.19 |
javascript 페이지 이동. (0) | 2016.03.03 |
저장 버튼 더블 클릭, 중복 클릭 방지 (1) | 2015.10.28 |
2016. 5. 19. 11:49 IT/jquery_javascript
<iframe name="sIfrm" id="sIfrm" style="display:none;"></iframe>
<form name="ezFrm" method="post" accept-charset="utf-8">
<input type="hidden" name="pcode" value="c1">
<input type="hidden" name="c_email" value="__이메일__">
</form>
<script type="text/javascript">
var frm = document.ezFrm;frm.target="sIfrm";
frm.action ="http://www.test.com/action.php";
frm.submit();
</script>
모바일 체크. 모바일 기종 체크. 브라우저 체크. (0) | 2017.07.12 |
---|---|
PHP EUC-KR ajax 한글 깨짐 처리. (0) | 2016.05.30 |
javascript 페이지 이동. (0) | 2016.03.03 |
저장 버튼 더블 클릭, 중복 클릭 방지 (1) | 2015.10.28 |
크로스 브라우징시 브라우저 지원되는 객체 식별하여 id 값 가져오는함수 (0) | 2015.10.16 |
2016. 5. 11. 15:41 경제
펀드온라인코리아 펀드슈퍼마켓 추천인 코드 : FS-1997-5946 (0) | 2017.12.21 |
---|---|
증여 절세 - 부담부 증여 (0) | 2017.02.02 |
[디비디비딥 1화] 재택 알바의 정답! 돈 버는 방법도 각양각색! 디비디비딥을 만나다.. (1) | 2015.04.28 |
[삼성선물] 해외선물 아시아가 대세다(아시아 지수 이벤트). 인도 nifty, 일본 nikkei, 중국 A50 (0) | 2015.04.28 |
CNN : 부자 되는 25가지 수칙 (0) | 2014.10.31 |
2016. 5. 9. 11:32 IT/MySQL
1. 빈번한 삭제작업이 일어남 : Dump & Re-Insert 혹은 Table Optimization 을 통해 Garbage 공간을 줄인다. 또한 Indexing 작업도 이루어진다.
2. Mornitoring Tool : mtop(무료).
3. Mysql Partitionning Table : 5.7 버전 이상 지원.
4. LVS : 무료 분산 Tool. Session 공유됨(1번 서버에 접속한 IP는 몇시간 동안 1번 서버에 접속됨).
mysqlbinlog query 보기 (0) | 2016.07.15 |
---|---|
Mysql Binary log(bin log). (0) | 2016.07.15 |
mysql table name ibd 형태일 시 파일 의미. (0) | 2016.04.28 |
OPTIMIZE TABLE. 테이블 깨졌을 때 조치하는 법. (0) | 2016.01.14 |
hwm와 truncate. (0) | 2016.01.14 |