반응형

MySQL / MariaDB에서 Slow Query Log를 활성화하기 위한 방법과 실시간으로 변경 가능한 Variable에 대해서 설명드리겠습니다. 

개인적으로는 Slow Query Log를 테이블로 관리하는것을 좋아합니다. 실행된 쿼리 검색 및 통계내가가 편리하기 때문입니다.

아래 3개의 쿼리를 실행하여 설정 가능한 변수를 확인할 수 있습니다. 쿼리 결과

show global variables like '%slow%';

show global variables like '%long%';

show global variables like '%log_output%';

 

>> my.ini 파일 수정 : 노란색 영역의 3개 항목을 추가하신 후 MySQL / MariaDB 서비스를 재시작해주시면 됩니다.

set global 쿼리를 사용해서 설정을 변경할 수 있습니다.

하지만 long_query_time 변수는, 쿼리로는 변경은 가능하지만 실제 반영은 안 되고 있기에 ini 파일에서 설정해 주셔야 합니다.

my.ini 수정

slow_query_log, log_output 은 운용 중인 상태에서 서비스 재시작 없이 설정 변경이 가능하며 즉시 해당 설정이 적용됩니다.

제어판 > 서비스 > 재시작

 

>> 테이블에 기록된 Slow Query 결과입니다.

Slow Query Log in Table

반응형
반응형
Index 정보를 조회하여 하나의 컬럼에 Key 컬럼을 ','로 구분하여 출력하는 쿼리 입니다.
 
실행 결과)
쿼리)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
select ta.table_name
    , index_name, max(tb.constraint_type) INDEX_DESCRIPTION  
    , concat_ws(', ', max(col_1), max(col_2), max(col_3), max(col_4), max(col_5)  
    , max(col_6), max(col_7), max(col_8), max(col_9), max(col_10)) INDEX_KEYS  
from (  
        select table_schema, `table_name`  
        , (CONSTRAINT_NAME) INDEX_NAME  
        , ('') INDEX_DESCRIPTION  
        , (case ordinal_position when 1 then column_name else null end) col_1  
        , (case ordinal_position when 2 then column_name else null end) col_2  
        , (case ordinal_position when 3 then column_name else null end) col_3  
        , (case ordinal_position when 4 then column_name else null end) col_4  
        , (case ordinal_position when 5 then column_name else null end) col_5  
        , (case ordinal_position when 6 then column_name else null end) col_6  
        , (case ordinal_position when 7 then column_name else null end) col_7  
        , (case ordinal_position when 8 then column_name else null end) col_8  
        , (case ordinal_position when 9 then column_name else null end) col_9  
        , (case ordinal_position when 10 then column_name else null end) col_10  
        from information_schema.KEY_COLUMN_USAGE  
        where table_schema = 'db_schema' and `table_name` like '%info%'  
    ) ta  
left join information_schema.table_constraints tb   
on ta.table_schema = tb.table_schema and ta.`table_name` = tb.`table_name` and ta.index_name = tb.constraint_name  
group by ta.table_name, index_name 
order by ta.table_name, index_name asc
;
 
cs
반응형
반응형

온도/습도 등의 기상 데이터를 LabVIEW를 통해 DB에 저장하고 싶다는 문의에 대한 답변 입니다. 

Q : 온도/습도 등의 몇개의 기상데이터가 10초마다 몇달을 txt파일로 저장하는데,
     DB를 쓰면 특정 구간의 평균/최대/최소 등의 통계 혹은 rawdata 값을 쉽게 뽑아 낼 수 있는지요?
A : 날짜 컬럼으로 Index(목ㅊ, 색인) 가 걸려 있다면 특정 날짜 구간의 데이터를 빠르게 추출 및 통계(MIN, AVG, MAX 등)도 빠르게 계산이 가능 합니다. 

 

어떤 DB를 사용해야 좋을 지 문의하신다면 결론부터 말해서 MSSQ(Express) 버전으로 시작하시길 권해드립니다.

Express 버전의 경우 개인사용자는 무료이고 MSSQL 자체가 GUI 환경이어 타 DB에 비해 설치 및 운용이 간편하여

접근성이 좋습니다. 물론 성능도 타 DB에 비해 절~대 뒤떨어 지지 않습니다.

MSSQL 단점 은

- Windos 계열의 OS 에서 (만?) 설치 및 운용이 가장 편리합니다. 

물론 리눅스에도 설치가 가능하다는데, 직접 설치해 본 적이 없어서, 설치 난이도가 어떤지 알지 못합니다.

https://docs.microsoft.com/ko-kr/sql/linux/sql-server-linux-setup?view=sql-server-ver15

 

SQL Server on Linux 설치 지침 - SQL Server

SQL Server on Linux를 설치, 업데이트 및 제거합니다. 이 문서에서는 온라인, 오프라인 및 무인 시나리오를 설명합니다.

docs.microsoft.com

 

------------------------------------------------------ LabVIEW ------------------------------------------------------

LabVIEW : https://www.ni.com/ko-kr.html

 

자동화 테스트 및 자동화 측정 시스템 - National Instruments

업계 최고의 측정 정확성을 제공하면서 비용, 설계 및 디바이스 관련 문제를 해결할 수 있도록 지원하는 NI 반도체 테스트 솔루션을 만나보십시오.

www.ni.com

LabVIEW 와 DB를 연동하려면 애드온을 구매해야 한다는군요.

LabVIEW DB연동 모듈
LabVIEW : ODBC 드라이버를 통한 DB 연동 가능

 

------------------ 아래 1번 부터 4번 까지 진행하시면 테스트 환경 구축은 가능하시리라 생각 됩니다.  ---------------

1. MSSQL Express 다운로드 및 설치방법 블로그 입니다. (퍼왔습니다.)

https://eine.tistory.com/entry/Microsoft-SQL-Server-2019-Express-%EC%84%A4%EC%B9%98

 

Microsoft SQL Server 2019 Express 설치 + SSMS

