my.cnf 파일의  옵션을 변경하여 dump 파일 복구 시 속도를 개선할 수 있다.

 

max_allowed_packet = 1000M
bulk_insert_buffer_size = 256M
key_buffer_size = 500M   ---->  서버 실메모리의 60% 할당.

Mysql 서버에 로그인해서 상태를 확인한다.

우선 Mysql 서거바 어떤 쿼리를 실행하고 있는지 어떤 프로세스가 특히 오랜시간 동안 실행되고 있는지 확인하는 것이 좋다.

Mysql의   "show processlist"  라는 명령은 다음과 같은 다양한 프로세스의 정보를 보여줌으로 Mysql 서버에 로그인해서 가장 먼저 확인해 보는 것이 좋다.

  • 현재  Mysql 서버에 존재하는 전체 프로세스 목록
  • 각 프로세스가 어떤 작업(SQL)를 실행하고 있는지
  • 각 작업의 현재상태
  • 각 작업의 실행시간

 

"show processlist"  명령은 Mysql 서버에 접속된 클라이언트 수만큼의 레코드를 출력한다.  이때 스레드라 함은 실제 클라이언트와 연결돼 있는 스레드만을 의미한다. 즉 이명령의 결과로 출력되는 내용에서 한 레코드는 하나의 프로세스를 의미함과 동시에 하나의 커넥션을 의미한다.

 

 

mysql> show processlist;
+-----+-----------+-------------------+---------+---------+--------+----------+------------------+
| Id  | User      | Host              | db      | Command | Time   | State    | Info             |
+-----+-----------+-------------------+---------+---------+--------+----------+------------------+
|   5 | saferzone | localhost         | DEFCON4 | Sleep   |   5746 |          | NULL             |
|   6 | saferzone | localhost         | DEFCON4 | Sleep   |    104 |          | NULL             |
|   7 | saferzone | localhost         | DEFCON4 | Sleep   |   5779 |          | NULL             |
|   8 | saferzone | localhost         | DEFCON4 | Sleep   |   4051 |          | NULL             |
|  72 | saferzone | localhost         | DEFCON4 | Sleep   |   4922 |          | NULL             |
|  96 | root      | 127.0.0.1:40020   | DEFCON4 | Sleep   | 100545 |          | NULL             |
|  98 | root      | 127.0.0.1:40024   | DEFCON4 | Sleep   | 100375 |          | NULL             |
|  99 | root      | 127.0.0.1:40026   | DEFCON4 | Sleep   |     24 |          | NULL             |
| 146 | root      | 192.168.2.2:59488 | DEFCON4 | Sleep   |  25743 |          | NULL             |
| 159 | root      | 192.168.2.3:57341 | DEFCON4 | Sleep   |   4114 |          | NULL             |
| 163 | root      | localhost         | NULL    | Query   |      0 | starting | show processlist |
+-----+-----------+-------------------+---------+---------+--------+----------+------------------+
11 rows in set (0.00 sec)

 

위 내용에서 주의깊게 봐야 할 항목은 Command 칼럼의 값과 Time 칼럼이다. 때로는 Info 칼럼에 출력되는 SQL도 간단히 문제의 원인을 찾는데 많은 도움이 된다.

 

  • Command 가  "Sleep" 이나 "Binlog Dump" 상태가 아닌 프로세스는 대부분 클라이언트의 요청으로 SQL을 실행하고 있음을 의미하는데, 이때 Time 칼럼의 값이 그 작업을 몇 초 동안 실행하고 있는지 알려준다.
  • 만약 특정 쿼리를 실행하고 있는 프로세스가 오랜 시간 동안 실행되고 있다면 해당 프로세스의 State 값을 확인하자 State 칼럼은 그 작업이 현재 어떤 상태인지를 보여주는데,  Waiting 일때는 다른 프로세스가 선점하고 있는 잠금을 기다리는 것을 의미한다. Waiting 상태의 프로세스가 많을 때는 대부분 테이블의 잠금을 획득하고 해제하지 않아서 이런 현상이 발생한다. 도한 갑자기 너무 많은 사용자가 테이블 한두 개를 집중적으로 읽고 쓸때도 이런 현상이 나타난다. State가 Waiting 상태로 표시되는 것은 테이블 잠글을 기다릴때만 해당되며, InnoDB 스토리지 엔진의 레코드 잠금은 Waiting 으로 표시되지 않고 update라고 표시된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