MS-SQL 설치 MS-SQL을 써야 할 일이 생겨서 한번 설치해보자. 테스트용으로만 필요하기 때문에 무료 테스트용 버전인 Express를 설치해보도록 하겠다. https://www.microsoft.com/ko-kr/sql-server/sql-server-dow..

eine.tistory.com

 

 

2. MSSQL DB 관리툴 입니다.

SSMS(SQL Server Management Studio)

https://docs.microsoft.com/ko-kr/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15

 

SSMS(SQL Server Management Studio) 다운로드 - SQL Server Management Studio (SSMS)

최신 버전의 SSMS(SQL Server Management Studio)를 다운로드합니다.

docs.microsoft.com

 

 

3. 설치 완료 후 DB 생성 및 DB 사용 계정 생성 방법 입니다. (퍼왔습니다.)

https://server-talk.tistory.com/248

 

MSSQL 데이터베이스(DB) 생성과 새 로그인 사용자 추가

MSSQL 데이터베이스(DB) 생성과 새 로그인 사용자 추가 알아보기 이번에는 MSSQL에서 데이터베이스(DB) 생성과 계정생성을 알아보도록 하겠습니다 이전 글 : Windows SQL Server 2014 Express 설치 - http://serv..

server-talk.tistory.com

 

4. LabVIEW - MSSQL 연동 방법입니다. (퍼왔습니다.)

https://guslabview.tistory.com/66

 

[LabVIEW] MSSQL UDL 파일 생성 및 랩뷰와 연동 하기

[LabVIEW] MSSQL UDL 파일 생성 및 랩뷰와 연동 하기 이 글에서는 LabVIEW와 MSSQL을 연동하는 방식에 대해서 설명을 드리겠습니다. 랩뷰에서 손쉽게 DB에 접속하기 위해서는 UDL 파일이 필요합니다. UDL 파일은 U..

guslabview.tistory.com

 

기타 문의 사항은 게시판에 남겨 주세요.

반응형
반응형

아래와 같은 테이블에 대하여 USERID 가 존재할 경우에는 UPD_DATE 를 현재 날짜로 갱신하고

존재하지 않을 경우에는 INSERT 하는 쿼리를 Merge Into로 만들경우 아래와 같이 작성하게 되면

UPDATE 는 되는데 INSERT 는 되지 않습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SET SERVEROUTPUT ON;
 
BEGIN 
 
MERGE INTO TBL_USER TA
USING (SELECT USERIDX, USERID, USERNAME FROM TBL_USER WHERE USERID='6') TB
ON (TA.USERIDX = TB.USERIDX)
WHEN MATCHED THEN
    UPDATE SET TA.UPD_DATE = SYSDATE
WHEN NOT MATCHED THEN
    INSERT (TA.USERIDX, TA.USERID, TA.USERNAME)
    VALUES (6'6''NM_6')
;
dbms_output.put_line(SQL%ROWCOUNT);
COMMIT;
 
END;
 

아래와 같이 변경하시면

데이터가 있을 경우 Update, 없을 경우 Insert를 수행하게 됩니다.

- 중요한 부분은 위 TB 집합을 DUAL 로 변경하고 ON 절에 Where 조건을 기입하였습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SET SERVEROUTPUT ON;
 
BEGIN 
 
MERGE INTO TBL_USER TA
USING DUAL
ON (TA.USERID = '6')
WHEN MATCHED THEN
    UPDATE SET TA.UPD_DATE = SYSDATE
WHEN NOT MATCHED THEN
    INSERT (TA.USERIDX, TA.USERID, TA.USERNAME)
    VALUES (6'6''NM_6')
;
dbms_output.put_line(SQL%ROWCOUNT);
COMMIT;
 
END;
 

 

실행 결과 입니다.

Merge Into 실행 결과

반응형
반응형

안녕하세요. 

제가 크롤링 후 올려드리는 MySQL 백업파일의 복원방법을 문의하시는 분들이 있어서 복원 방법 설명드립니다.

제가 올리는 백업파일의 경우 아래와 같이 Database를 생성하는 구문이 없습니다.

그렇기 때문에 먼저 복원할 Database를 생성해 주셔야 합니다.
제가 올리는 백업파일의 명칭이 [db_name]_[날짜] (db_stock_20190407_010101.bak) 이기 때문에 저와 동일하게 db_stock 로 DB를 생성해주셔도 되고, 본인이 미리 생성한 db가 있다면 그대로 사용해 주셔도 됩니다. 

db를 생성할 경우에는 cmd 창을 열어 MySQL에 접속하신 후 create database [db 명]을 실행해 주시면 됩니다.

show databases; 를 실행하여 생성된 db를 확인합니다.

압축파일이 위치한 폴더로 이동 후 mysql -uroot -p [db 명] < [백업파일명]  을 실행하시면 몇분 후 DB 복원이 완료됩니다.

복원 완료 후 MySQL Workbench 로 접속한 모습입니다.

반응형
반응형

Oracle의 NEXT_DAY 함수는 입력한 날짜 이후의 찾고자 하는 요일의 첫 번째 일자를 반한 합니다.

NEXT_DAY(날짜, 찾고자 하는 요일)

- 찾고자 하는 요일 : 1=일, 2=월, 3=화, 4=수, 5=목, 6=금, 7=토 

MSSQL 에는 대응되는 함수가 없기때문에 사용자 함수를 만들어 사용하셔야 합니다.

CREATE FUNCTION [dbo].[NEXT_DAY] (@p_date DATETIME, @p_WEEKNO INT) 
RETURNS DATETIME 
AS 
BEGIN 
DECLARE @next_day DATETIME; 

SELECT @next_day = DATEADD(DAY,n, @p_date) 
FROM (VALUES (1),(2),(3),(4),(5),(6),(7)) AS t(n) 
WHERE DATEPART(WEEKDAY, DATEADD(DAY,n, @p_date)) = @p_WEEKNO 
OR CONVERT(varchar(10), DATEPART(WEEKDAY, DATEADD(DAY,n, @p_date))) = @p_WEEKNO 

RETURN @next_day 
END 

GO

Oracle 의 NEXT_DAY 와 비교한 결과는

지정일 검색
요일
Oracle MSSQL
2020-02-16 23:56:17.077 1 2020-02-23 23:05:26 2020-02-23 23:56:17.077
2020-02-16 23:56:17.077 2 2020-02-17 23:05:26 2020-02-17 23:56:17.077
2020-02-16 23:56:17.077 3 2020-02-18 23:05:26 2020-02-18 23:56:17.077
2020-02-16 23:56:17.077 4 2020-02-19 23:05:26 2020-02-19 23:56:17.077
2020-02-16 23:56:17.077 5 2020-02-20 23:05:26 2020-02-20 23:56:17.077
2020-02-16 23:56:17.077 6 2020-02-21 23:05:26 2020-02-21 23:56:17.077
2020-02-16 23:56:17.077 7 2020-02-22 23:05:26 2020-02-22 23:56:17.077
2020-02-16 23:56:17.077 1 2020-03-01 23:05:26 2020-03-01 23:56:17.077
2020-02-16 23:56:17.077 2 2020-03-16 23:05:26 2020-03-16 23:56:17.077
2020-03-20 23:56:17.077 3 2020-03-24 23:05:26 2020-03-24 23:56:17.077
2020-03-31 23:56:17.077 4 2020-04-01 23:05:26 2020-04-01 23:56:17.077
2020-04-11 23:56:17.077 5 2020-04-16 23:05:26 2020-04-16 23:56:17.077
2020-04-22 23:56:17.077 6 2020-04-24 23:05:26 2020-04-24 23:56:17.077
2020-05-03 23:56:17.077 7 2020-05-09 23:05:26 2020-05-09 23:56:17.077

 

궁금증은 덧글로 편하게 남겨주세요.

반응형
반응형

마우스 자가 수리시 참고하면 좋을 스위치 기본 스펙 입니다.

BRAND Model 버튼 힘 기계적 수명 원산지
OMRON D2F-F-3-7 0.74N 2000만 클릭 일본
D2F-F 0.74N 1000만 클릭
D2FC-F-7N 0.74N 500만 클릭 중국
D2FC-F-7N(10M) 0.74N 1000만 클릭
D2FC-F-7N(20M) 0.74N 2000만 클릭
ZF ZF(체리)골드포인트 0.74N 6000만 클릭
ZF(체리)레드포인트 0.74N 3000만 클릭
HUANO 후아노 블루 0.74N 2000만 클릭
후아노 예로우 0.74N 800만 클릭
후아노 그린 0.74N 500만 클릭
후아노 핑크 0.74N 1000만 클릭
TTC TTC 골드 0.74N 3000만 클릭

반응형
반응형

MySQL 로 작성한 트리구조 탐색 쿼리를 MSSQL로 바꿔 보았습니다.

https://devse.tistory.com/28<< MySQL 쿼리

✔ 트리 구조

✔ 쿼리

1
2
3
4
5
6
7
8
9
10
11
12
13
declare @v_id varchar(45), @v_lev int
 
set @v_id = 'a20'; -- 시작 node
 
with tree as (
    select id, pid, 0 lev
    from t_test
    where id=@v_id
    union all
    select ta.id, ta.pid, (tb.lev + 1) lev
    from t_test ta inner join tree tb on ta.id = tb.pid
)
select id, pid, lev from tree order by lev desc

✔ 결과

✔ 테스트용 자료 입력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
USE [TEST_DB]
GO
 
CREATE TABLE [dbo].[t_test](
    [id] [varchar](45NOT NULL,
    [pid] [varchar](45NOT NULL,
    [data] [varchar](100NOT NULL,
 CONSTRAINT [PK_t_test] PRIMARY KEY CLUSTERED 
(
    [id] ASC
ON [PRIMARY]
ON [PRIMARY]
GO
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a1', N'a0', N'그림1')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a10', N'a9', N'그림10')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a11', N'a7', N'그림11')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a12', N'a8', N'그림12')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a13', N'a10', N'그림13')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a14', N'a10', N'그림14')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a15', N'a10', N'그림15')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a16', N'a13', N'그림16')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a17', N'a13', N'그림17')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a18', N'a14', N'그림18')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a19', N'a15', N'그림19')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a2', N'a1', N'그림2')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a20', N'a17', N'그림20')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a21', N'a4', N'그림21')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a22', N'a21', N'그림22')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a23', N'a5', N'그림23')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a24', N'a11', N'그림24')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a25', N'a11', N'그림25')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a26', N'a12', N'그림26')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a27', N'a9', N'그림27')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a28', N'a25', N'그림28')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a29', N'a22', N'그림29')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a3', N'a1', N'그림3')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a30', N'a2', N'그림30')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a4', N'a2', N'그림4')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a5', N'a4', N'그림5')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a6', N'a4', N'그림6')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a7', N'a6', N'그림7')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a8', N'a3', N'그림8')
INSERT [dbo].[t_test] ([id], [pid], [data]) VALUES (N'a9', N'a3', N'그림9')
GO
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

✔ 실행 계획

반응형
반응형

다음에서 크롤링한 20년치 증시 데이터 입니다. 

MYSQL 백업파일이며, ERD 첨부 합니다. 

일자별 가격, 외국인 보유 비율 등 입니다.

 

DB 백업파일 다운로드 주소 : http://bitly.kr/R65ncg <<  2020-07-29 다운로드 가능합니다.

첨부된 백업파일의 복원은 아래 게시물을 참고해 주시길 바랍니다.

https://devse.tistory.com/72

반응형
반응형

MSSQL 에서 LOCK 을 모니터링 하기 위하여 SP_LOCK 을 사용하게 되는데,

기존 정렬이 SPID  ASC 여서 접속한 Process 가 많을 경우 스크롤을 해야하는 불편함이 존재 합니다. 