uptime  명령으로 1분, 5분, 15분 간의  CPU가 처리해야할 작업이 얼마나 쌓여 있는지 대략적으로 확인할 수 있다.

 

현재 CPU가 어떤 작업에 주로 사용되고 있는지 알아보려면 vmstat(Virtual Memory) 를 이용하면 된다.

일반적으로 vmstat는 1초 단위의 시간 간격을 파라미터로 사용한다. 
명령어 실행시 파라미터로 1초를 적용하면  1초 동안 샘플링된 상태 값을 1초 단위로 출력한다.

 

[root@localhost ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 6050228  33584 332100    0    0    47     6  101  226  1  1 98  0  0
 0  0      0 6050212  33584 332100    0    0     0     0   97  223  0  1 99  0  0
 0  0      0 6050212  33584 332100    0    0     0     0  108  233  0  0 100  0  0
 0  0      0 6050212  33584 332100    0    0     0     0   93  216  0  0 100  0  0
 0  0      0 6050212  33584 332100    0    0     0     0   95  219  0  1 99  0  0

 

vmstat 는 가상메모리의 상태를 보여주는 명령이지만, CPU나 프로세스 큐를 확인하는 용도로 더 많이 사용한다.

vmstat 유틸리티의 결과에서 proc 섹션과 cpu 섹션을 주로 참고한다.

 

procs  -r  : 프로세스 큐에서 cpu가 실행해주기를 기다리는 프로세스의 수

procs  -b : 지정된 이벤트가 발생하기 전까지는 실행될 수 없는 프로세스의 수

cpu   -us : 사용자 프로세스를 위해 사용한 cpu사용률로 mysqld 서버의 코드와 같이 애플리케이션의 코드가 사용한 

               cpu 시간을 의미한다. 대표적으로 정렬이나 group by 작업, 그리고 압축과 같은 작업이 많이 발생하는 자입                 에서는 사용자 cpu가 높게 나타난다.

cpu   -sy : 커널이 사용한 cpu 시간을 의미한다.

cpu   -id : cpu가 아무것도 하지 않고 대기(idle)하는데 사용한 cpu 사용률이다.

cpu  -wa : 디스크 입축력을 기다리는데 사용한 cpu 사용률을 의미한다. 주로 DBMS 서버가 실행 중인장비에서 관심을                둬야 할 값인데, wa(wait I/O) 값이 높으면 디스크 I/O가 과도하게 많이 발생해 cpu가 데이터의 입출력을

              기다리는 시간이 많다는 것을 의미한다.  

cpu  -st : 가상 머신으로부터 빼앗긴 시간을 의미하는데, 크게 신경쓰지 않아도 된다.

 

 

 

[ RAID 확인 ]

Linux  서버에 장치/설정 된 RAID 장비의 구성 정보를 확인하는 방법으로  /proc/mdstat 정보로 확인할 수 있다.

 

RAID 어레이 상태를 확인하기

[root@localhost ~]# more /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda[0] sdb[0]
40692224 blocks 256k chunks

두개의 하드디스크 sda 와  sdb 디스크가 raid1 로 활성상태로 구성되어 있다.

실제로  df -h 와 같은 명령으로 확인해 보면 해다 디스크는 /dev/md0 디바이스로 마운트 되어 있는것을 확인할 수 있다.

포멧과 같은 명령도 해다 마운트 명으로 진행하여야 한다.

 

 

[ mdadm 명령으로 RAID 만들기 ]

 

mdadm 명령으로 RAID 스토리지 설정하기

mdadm 명령을 이용하여 여러개의 장치를 원하는 형식의 어레이로 구성할 수 있다.

 

(RAID 설정 파일 생성 하기)

[root@AP1 /]# more /etc/mdadm.conf 
DEVICE /dev/sdb /dev/sdc
ARRAY /dev/md0 devices=/dev/sdb,/dev/sdc

두개의 하드디스크 /dev/sdb dev/sdc 를 어레이 /dev/md0 로 구성한다.

 

(RAID 구성 명령어 실행하기)

[root@AP1 etc]# mdadm -C /dev/md0 --level=raid1 --raid-devices=2 /dev/sdb /dev/sdc
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

(RAID 포멧하기)

[root@AP1 proc]# mkfs.ext4 /dev/md0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 523776 blocks
26188 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

(생성된 RAID 상세정보확인하기)

[root@AP1 /]# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Nov 16 17:41:05 2019
     Raid Level : raid1
     Array Size : 2095104 (2046.34 MiB 2145.39 MB)
  Used Dev Size : 2095104 (2046.34 MiB 2145.39 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Sat Nov 16 17:43:50 2019
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : AP1:0  (local to host AP1)
           UUID : 06062d56:89418a5c:b1916725:708007bf
         Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

 

 

 

 

 

 

 

 

 

 

 

 

 

 

my.cnf 파일에 아래 내용을 설정해 주면 지정된 파일에 쿼리 로그를 남길 수 있다.

 

[root@AP1 etc]#vim  my.cnf        

 

general_log = 1

slow-query-log = 1 
general_log_file = /var/log/mysql_query.log
expire_logs_days = 2
max_binlog_size = 10M

JOIN 절은 두 개 이상의 테이블에서 관련성이 있는 컬럼에 기초하여 행(Row)을 결합하는 데 사용됩니다.

 

 

1. [ INNER JOIN ] --> INNER JOIN 키워드는 양쪽 테이블 모두에서 일치하는 레코드를 반환합니다. (교집합)

SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;

 

 

2. [ LEFT JOIN ] --> LEFT JOIN 키워드는 왼쪽 테이블(table1)의 모든 레코드와 오른쪽 테이블(table2)의 일치하는 레코드를 반환합니다. 오른쪽에 일치하는 레코드가 없으면 왼쪽에서는 결과가 NULL이 됩니다.

SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;

 

 

3. [ RIGHT JOIN ] --> RIGHT JOIN 키워드는 오른쪽 테이블(table2)의 모든 레코드와 왼쪽 테이블(table1)의 일치하는 레코드를 반환합니다. 왼쪽에 일치하는 레코드가 없으면 오른쪽에서는 결과가 NULL이 됩니다.

SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;

 

4. [ RULL OUTER JOIN ] --> FULL OUTER JOIN 키워드는 왼쪽 테이블(table1) 또는 오른쪽 테이블(table2) 레코드에 일치하는 모든 레코드를 반환합니다.

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

 

 

 

 

 

UPDATE ips INNER JOIN country
ON ips.iso = country.iso
SET ips.countryid = country.countryid

 

Mysql 데이터를 Select 할때 일부 필드의 특정값 ( 복수 지정 가능)만  빼고 불러와야 하는 상황이 있는데요.

 

예를들면 ID라는 필드에 admin, admin1, admin2 라는 관리자 계정을 빼고 불러온다거나...

이런 경우 where 절에 not in 조건으로 지정할 수 있다.

select * from 테이블명 where 필드명 not in ('제외할문자1','제외할문자2'...등);

다음은 구누보드에서의 멤버 테이블 중 지정된 아이디를 제외하고 Select 하는 구문이다.

select * from g4_member where mb_id not in('admin','admin1','admin2');

위의 쿼리를 실행하면

 

g4_member 테이블에 mb_id 에서 admin, admin1, admin2  만 제외하고 데이터를 불러오게 됩니다.

DMARC(Domain-based Message Authentication, Reporting and Conformance)는 이메일 인증 프로토콜이다.
이메일 도메인 소유자가 이메일 스푸핑으로 알려진 무단 사용에서 도메인을 보호할 수 있도록 설계되었다. 
DMARC의 구현 목적은 비즈니스 이메일 공격, 피싱 이메일, 이메일 사기 등 사이버 위협 행위에 도메인이 이용되지 않게 보호한다.

DMARC DNS 레코드가 게시되면 수신 이메일 서버는 도메인 소유자가 게시한 정책에 따라 수신 이메일을 검사한다. 
이메일이 인증을 통과하면 전송되고 신뢰할 수 있다. 이메일이 검사에 통과하지 못하면 DMARC 레코드에 포함된 지침에 따라
이메일을 전송, 격리 또는 거부할 수 있다.

DMARC는 Sender Policy Framework(SPF)와 DomainKeys Identified Mail(DKIM) 두 가지 기존 메커니즘을 확장한다. 
도메인의 관리자는 DNS 레코드에 정책을 게시하여 해당 도메인에서 전자 메일을 보낼 때 어떤 메커니즘(DKIM, SPF 또는 둘 다)을
 사용하는지 지정할 수 있다. 최종 사용자에게 표시된 From: 필드를 확인하는 방법과 수신자가 실패를 처리하는 방법, 일일 보고서 전달 방식을 지정한다.

DMARC는 "Informational" 상태로 2015년 3월 12일자 RFC 7489 표준으로 정의한다.

 

 

 

 

개요 

DMARC 정책을 사용하면 보낸 사람의 도메인에서 이메일이 SPF 및/또는 DKIM으로 보호됨을 표시하고, 인증을 통과하지 못하는 경우 메시지를 거부하거나 격리하는 등 수신자에게 수행할 작업을 지정할 수 있다. 이 정책은 전자 메일 수신자가 인증에 성공/실패한 메시지를 보낸 사람의 도메인에 보고하는 방법도 지정할 수 있다. [2]

DMARC 정책은 공개 도메인 네임 시스템(DNS)에 TXT 레코드로 게시한다.

DMARC는 이메일이 스팸인지 또는 사기성인지 직접 정의하지 않고, 대신 메시지가 DKIM 또는 SPF 유효성 검사를 통과하는 것 뿐 아니라 연관성 검사를 통과할 것을 필수로 요구한다. DMARC 표준에서는 SPF나 DKIM을 통과해도 연관성이 없으면 인증이 실패할 수 있다.[3]

DMARC를 설정하면 적절한 발신자의 전송 성공 비율에 긍정적인 영향을 줄 수 있다.[4]

 


연관성  
DMARC는 메일의 보낸 사람 From: 필드의 도메인이 다른 인증 도메인과 연관되는지 확인하는 방식으로 동작한다. SPF 또는 DKIM 연관 검사가 통과하면 DMARC 테스트가 통과한다.

연관성은 엄격하거나 느슨하게 지정할 수 있다. 엄격한 정책을 사용하면 도메인 이름이 일치해야 한다. 느슨한 정책을 사용하면, 최상위 "조직 도메인"이 일치해야 한다. 조직 도메인(Organizational Domain)은 공개 DNS 접미사 목록을 확인한 다음 DNS 레이블을 추가해서 찾는다. 예를 들어, ".com.au" 도메인 등록 기관이 존재하므로, "abcdexample.com.au"와 "example.com.au"는 동일한 조직 도메인을 가진다. 조직 도메인은 Public Suffix List에서만 파생할 수 있다.

SPF과 DKIM처럼 DMARC는 도메인 소유자, 특정 DNS 도메인을 변경할 수 있는 권한을 가진 주체라는 개념을 사용한다.

SPF는 보내는 메일 서버의 IP 주소가 SMTP MAIL FROM 명령에 나타나는 도메인 소유자의 승인을 받았는지 확인한다. (MAIL FROM의 전자 메일 주소는 envelope-from 또는 5321.MailFrom으로 지칭한다) DMARC는 SPF 검사 통과 외에도 5321.MailFrom 값과 5322.MailFrom 값이 연관되는지 확인한다.

DKIM을 사용하면 전자 메일 메시지의 일부를 암호로 서명할 수 있으며 서명에는 보낸 사람 필드가 반드시 포함되어야한다. DKIM-Signature 메일 헤더 내에서 d= (domain) 및 s= (selector) 태그는 DNS에서 서명의 공개 키를 조회할 주소를 지정한다. 유효한 서명은 서명자가 도메인 소유자이고 서명한 후 보낸 사람 필드가 수정되지 않았음을 보장한다. 이메일 메시지에는 여러 개의 DKIM 서명이 있을 수 있다. DMARC는 d= 태그의 도메인이 From: 헤더 필드에 명시된 발신자의 도메인과 연관되는 유효한 서명을 요구한다.

 


DNS 레코드 
DMARC 레코드는 _dmarc.example.com처럼 하위 도메인 레이블 _dmarc로 DNS에 게시된다.

TXT 레코드의 내용은 SPF와 DKIM 레코드와 유사한 name=value 태그로 구성되며 세미콜론으로 구분한다.

예시:

"v=DMARC1;p=none;sp=quarantine;pct=100;rua=mailto:dmarcreports@example.com;"
v는 버전, p는 정책, sp는 하위 도메인 정책, pct는 정책을 적용할 '부적합' 이메일의 비율, rua는 일일 보고서를 보낼 URI이다. 하위 도메인은 자체 DMARC 레코드를 게시할 수 있으므로, 수신자는 조직 도메인 레코드로 폴백하기 전에 먼저 확인해야한다.

 


보고서 
DMARC는 두 가지 유형의 보고서를 생성할 수 있다. 종합 보고서는 rua 태그로 지정된 주소로 전송된다. 포렌식 보고서는 ruf 태그로 지정된 주소로 전송된다. 이 주소는 반드시 URI mailto 포맷으로 지정해야한다.(예: worker@example.net) 여러 개의 보고 주소를 사용할 수 있으며 개별 주소는 콤마로 구분된 완전한 URI 형식이어야 한다.

보고서를 수신할 메일 주소는 외부 도메인에 속할 수 있다. 이 경우 보고서를 수신할 도메인은 수신 동의 의사를 나타내는 DMARC 레코드를 설정해야한다. 예를 들어, 수신 메일 시스템에서 From: someone@sender.example 로 표시된 메시지를 받아 보고서를 보낼 때 ruf=mailto:some-id@thirdparty.example 항목이 있다면, 수신 대상이 관리하는 네임 스페이스에 아래와 같은 DNS 레코드가 있는지 확인한다.

sender.example._report._dmarc.thirdparty.example IN TXT "v=DMARC1;"
종합 보고서 편집
종합 보고서는 일반적으로 하루에 한 번 XML 파일로 전송된다. 제목에는 보고 대상 메일 메시지의 정책 게시자인 "Report Domain"과 보고서를 발행하는 주체인 "Submitter"를 포함한다. 페이로드는 보고서 발급 수신자, 보고 기간의 시작과 종료 시점(유닉스 타임 스탬프), 고유 식별자(선택)를 ! 구분자로 조합하고 압축 방식별 확장자로 구성된 긴 이름의 첨부 파일이다.[5]

예: example.com!example.org!1475712000!1475798400.xml.gz

XML 내용은 보고서의 기반이되는 정책을 포함하는 머리글과 보고서 메타 데이터로 구성되며 복수의 레코드로 이어진다. XML 스키마는 표준[6]의 부록 C에 정의되어 있다. DMARC 레코드는 XSL 스타일 시트를 적용하여 HTML로 직접 변환할 수 있다.

 

 


각주 
 “RFC 7489 - Domain-based Message Authentication, Reporting, and Conformance (DMARC)”. 《datatracker.ietf.org》.
 Terry Zink (2016년 9월 27일). “How we moved microsoft.com to a p=quarantine DMARC record”. 《MSDN blog》. If that sounds like a lot of work, that’s because it was
 Kucherawy, M.; Zwicky, E. (2013년 7월 15일). “Domain-based Message Authentication, Reporting and Conformance (DMARC) [draft 01]”. IETF. Appendix A.3, Sender Header Field. 2016년 5월 24일에 확인함.
 “Bulk Senders Guidelines – Gmail Help”. 《support.google.com》. 2015년 4월 24일에 확인함.
 “What is the rationale for choosing ZIP for the aggregate reports?”. 《DMARC.org》. 2012. 2019년 4월 3일에 확인함. Once GZIP is registered as a MIME application type with IANA, the DMARC group will consider it as inclusion in the draft
 .

 


외부 링크
DMARC - 공식 웹사이트

'기타 > 잡것들' 카테고리의 다른 글

[VMware] 복사 본 사용이 네트웍 끊김 해결하기  (0) 2020.04.10

https://blog.naver.com/best_somansa/221671503692

사용자의 계정 정보를 변경하기 위해서는 Administrator 계증으로 작업하는 것이 좋다.

먼저, Administrator 계정을 활성화한 후 작업한다.

 

1. 명령 프롬프트를 관리자 권한으로 실행한 후 아래 명령을 입력하면 Administrator 계정이 활성화 된다.

net user administrator /active:yes              --> (Administrator 계정 활성화, 비활성화는 :no 를 입력하면된다. )

2. 현재 접속자 계정을 로그아웃한 뒤 (또는 윈도우를 재 실행) , Administrator 계정으로 접속한다.

 

3. (Win 로고 키 + x 키)를 누른 후 "컴퓨터 관리" 를 클릭합니다.

 

4. 왼쪽의 "로컬 사용자 및 그룹 > 사용자"에서 변경할 계정을 마우스 오른쪽 클릭합니다.

 

5. "이름 바꾸기"를 누르고 변경할 계정 이름을 입력 후 종료합니다.

 

6. 명령 프롬프트를 관리자 권한으로 실행한 후 아래 명령을 입력한다.

c:\User> ren  현재이름    변경할이름

7. Administrator 로그아웃 후  변경된 계정으로 접속한다.

'기타 > windows' 카테고리의 다른 글

[윈도우] 윈도우쉘(프롬프트) 명령  (0) 2020.05.10

+ Recent posts