기본 SP_LOCK 의 쿼리에서 정렬만 추가하여 베타적 잠금이 위에 오도록 수정 하였습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
select     convert (smallint, req_spid) As spid,
    rsc_dbid As dbid,
    rsc_objid As ObjId,
    rsc_indid As IndId,
    substring (v.name, 14) As Type,
    substring (rsc_text, 132) as Resource,
    substring (u.name, 18) As Mode,
    substring (x.name, 15) As Status
    , xname = (case when u.name like '%x%' then 1 else 0 end)
from     master.dbo.syslockinfo,
    master.dbo.spt_values v,
    master.dbo.spt_values x,
    master.dbo.spt_values u
 
where   master.dbo.syslockinfo.rsc_type = v.number
        and v.type = 'LR'
        and master.dbo.syslockinfo.req_status = x.number
        and x.type = 'LS'
        and master.dbo.syslockinfo.req_mode + 1 = u.number
        and u.type = 'L'
        --and u.name like '%x%'
order by xname desc, spid asc
 
cs

[실행 결과] - 베타적 잠금이 조회 결과 상단에 오게 됩니다.

조회가 완료 되셨으면 dbcc inputbuffer(SPID) 쿼리를 실행하여 잠금이 발생한 쿼리를 확인 하시면 됩니다.



반응형
반응형

MSSQL 복제 관련 조회 쿼리 입니다.



■ 서버가 배포자로 설정되어 있는지 확인

installed = 1 : 배포 서버로 설정 됨



■ 복제 대상인 테이블 목록 조회

1
2
3
4
5
select name, create_date, modify_date, is_published, is_replicated, type_desc
from sys.tables 
where (is_published = 1 or is_merge_published = 1 or is_schema_published = 1)
        -- and name = 'CF_RANK_USER_PRE_TD'
order by name asc
cs



반응형
반응형

R Studio 에서 ggplot 로 그릴수 있는 그래프 목록 입니다. 

기본 명령어로만 그릴 수 있는 그래프만 표시 하였습니다. 대략적으로 어떤 그래프들이 있는지 보시라는 의미로 게시 합니다.


 기본 자료 구조

▷ 왼쪽과 같은 구조의 엑셀을 불러와 그래프를 그려주기 위해 오른쪽 구조로 변형하였습니다.

 



[ 질문은 가볍게, 답변은 느긋하게 기다려 주세요. ]


반응형

'Database & Data > R & R Studio' 카테고리의 다른 글

R-잔존유저 정보를 그래프로 표현  (0) 2018.08.15
반응형

잔존 유저수 정보를 DB에서 추출하게 되면 보통 아래와 같은 구주로 출력 합니다.

하지만 아래와 같은 정보를 R에서 그래프로 표시해 주려면 구조를 변경해야 합니다.

지금부터 그 방법을 설명 드립니다.

        


● R Studio 에서 엑셀파일 불러오기

≫ R Studio 에서는 엑셀을 바로 불러올 수 있습니다. Environment 탭 ⇒ Import Dataset ⇒ From Excel

        

≫ Import Excel Data 폼에서 Excel 파일을 Load 하면 화면에 표시되고, 특정 컬럼의 테이터 형을 변경할 수 있습니다.

        

 Code Preview 영역에서 Data Frame의 명칭을 좀더 간단한 명칭으로 변경합니다.

     

    위와 같이 명칭을 변경하는 이유는 구문을 작성할 때 Data Frame의 명칭을 계속 써주어야 하는데 간단하게 줄여 놓아야 쓰기 편하기 때문 입니다.

    아래는 불어오기가 완료된 Data Frame 입니다.

        

    Console 창에서는 자동완성 기능이 지원됩니다.

        

 불러오기가 완료된 Data Frame 입니다.

        


● Data Frame 구조 변경

 위 구조는 그래프로 그려주기 힘들기 때문에 구조를 변경해 주어야 합니다. 

 reshape2 라이브러리를 추가합니다.

1
2
3
> library("reshape2", lib.loc="~/R/win-library/3.5")
> 
> dt1 <- melt(Data_1, id=("LEV"))
cs

 melt 함수를 사용하여 구조를 아래와 같이 변경 합니다.

        

 컬럼명을 변경 합니다.

1
2
3
> names(dt1)[names(dt1)=="variable"<- c("KIND")
> 
> names(dt1)[names(dt1)=="value"<- c("USER_CNT")
cs

        

 ggplot 함수를 사용하여 그래프를 그려줍니다.

1
2
3
> g <- ggplot(data = dt1, aes(x=LEV, y=USER_CNT))
> 
> g + geom_line(aes(colour = KIND))
cs


이상 R을 사용한 기본적은 그래프 그리기가 완료 되었습니다.






반응형

'Database & Data > R & R Studio' 카테고리의 다른 글

R/ R Studio 기본 그래프 그리기 (ggplot)  (0) 2018.08.16
반응형

쿼리 유형별 트랜잭션 로그의 증가 수치를 설명하고, 

트랜잭션 로그 축소 쿼리를 설명 드리겠습니다.


TEST 장비 : i7 LG gram NoteBook, RAM: 24 G, SSD

TEST DB 정보 : 로그파일 10MB 단위로 증가


TEST TABLE 구조


작업 유형별 로그파일 증가량 : 각 테스트 전 로그파일을 기본 24MB로 축소

 건수

 작업 방식

 LOG 파일 증가량

 100만건 insert

 WHILE 을 이용하여 1건씩 100만번 INSERT

 24MB ⇒ 284MB

 집합 복제를 통하여 100만건을 한번에 INSERT

24MB ⇒ 524MB

 100만건 update

 WHILE을 이용하여 1000건씩 1000번 UPDATE

24MB ⇒ 94MB

 한번에 100만건 UPDATE

 24MB ⇒ 454MB

결론

1. 로그파일 증가를 최소화 하고 싶다면 INSERT, UPDATE, DELETE를 WHILE을 사용하여 나눠서 실시 → 단, 작업 시간은 증가


로그파일 축소

    - DB가 사용중(update, select가 실행되고 있는 중) 에 로그파일 축소가 가능합니다.

      하지만 가급적 점검시 사용하는 것이 좋겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
ALTER DATABASE test_db  --test_db : DB명
SET RECOVERY SIMPLE;
GO
 
-- 로그파일을 10MB로 축소
-- DB 속성의 처음크기 이하로는 줄일 수 없음
/*
DB 속성의 처음크기를 너무 크게 잡은 경우, 해당 값을 500MB 정도로
줄인 후 로그 축소를 해야 함
*/
DBCC SHRINKFILE (TEST_DB_log, 10);  --TEST_DB_log : LOG 파일 명
GO
 
ALTER DATABASE test_db   --test_db : DB명
SET RECOVERY FULL;
GO

cs


반응형
반응형

JOIN 별 결과 집합을 도식화한 자료 입니다. 어디서 구했는지 생각나질 않아 링크는 못 걸어 드립니다.




반응형
반응형

아래와 같이 Row 구분자 = "-" , Column 구분자 = "/" 인 문자열을

테이블 형식으로 변환해 보겠습니다.

EX) '1/1/W/101_1/2/H/201_1/3/H/301_2/3/H/501_3/4/H/601_4/5/H/701'


>> Query

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
DECLARE @V_STRING VARCHAR(3000);
SET @V_STRING = '1/1/W/101_1/2/H/201_1/3/H/301_2/3/H/501_3/4/H/601_4/5/H/701';
 
WITH TA AS
(
    SELECT 1 LV
    UNION ALL
    SELECT LV + 1 LV FROM TA WHERE LV + 1 <= 4
) ,
TB AS
(
    SELECT 1 RNUM, dbo.regexp_substr(@V_STRING, '_'11) TXT
    UNION ALL
    SELECT RNUM + 1 RNUM, dbo.regexp_substr(@V_STRING , '_'1, RNUM + 1) TXT
    FROM TB
    WHERE RNUM + 1 <= LEN(dbo.fn_StripCharacters(@V_STRING, '^_+'))+1
)
SELECT TC.RNUM
    , MAX(CASE WHEN TC.LV = 1 THEN TC.TXT ELSE NULL END) COL1
    , MAX(CASE WHEN TC.LV = 2 THEN TC.TXT ELSE NULL END) COL2
    , MAX(CASE WHEN TC.LV = 3 THEN TC.TXT ELSE NULL END) COL3
    , MAX(CASE WHEN TC.LV = 4 THEN TC.TXT ELSE NULL END) COL4
FROM (
    SELECT TB.RNUM, TA.LV, dbo.regexp_substr(TB.TXT, '/'1, TA.LV) TXT
    FROM TB,TA
) TC
GROUP BY TC.RNUM
ORDER BY TC.RNUM ASC
cs


>> 결과 집합


>> 필요 함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
    원본 문자열에서 특정 문자열을 제거
*/
CREATE FUNCTION [dbo].[fn_StripCharacters]
(
    @String                NVARCHAR(MAX), 
    @MatchExpression    VARCHAR(255)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    SET @MatchExpression =  '%['+@MatchExpression+']%'
 
    WHILE PatIndex(@MatchExpression, @String) > 0
        SET @String = Stuff(@String, PatIndex(@MatchExpression, @String), 1'')
 
    RETURN @String
 
END
GO
 
 
/*
    원본 문자열에서 특정 문자열 부분을 추출
*/
CREATE  FUNCTION [dbo].[REGEXP_SUBSTR] 
(
    @i_str varchar(1000), 
    @i_delimeter varchar(10), 
    @i_position int,
    @i_index int
) RETURNS varchar(2000)
AS BEGIN
 
    DECLARE @o_str varchar(2000); 
    SET @o_str = '';
 
    WITH t AS (
        SELECT 1 as lvl, CONVERT(VARCHAR(2000), @i_str) AS code
        UNION ALL
        SELECT lvl + 1 as lvl
            , CONVERT(VARCHAR(2000), SUBSTRING(code, CHARINDEX(@i_delimeter, code, 1+ 199) ) AS code
        FROM t
        WHERE CHARINDEX(@i_delimeter, code, 1> 0
    )
 
    SELECT @o_str = CONVERT(VARCHAR(2000), LEFT(code, CHARINDEX(@i_delimeter, code + @i_delimeter, 1- 1))
    FROM t
    WHERE lvl = @i_index        
 
    RETURN @o_str
 
END
GO
 
cs


반응형
반응형

>> ORACLE 의 connect by level  구문을 MSSQL 로 변환

Oracle Query

 MSSQL Query  (MSSQL 2005 이상)

쿼리 결과

1
2
3
SELECT rownum RNUM
FROM DUAL
CONNECT BY LEVEL <= 5;
cs
1
2
3
4
5
6
7
WITH TA AS
(
    SELECT 1 LV
    UNION ALL
    SELECT LV + 1 LV FROM TA WHERE LV + 1 <= 5
)
SELECT * FROM TA
cs


>> 100 개 이상 출력시 오류 발생


>> option(maxrecursion 0) 구문을 추가하여 최대 재귀 횟수 제한 해제

1
2
3
4
5
6
7
8
WITH TA AS
(
    SELECT 1 lv
    UNION ALL
    SELECT lv + 1 FROM TA WHERE lv + 1 <= 200
)
SELECT * FROM TA option(maxrecursion 0)
;
cs

>> 100 개 이상 표시 출력 됨



 


반응형
반응형

LOGIN_LOG 테이블에서 연속 출석일수를 조회하는 쿼리 입니다. 

테이블 구조

  - 특정 기간 동안의 유저 로그인 기록 입니다. 일자별로 여러개 row가 있을 수 있는데, 

    우리가 원하는 것은 연속 출석일 수 를 구하는 것이기 때문에 유저별,일자별 그룹핑 하였습니다.

  - 결과 테이블 설명

1. 37번 유저 : 19일, 20일, 21일, 22일 연속해서 로그인 하였기 때문에 연속 출석일 수 = 4일

2. 38번 유저 : 6일, 7일 연속 출석일 수 = 2, 26일, 27일, 28일 연속 출석일 수 = 3일 

   로 계산 되었습니다.

 기반 테이블

 연속 출석일 수 계산 결과

 


 



≫ Query

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DECLARE @v_start_date datetime, @v_end_date datetime;
SET @v_start_date = '2018-02-01 00:00:00';
SET @v_end_date = '2018-02-28 23:59:59';
 
with tmp_user_login_list as (
    select ta.usn, ta.login_date
    from (
        select usn, convert(char(10),login_date,23) login_date
        from TBL_USER_CONNECTION_LOG where LOGIN_DATE between @v_start_date and @v_end_date
    ) ta
    group by ta.usn, ta.login_date
    --order by ta.usn, ta.login_date asc
),
tmp_user_min_login_date as (
    select usn, min(convert(char(10),login_date,23)) start_login_date
    from TBL_USER_CONNECTION_LOG where LOGIN_DATE between @v_start_date and @v_end_date
    group by usn
)
select usn, MIN(login_date) std_dt, MAX(login_date) end_dt , COUNT(*) cnt
from ( 
        select  ta.usn, login_date
        ,   ROW_NUMBER() over (order by  ta.usn, login_date) idx        -- 자료의 일자별 순서
        ,   DATEDIFF( dd, login_date, tb.start_login_date )  no            -- 유저의 해당 기간 최초 접속 일
        from  tmp_user_login_list ta
        inner join tmp_user_min_login_date tb on ta.USN = tb.USN
)  r
group by usn, idx + no
having count(*> 1        -- 연속 로그인 일수가 1일 이상인 자료
order by usn, idx + no  desc
cs





반응형
반응형

오라클

아래와 같이 구분자로 구분된 여러 항목이 들어 있는 문자열을 파싱하여 표 형태로 출력해 주는 쿼리 입니다.

EX) '1/1/W/101_1/2/H/201_1/3/H/301_2/3/H/501_3/4/H/601_4/5/H/701'

Row 구분자 :  "_"

Column 구분자 : "/"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  SELECT TD.RNUM
  , MAX(CASE WHEN TD.LV = 1 THEN TD.TXT ELSE NULL END) COL1
  , MAX(CASE WHEN TD.LV = 2 THEN TD.TXT ELSE NULL END) COL2
  , MAX(CASE WHEN TD.LV = 3 THEN TD.TXT ELSE NULL END) COL3
  , MAX(CASE WHEN TD.LV = 4 THEN TD.TXT ELSE NULL END) COL4
  FROM (
  SELECT TB.RNUM, TC.LV ,regexp_substr(TB.TXT, '[^/]+'1, TC.LV) TXT
  FROM (
  SELECT rownum RNUM,regexp_substr(TA.TXT, '[^_]+'1, LEVEL) TXT
  FROM (SELECT '1/1/W/101_1/2/H/201_1/3/H/301_2/3/H/501_3/4/H/601_4/5/H/701' TXT FROM dual) TA
  CONNECT BY LEVEL <= length(regexp_replace(TA.TXT, '[^_]+',''))+1
  ) TB, (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 4) TC ) TD
  GROUP BY TD.RNUM
  ORDER BY TD.RNUM ASC;
cs

▶ 출력 결과


기타 문의 사항은 덧글로 부탁 드립니다.


반응형
반응형

안녕하세요. 

주식 정보를 수집할 때 사용한 파이썬 소스 공유 드립니다.

 

원하시는 분이 계셔서 공유하게 되었습니다.


책하나 사서 공부 했기에 , 구조가 이쁘지 않을 수 있습니다. 감안하고 받아 주세요


이클립스 프로젝트로 첨부 합니다.


Stock_Crawling 2.7z


>> 프로젝트 구조



반응형
반응형

아래 구조와 같이 되어있는 테이블에서 

Drag & Drop 으로 특정 항목의 위치를 변경 하였을 때 

순서를 재 정렬 해주는 쿼리 입니다.

ex) [크롤링] 항목을 3번째 로 이동할 경우

i_to_position = 3, i_from_position = 5


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
CREATE DEFINER=`root`@`%` PROCEDURE `sp_upd_category_order`(
      IN i_id                 varchar(20)
      , IN i_group_code        int
      , IN i_to_position    int
      , IN i_from_position    int
      , OUT o_result        int
    )
    DETERMINISTIC
BEGIN
 
/*
    카테고리 정렬 순서 변경
*/
    set o_result = -1;
    
    -- 지정 카테고리의 순번을 i_to_position 로 설정
    update tbl_group_info set ordinal_position = i_to_position
    where id=i_id and group_code = i_group_code ;
 
    -- 기준 순서 위쪽 정렬
    update tbl_group_info ta inner join 
        (
            select id, group_code, (@rownum := @rownum +1) num
            from tbl_group_info, (select @rownum := 0) ta
            where id=i_id and group_code!=i_group_code and ordinal_position < i_to_position+i_from_position
            order by ordinal_position asc
        ) tb
    on ta.id = tb.id and ta.group_code=tb.group_code
    set ta.ordinal_position = tb.num;
    
 
    -- 기준 순서 아래쪽 정렬
    update tbl_group_info ta inner join 
        (
            select id, group_code, (@rownum := @rownum +1) num
            from tbl_group_info, (select @rownum := 0) ta
            where id=i_id and group_code!=i_group_code and ordinal_position >= i_to_position
            order by ordinal_position asc
        ) tb
    on ta.id = tb.id and ta.group_code=tb.group_code
    set ta.ordinal_position = tb.num + i_to_position;
 
    set o_result = 1;
    
 END
cs


반응형
반응형

안녕하세요. 다음 코스닥 증시 데이터 중 기업의 일자별 기관/외국인 보유 현황 데이터 입니다.


▶ 다음 주식 정보 : http://finance.daum.net/item/quote.daum?code=005930


▶ 업체 코드 정보 : http://devse.tistory.com/attachment/cfile8.uf@99715A3A5A4769592010C0.csv

▶ 보유 현황 데이터

- 컬럼 : 

stock_code : 기업 코드      basic_date : 기준일       foreigner_share_cnt : 외국인 보유 주식 수

foreigner_share_ratio : 외국인 지분율(%)      foreigner_buying_cnt : 외국인 순매수량       organization_buying_cnt : 기관 순매수량

yesterday_ratio 전일비           updown_ratio : 등락률(%)


코스닥_보유현황.7z.001

코스닥_보유현황.7z.002

코스닥_보유현황.7z.003


궁금하신 사항은 댓글로 남겨 주세요.

반응형
반응형

mysql 의 조회 결과를 CSV 파일로 출력하는 쿼리 입니다.

조회된 결과에서 컬럼명을 추가해 주기 위하여 union을 사용하였습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 'stock_code''basic_date''open_value''high_value''low_value'
    , 'close_value''yesterday_ratio''updown_ratio''volume_value'
UNION ALL
SELECT ta.stock_code, ta.basic_date, ta.open_value, ta.high_value, ta.low_value
        , ta.close_value, ta.yesterday_ratio, ta.updown_ratio, ta.volume_value
FROM tbl_stock_history_daum ta 
inner join (SELECT stock_code 
            FROM tbl_coporation_info 
            where stock_type='KOSDAQ' order by stock_code asc limit 0,50) tb
on ta.stock_code = tb.stock_code
INTO OUTFILE '/Volumes/USB128G/DataBase/tbl_stock_history_daum_KOSDAQ_000250_011040.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
cs


궁금하신 사항은 댓글로 남겨 주세요.

반응형
반응형

안녕하세요. 코스피 에 이어 이번에는 코스닥 증시 데이터를 수집해 보았습니다.

원하는 분들이 계셔셔, 바쁜 시간 내서 작업해 보았습니다.

유용하게 사용해 주셨으면 좋겠습니다.


▶ 다음 주식 정보 : http://finance.daum.net/item/quote.daum?code=005930

▶ 업체 코드 정보 : http://bitly.kr/LbCuTB  -- 2019-07-07 링크 수정


▶ 7Zip 분할 압축 입니다.

    CSV 컬럼 설명 , A: 업체코드, B: 일자, C: 시가, D:고가, E:저가, F:종가, G:전일비, H:등락률, I:거래량

MySQL 백업 파일은 사용하시는 분들이 없는것 같아 제외 하였습니다. 필요하신 분은 말씀해 주세요.

코스닥.7z.001

코스닥.7z.002

코스닥.7z.003

코스닥.7z.004


▶ MySQL 백업파일 : 7zip 분할 압축

db_stock_20180617_010101.7z.001

db_stock_20180617_010101.7z.002

db_stock_20180617_010101.7z.003

db_stock_20180617_010101.7z.004

db_stock_20180617_010101.7z.005

db_stock_20180617_010101.7z.006

db_stock_20180617_010101.7z.007

db_stock_20180617_010101.7z.008

db_stock_20180617_010101.7z.009

db_stock_20180617_010101.7z.010

db_stock_20180617_010101.7z.011

db_stock_20180617_010101.7z.012

db_stock_20180617_010101.7z.013

db_stock_20180617_010101.7z.014

db_stock_20180617_010101.7z.015


반응형
반응형

안녕하세요. 이번에는 다음 코스피 증시 데이터를 수집하였습니다.

일전에 야후의 증시 데이터를 수집 하였는데, 맞지 않는다는 의견이 있으셔서 

다음 자료를 다시 수집하게 되었습니다.


▶ 다음 주식 정보 : http://finance.daum.net/item/quote.daum?code=005930

▶ Table Schema 

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE `tbl_stock_history_daum` (
  `stock_code` varchar(10NOT NULL,
  `basic_date` date NOT NULL,
  `open_value` double DEFAULT NULL COMMENT '시가',
  `high_value` double DEFAULT NULL COMMENT '고가',
  `low_value` double DEFAULT NULL COMMENT '저가\n',
  `close_value` double DEFAULT NULL COMMENT '종가',
  `yesterday_ratio` double DEFAULT NULL COMMENT '전일비',
  `updown_ratio` double DEFAULT NULL COMMENT '등락률(단위:%)',
  `volume_value` double DEFAULT NULL COMMENT '거래량\n',
  PRIMARY KEY (`stock_code`,`basic_date`),
  UNIQUE KEY `idx_TBL_STOCK_HISTORY_DAUM_stock_code_basic_date` (`basic_date`,`stock_code`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='다음 증시 정보';
cs


▶ MySQL 백업파일 - 255 MB

 tbl_stock_history_daum.7z.001

 tbl_stock_history_daum.7z.002

 tbl_stock_history_daum.7z.003

 tbl_stock_history_daum.7z.004

 tbl_stock_history_daum.7z.005

 


재미있게 활용해 주시고요, 기타 의견은 댓글로 부탁 드립니다.


--------------------------------------------------------------- 2017-11-10 ------------------------------------------------------------------

R하시는 분들은 CSV파일로 드리는게 편하실 것 같아서. 전체 데이터를 100개씩 나눠서 CSV로 추출 하였습니다.

아래 내용 참고 하시고 사용해 주세요.


▶  1번 파일로 원하시는 stock_code  확인 하신 후 그에 맞는 7zip 파일을 아래에서 다운받으시면 됩니다.

1.   tbl_coporation_info.csv


2.  tbl_wics_code_info.csv

▶ 증시 데이터 파일 


☆ 번거롭긴 하지만 많은 분들이 편하게 사용 하시길 바라는 마음에서 CSV파일도 추가 하였습니다.


반응형
반응형

안녕하세요. 오늘은 코스피 기업별 외국인 및 기관의 보유 현황을 수집해 보았습니다.

▨ 일주일에 1개를 목표로 100주 동안 100개의 데이터를 수집하여 달인이 되려는 목표가 있었으나, 일주일에 한개도 벅차네요. ㅠ.ㅠ


대상 : Daum 주식 사이트 http://finance.daum.net/item/foreign.daum?code=005930&nil_profile=stockprice&nil_menu=b013


▶ Table Schema 

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `TBL_STOCK_STAKE_RATIO_DAUM` (
  `stock_code` varchar(10NOT NULL,
  `basic_date` date NOT NULL,
  `foreigner_share_cnt` double DEFAULT NULL COMMENT '외국인 보유 주식수',
  `foreigner_share_ratio` double DEFAULT NULL COMMENT '외국인 지분율(%)',
  `foreigner_buying_cnt` double DEFAULT NULL COMMENT '외국인 순매수량',
  `organization_buying_cnt` double DEFAULT NULL COMMENT '기관 순매수량',
  `yesterday_ratio` double DEFAULT NULL COMMENT '전일비',
  `updown_ratio` double DEFAULT NULL COMMENT '등락률(%)',
  PRIMARY KEY (`stock_code`,`basic_date`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='주식 보유 비율(다음)';
cs


▶ MySQL 백업파일 - 111MB

TBL_STOCK_STAKE_RATIO_DAUM.7z.001

TBL_STOCK_STAKE_RATIO_DAUM.7z.002

TBL_STOCK_STAKE_RATIO_DAUM.7z.003


▨ 기타 요청 사항이나. 이런 데이터 수집하면 좋겠다. 하시는 분은 댓글로 내용과 함께 사이트 주소를 남겨 주시면 감사하겠습니다.

▨ 추가로 야후 증시 데이터에 잘못 된 부분이 많다는 의견이 있어, 다음에 있는 정보를 수집 중 입니다. 수집이 완료 되면 공유 드리도록 하겠습니다.


반응형
반응형

증시정보 에서 기업의 종류를 구분하는 WICS 코드 정보 엑셀 파일 입니다.

> 참고 사이트 : http://www.wiseindex.com/About/WICS


> 엑셀 파일


WICS_code.xlsx


반응형
반응형

Excel 파일을 읽어 DB에 insert 하는 Python 소스 공유 드립니다.

Python 3.6, Eclipse 에서 작업 하였습니다.


> Eclipse Project : 엑셀 파일을 읽어 DB에 저장 


- main.py : 메인 함수

- ClsDB.py : db 작업

- ClsLogHandler.py : Excel_Insert_Err_Log 파일에 오류 로그 저장



> Python Module : 아래 2가지 모듈은 추가로 설치하셔야 합니다.

- PyMySQL : mysql DB 처리 관련 모듈, https://github.com/PyMySQL/PyMySQL

- openpyxl :  Excel 처리 모듈 , http://openpyxl.readthedocs.io/en/default/



> DB Table

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `TBL_STOCK` (
  `type_code` varchar(10NOT NULL,
  `basic_date` date NOT NULL,
  `open_value` float DEFAULT NULL COMMENT '시가',
  `high_value` float DEFAULT NULL COMMENT '고가',
  `low_value` float DEFAULT NULL COMMENT '저가',
  `close_value` float DEFAULT NULL COMMENT '종가',
  `adj_close_value` float DEFAULT NULL COMMENT '수정 주가',
  `volume_value` float DEFAULT NULL COMMENT '거래량',
  PRIMARY KEY (`type_code`,`basic_date`)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
cs


> Source File Excel_Insert.zip


문의 및 의견은 댓글로 달아 주시길 바랍니다. 

반응형
반응형

암호 없이 SSH / SCP 로 원격 호스트에 접속하는 방법입니다.

관련 게시물은 많은데 제가 이해하지 못한 부분 추가하여 작성 합니다. 


> 구성



반응형
반응형

라즈베리에 DB 와 Python 을 설치하여 크롤링 데몬을 돌리고 있습니다.

DB 백업은 정기적으로 하고 있었는데 , 백업 파일을 동일 머신에 놓았더니 이번에 장애로 디스크가 날라 갔네요.

그래서, DB 백업 -> 압축 -> 별도 서버로 전송(Raspberry_02) 로 전송하는 스크립트로 수정 하였습니다.


> 동작 

오늘 날짜 폴더 생성 -> DB Backup -> 오래된 백업 폴더 삭제 -> 당일자 백업폴더 압축 -> 별도 서버에 전달 -> 압축파일 삭제 -> 별도 서버에서 4일전 압축파일 삭제


저는 crontab 에서 하루에 한번씩 호출 하도록 설정해 놓았습니다.


>    본문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash
 
 
#Mysql DB Backup Script
 
# 오늘
nowdate=$(date +"%Y%m%d")
echo $nowdate
# 현재 시간
nowtime=$(date +"%H%M%S")
 
# 4일전
beforeday=$(date +"%Y%m%d" -'-4days')
echo $beforeday
 
#오늘날짜 폴더 생성
mkdir /home/pi/DB_Backup/$nowdate
 
#DB_LOTTO 백업
mysqldump -uroot -p[password] --routines DB_AUCTION > /home/pi/DB_Backup/$nowdate/DB_AUCTION_"$nowdate"_"$nowtime".bak
 
mysqldump -uroot -p[password] --routines DB_FINANCE > /home/pi/DB_Backup/$nowdate/DB_FINANCE_"$nowdate"_"$nowtime".bak
 
 
#4일전 날짜의 백업 폴더 삭제
rm -rf /home/pi/DB_Backup/$beforeday
 
 
#오늘 날짜 백업 폴더를 압축
tar cfvzP /home/pi/DB_Backup/"$nowdate"_DB_BackupFile.tgz /home/pi/DB_Backup/$nowdate/
 
#압축 파일을 라즈베리2에 전달
scp -922 /home/pi/DB_Backup/"$nowdate"_DB_BackupFile.tgz a209@192.168.0.10:/home/a209/DB_Backup
 
#압축 파일 삭제
rm -/home/pi/DB_Backup/"$nowdate"_DB_BackupFile.tgz
 
 
#Raspberry-02 에서 4일전 압축 파일을 삭제할 것 
ssh -p922 a209@192.168.0.10 "rm -f /home/a209/DB_Backup/$beforeday*.tgz"
 
cs


> 스크립트 파일 :      script_db_backup 2.sh



> 질문이나 의견 있으시면 댓글로 부탁 드립니다.

반응형

+ Recent posts