StoryCode

실시간 SQL LOG 남기는 방법

Database 관리/MySQL
반응형

영구히 SQL LOG 가 남는다. 더이상 필요없으면 끄자.

 

1) SET GLOBAL general_log = 'ON'; # OFF

2) SET GLOBAL general_log_file = '/var/log/mysql/sql.log';

 

반응형

'Database 관리 > MySQL' 카테고리의 다른 글

2023-226.MySQL,Architecture,아키텍처.우기  (0) 2023.08.06
콘솔.Tag자동완성  (0) 2023.07.31
Plan.용어.설명  (0) 2023.03.22
save as CSV  (0) 2022.01.07
표준 ANSI SQL MODE (Strict Mode) 사용 On/OFF  (0) 2019.05.03

2023-226.MySQL,Architecture,아키텍처.우기

Database 관리/MySQL
반응형
About InnoDB      
Query Cache 동일한 Query 에 대해 Cache 하나 데이타 변경시 부하가 커서(캐시 데이타 삭제때마다 Lock 발생때문) MySQL  8 부터는 기능 폐지.
PK - PK 는 클러스터링 된다. 그러므로 회원별 조회가 많다면 반드시 PK 가 되는 것이 좋다. 다만 쓰기 기능은 느려진다. (클러스터링 처리를 위한 데이타 재 배열 발생때문)
- PK 가 없으면 암묵적 PK 생성되며 직접 접근 불가능
StorageEngine.MVCC.InnoDBBufferPool - Insert 후 Commit 하면 데이타를 BufferPool 에 보관.
- Update 하면 Commit 전이라도 데이타를 BufferPool 에 보관
StorageEngine.MVCC.UndoLog - Commit 전 데이타를 임시 보관
StorageEngine.MVCC.RedoLog - Commit 후 데이타를 저장.
Isolation Level 1) READ_UNCOMMITTED 일 경우 : BufferPool 값이 SELECT. 커밋 안된 데이타를 볼 수 있음 = Dirty Read
2) READ_COMMITED, REPEATABLE_READ, SERIALAZABLE : UndoLog 값이 SELECT. 커밋된 데이타만 볼 수 있음.
3) RPREATABLE READ : 내가 특정 트랜잭션에서 읽는 동안에는 동일한 결과만 나옴. 다른 트랜잭션에서 새로운 데이타를 추가할 수는 있음. Ex> 책가격을 보는 중인데, 판매자가 가격을 바꿔도, 적어도 내가 보던 트랜잭션에서는 책가격이 유지됨.
4) SERIALIZABLE : 완벽하지만 오류없음.
Adaptive Hash Index - Index Key 와 Page Address 쌍. Page Address 가 있으므로 Page 에 빨리 액세스 가능
- DB 가 자동으로 접근빈도 높은 데이타에 인덱스 생성함.
LockingLevel - Index Lock. 김씨를 조회씨 성씨 Index 를 탈 경우, 김씨 Index가 모두 Lock 이 걸림.
- Full Scan 시, 암묵적 PK Index 전체가 Lock 걸림.
- 즉 복합 인덱스 매우 중요해짐

 

반응형

'Database 관리 > MySQL' 카테고리의 다른 글

실시간 SQL LOG 남기는 방법  (0) 2023.09.18
콘솔.Tag자동완성  (0) 2023.07.31
Plan.용어.설명  (0) 2023.03.22
save as CSV  (0) 2022.01.07
표준 ANSI SQL MODE (Strict Mode) 사용 On/OFF  (0) 2019.05.03

콘솔.Tag자동완성

Database 관리/MySQL
반응형

mysql --auto-rehash -u -p

반응형

'Database 관리 > MySQL' 카테고리의 다른 글

실시간 SQL LOG 남기는 방법  (0) 2023.09.18
2023-226.MySQL,Architecture,아키텍처.우기  (0) 2023.08.06
Plan.용어.설명  (0) 2023.03.22
save as CSV  (0) 2022.01.07
표준 ANSI SQL MODE (Strict Mode) 사용 On/OFF  (0) 2019.05.03

Data Directory 변경

Database 관리/Maria DB
반응형

[ Windows ]

- maraidb service 중지

- my.ini 에 datadir 을 수정

- data/ 아래의 모든 디렉토리와 파일을 수정한 디렉토리로 이동

- 혹시 my.ini 가 data/my.ini 에 들어있다면, data/my.ini 는 그대로 둘 것

- mariadb service 시작

 

[ Ubuntu in WSL ]

- su) service mariadb stop

- cp /var/lib/mysql /mydir/

- chown -R mysql:mysql /mydir

- /etc/mysql/mariadb.conf.d/50-server.cnf 에 datadir = /mydir 로 수정

- su) service mariadb start

반응형

'Database 관리 > Maria DB' 카테고리의 다른 글

binlog 삭제  (0) 2023.01.16
Install mariadb.10.6.tar.gz in ubuntu  (0) 2022.01.18
Lock, 락, 해결  (0) 2021.10.29
RDS, export, mysqldump/ import  (0) 2021.10.14
[편법] CVS Parsing, 파싱  (0) 2021.09.23

Plan.용어.설명

Database 관리/MySQL
반응형

# 참조 : https://jaejade.tistory.com/128

 

ALL: 테이블을 처음부터 끝까지 탐색하여 데이터를 찾는 방식. (Table Full scan)
index: 인덱스를 처음부터 끝까지 탐색하여 데이터를 찾는 방식 (Index Full scan)
ragne: 특정 범위 내에서 인덱스를 사용하여 원하는 데이터를 추출. 데이터가 방대하지 않다면 단순 SELECT 에서는 나쁘지 않음.
ref: 조인을 할 때 Primary Key 혹은 Unique Key가 아닌 Key로 매칭 하는 경우
eq_ref: 조인을 할 때 Primary Key로 매칭
const: SELECT에서 Primary Key 혹은 Unique Key를 살수로 조회하는 경우로 많아야 한 건의 데이터만 있음
system: 테이블에 1개의 데이터만 있는 경우

반응형

'Database 관리 > MySQL' 카테고리의 다른 글

실시간 SQL LOG 남기는 방법  (0) 2023.09.18
2023-226.MySQL,Architecture,아키텍처.우기  (0) 2023.08.06
콘솔.Tag자동완성  (0) 2023.07.31
save as CSV  (0) 2022.01.07
표준 ANSI SQL MODE (Strict Mode) 사용 On/OFF  (0) 2019.05.03

binlog 삭제

Database 관리/Maria DB
반응형

# 참조 : https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=hanajava&logNo=221008795923&categoryNo=46&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView

 

 

Maria02 [test]> show binary logs;
+------------------+------------+
| Log_name         | File_size  |
+------------------+------------+
| mysql-bin.000035 |        401 |
| mysql-bin.000036 |        362 |
| mysql-bin.000037 | 1073742328 |
| mysql-bin.000038 |   77130306 |
+------------------+------------+
4 rows in set (0.05 sec)


Maria02 [test]> purge binary logs to 'mysql-bin.000038';
Query OK, 0 rows affected (0.10 sec)

 
Maria02 [test]> show binary logs;
0 row in set (0.14 sec)

Maria02 [test]>

 

​========================================================================================

DB에 레코드가 많이 쌓여 테이블 파일의 용량이 증가하는 것도 문제지만,

binary log를 초기 세팅대로 방치하면 금방 HDD가 꽉 차게 된다.

 

 

# ll -h
total 22G
drwx------ 2 mysql mysql 4.0K Feb 5 10:37 acclog
-rw-r----- 1 mysql mysql 112K Feb 5 19:09 localhost.localdomain.err
-rw-rw---- 1 mysql mysql 5 Feb 5 19:09 localhost.localdomain.pid
drwx------ 2 mysql mysql 4.0K Feb 5 10:15 mysql
-rw-rw---- 1 mysql mysql 1.1G Feb 15 07:13 mysql-bin.000174
-rw-rw---- 1 mysql mysql 1.1G Feb 15 07:24 mysql-bin.000175
-rw-rw---- 1 mysql mysql 1.1G Feb 15 07:36 mysql-bin.000176
-rw-rw---- 1 mysql mysql 1.1G Feb 15 07:47 mysql-bin.000177
-rw-rw---- 1 mysql mysql 1.1G Feb 15 07:59 mysql-bin.000178
-rw-rw---- 1 mysql mysql 1.1G Feb 15 08:16 mysql-bin.000179
-rw-rw---- 1 mysql mysql 1.1G Feb 15 08:31 mysql-bin.000180
-rw-rw---- 1 mysql mysql 1.1G Feb 15 08:42 mysql-bin.000181
-rw-rw---- 1 mysql mysql 1.1G Feb 15 08:54 mysql-bin.000182
-rw-rw---- 1 mysql mysql 1.1G Feb 15 09:05 mysql-bin.000183
-rw-rw---- 1 mysql mysql 1.1G Feb 15 09:17 mysql-bin.000184
-rw-rw---- 1 mysql mysql 1.1G Feb 15 09:29 mysql-bin.000185
-rw-rw---- 1 mysql mysql 1.1G Feb 15 09:40 mysql-bin.000186
-rw-rw---- 1 mysql mysql 1.1G Feb 15 09:52 mysql-bin.000187
-rw-rw---- 1 mysql mysql 1.1G Feb 15 10:04 mysql-bin.000188
-rw-rw---- 1 mysql mysql 334M Feb 15 11:43 mysql-bin.000189
-rw-r----- 1 mysql mysql 418 Feb 15 10:04 mysql-bin.index
drwx------ 2 mysql mysql 4.0K Feb 5 10:15 test


 

data 디렉토리(configure에 따라 다름) 내의 파일들을 보면 binary log가 많이 생성된 것을 알 수 있다.

파일을 rm 명령어로 직접 지우지 말고 mysql 콘솔에서 지우는 것이 바람직하다.

 

 

 mysql> show binary logs;
+------------------+------------+
| Log_name         | File_size  |
+------------------+------------+
| mysql-bin.000174 | 1073742003 |
| mysql-bin.000175 | 1073742050 |
| mysql-bin.000176 | 1073741968 |
| mysql-bin.000177 | 1073742039 |
| mysql-bin.000178 | 1073741908 |
| mysql-bin.000179 | 1073742024 |
| mysql-bin.000180 | 1073742027 |
| mysql-bin.000181 | 1073741959 |
| mysql-bin.000182 | 1073741883 |
| mysql-bin.000183 | 1073741988 |
| mysql-bin.000184 | 1073741999 |
| mysql-bin.000185 | 1073741927 |
| mysql-bin.000186 | 1073742098 |
| mysql-bin.000187 | 1073742018 |
| mysql-bin.000188 | 1073742083 |
| mysql-bin.000189 |  349569498 |
+------------------+------------+
16 rows in set (0.00 sec)

mysql 콘솔에서는 위 명령으로 확인 가능.

 

 

mysql> purge master logs to 'mysql-bin.000186';
Query OK, 0 rows affected (0.91 sec)
mysql> show binary logs;
+------------------+------------+
| Log_name         | File_size  |
+------------------+------------+
| mysql-bin.000186 | 1073742098 |
| mysql-bin.000187 | 1073742018 |
| mysql-bin.000188 | 1073742083 |
| mysql-bin.000189 |  349742255 |
+------------------+------------+
4 rows in set (0.00 sec)

위 명령어에서 binary 로그 이름을 지정하면 해당 파일 이전의 파일들을 모두 삭제한다.

 

 

mysql> set global expire_logs_days=2;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE '%expire%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 2     |
+------------------+-------+
1 row in set (0.00 sec)

그리고 binary 로그를 저장할 주기를 설정한다.

시스템 사고가 발생해도 근시일 내에 확인할 수 있거나 특별히 백업해 분석할 것이 아니라면 2일 정도면 충분할 것이다.

 

출처: http://whiterussian.tistory.com/36 [화이트 러시안]

​==================================================================================

​MySQL에서 사용하는 log-bin이라는 옵션은 사용된 쿼리들이 로깅되는 파일이며 Innodb 혹은 Replication등에서 사용되곤 합니다.

하지만 이 파일의 문제는 무한정 늘어난다는 것입니다. relay-log-space-limit 같은 옵션이 있지만 이 옵션은 Replication에서 사용되는 relay-log-bin의 용량을 제한 하는 옵션이지 해결책이 되지 못합니다.

하지만 이 파일을 정리하는 방법이 있습니다.

우선 다음의 Query를 사용하는 것입니다.

PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)

 

INTERVAL에서는 원하시는 로깅 시점을 기록하시면 됩니다. 위의 경우에는 30일 이전의 로깅 정보를 삭제하게 됩니다.

차례차례 해보도록 하겠습니다.

 

1. 현재의 하드디스크 용량 상태를 확인합니다.

[root@Theeye db]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              18G  1.9G   15G  12% /
/dev/sda3              15G  803M   13G   6% /home
/dev/sda2              97G   78G   15G  85% /usr/local/mysql/db

데이터베이스 공간이 85%나 사용되어 곧 꽉찰지도 모른다는 불안감에 휩싸이게 되었습니다.

 

2. log-bin 파일을 확인해 봅시다.
[root@Theeye db]# ls mysql-bin.*
mysql-bin.000001  mysql-bin.000002  mysql-bin.000003 ......  mysql-bin.000073

파일이 엄청나게 많이 있습니다.

 

3. 다음 명령어를 수행합니다.
mysql -e "PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)"

물론 mysql에 접속하셔서 위의 명령어를 입력하셔도 됩니다. Super권한을 가진 root계정으로 실행해 주세요.

 

4. log-bin 파일이 줄었나 확인해 봅시다.
[root@Theeye db]# ls mysql-bin.*
mysql-bin.000041  mysql-bin.000042  mysql-bin.000043 ......  mysql-bin.000073

41번 이전의 파일들이 모두 삭제 되었습니다. 41번 부터가 최근 30일 이내의 로그정보가 남아있는 모양이군요.

 

5. 하드디스크 용량 상태를 확인해 봅시다.
[root@Theeye db]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              18G  1.9G   15G  12% /
/dev/sda3              15G  803M   13G   6% /home
/dev/sda2              97G   40G   53G  43% /usr/local/mysql/db

확실히 용량이 많이 확보가 되었군요^^

주기적인 실행이 필요하실 경우에는 위의 명령어를 crontab에 등록하시면 됩니다. 일주일에 한번정도의 실행이 적당하겠네요.

=================================================================​

MySQL Binary Log 는 add, delete, insert, update 등의 query 가 저장되어 있는 파일로서

MySQL을 설치하게 되면 기본적으로 MySQL Binary Log 가 생성됩니다.
Binary Log 를 쌓지 않아도 되는 MySQL 구동 환경에서는 Binary Log 를 삭제하므로, 디스크 공간
여유 공간을 확보할 수 있는데, MySQL Binary Log 를 지우는 방법에 대해서 알아보겠습니다.

1. MySQL Replication 환경에서 지우기

  - MySQL Replication MASTER 서버
    shell> mysql -u root -p
    mysql> RESET MASTER;

  - MySQL Replication SLAVE 서버
    shell> mysql -u root -p
    mysql> RESET MASTER;

2. MySQL Binary Log sequence number 또는 특정 일자로 지우기

  shell> mysql -u root -p
  mysql> PURGE BINARY LOGS TO 'mysql-bin.000015';
  shell> mysql -u root -p
  mysql> PURGE BINARY LOGS BEFORE '2009-05-01 00:00:00';

3. mysqladmin flush-logs 명령어를 통해서 MySQL Binary Log 지우기

   shell> mysqladmin -u root -p flush-logs

4. MySQL Binary Log 생성을 방지하는 방법

  /etc/my.cnf 파일에서 아래 라인을 주석 처리
  log-bin

5. MySQL Binary Log 를 특정 1주일까지만 생성 및 보관하기
  /etc/my.cnf 파일에서 아래 라인을 추가
  expire_logs_days = 7

 

 

반응형

'Database 관리 > Maria DB' 카테고리의 다른 글

Data Directory 변경  (0) 2023.05.26
Install mariadb.10.6.tar.gz in ubuntu  (0) 2022.01.18
Lock, 락, 해결  (0) 2021.10.29
RDS, export, mysqldump/ import  (0) 2021.10.14
[편법] CVS Parsing, 파싱  (0) 2021.09.23

MSSQL.Client.MSSQL-TOOLS.SQLCMD.Ubuntu22 설치

Database 관리/MSSQL
반응형

# https://learn.microsoft.com/ko-kr/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver16#ubuntu18

 

nmap --script ssl-enum-ciphers 202.30.110.132 # Check 1433.TLSv1.0

1433/tcp open  ms-sql-s
| ssl-enum-ciphers:
|   TLSv1.0: # <============= 확인
|     ciphers:
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|     compressors:
|       NULL
|     cipher preference: server
|     warnings:
|       Weak certificate signature: SHA1
|_  least strength: A
  vi /etc/ssl/openssl.cnf
    [system_default_sect]
    MinProtocol = TLSv1 #<=========== TLVv1
    CipherString = DEFAULT:@SECLEVEL=0 #<======= No Cipher
if ! [[ "18.04 20.04 22.04" == *"$(lsb_release -rs)"* ]];
then
    echo "Ubuntu $(lsb_release -rs) is not currently supported.";
    exit;
fi

sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list > /etc/apt/sources.list.d/mssql-release.list

exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install -y unixodbc-dev

cd /opt/mssql-tools18/bin
./sqlcmd -C -S 123.456.789.012 -U userid -P password # -C 는 Error.Protocol 발생시 추가
    1> user master
    2> select @@ServiceName
    3> go
반응형

속도.postgres vs mariad

Database 관리/PostgreSQL
반응형

# 참조 : https://techblog.woowahan.com/6550/

 

# 설치편 먼저 볼 것.

 

Test Machine Spec) DELL Notebook i7 5500U 2C4T 16GMem SSD, Ubuntu 22

 

1) 1000 M Bulk Load Test

Data 1000MB 1000만건) 포맷은 아래 사진 참조

1.1) postgres 테스트

psql # \c service4loadtest;

psql # CREATE TABLE BULKLOADDATA_TBL (
  A date default NULL,  B date default NULL,
  C varchar(10) default NULL,  D varchar(10) default NULL,  E varchar(10) default NULL,  F varchar(10) default NULL,
  G varchar(10) default NULL,  H varchar(10) default NULL,  I varchar(10) default NULL,  J varchar(10) default NULL,
  K integer default NULL,  L integer default NULL,  M integer default NULL,  N integer default NULL,
  O integer default NULL
);

 

psql # \dt

psql # copy bulkloaddata_tbl (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) from '/var/lib/postgresql/databaseloadtest/loadtest.dat'

결론 ) 23초 소요

 

 

mariadb )

mariadb # mysql -uroot -p

mariadb # create database service4loadtest;

mariadb # use service4loadtest;

CREATE TABLE BULKLOADDATA_TBL (
  A date default NULL,  B date default NULL,
  C varchar(10) default NULL,  D varchar(10) default NULL,  E varchar(10) default NULL,  F varchar(10) default NULL,
  G varchar(10) default NULL,  H varchar(10) default NULL,  I varchar(10) default NULL,  J varchar(10) default NULL,
  K int(11) default NULL,  L int(11) default NULL,  M int(11) default NULL,  N int(11) default NULL,
  O int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

mariadb # LOAD DATA INFILE '/home/user/databaseloadtest/loadtest.dat'
INTO TABLE BULKLOADDATA_TBL
FIELDS TERMINATED BY ' '
LINES TERMINATED BY '\n'
(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o);

결과 ) 41 초 소요

 

2) UPDATE 1000만건

psql # UPDATE BULKLOADDATA_TBL SET K = TRUNC(RANDOM() * 10000000);

결론) 35 초

 

mariadb # UPDATE BULKLOADDATA_TBL SET K = FLOOR(RAND() * 10);

결론) 51 초

 

3) 인덱스 생성 1000만건

psql # CREATE INDEX BULKLOADDATA_IDX ON BULKLOADDATA_TBL  ( K );

결론) 6초

mariadb # CREATE INDEX BULKLOADDATA_IDX ON BULKLOADDATA_TBL  ( K );

결론) 32초

 

4) 정수 Max SELECT 1000만건

psql # SELECT MAX(K) FROM BULKLOADDATA_TBL;

결론) 즉시

mariadb # SELECT MAX(K) FROM BULKLOADDATA_TBL;

결론) 0.001 초

 

5) 정수 SUM 1000만건

psql # SELECT SUM(K) FROM BULKLOADDATA_TBL;

결론) 1.5초

mariadb # SELECT SUM(K) FROM BULKLOADDATA_TBL;

mariadb # 2.5초

 

6) 

 

 

반응형

설치/기본사용.우분투

Database 관리/PostgreSQL
반응형

1) sudo apt-get install postgresql postgresql-contrib

 

2) psql --version

 

3) > sudo -i -u postgres

> psql

 

혹은

> sudo -u postgres psql

 

4) 사용자

psql # create user service;

psql # drop user service;

psql # create role service superuser; # drop role service;

psql # \du

psql # \q

 

5) 데이타베이스

psql # create database service4loadtest;

psql # \list

 

 

반응형

'Database 관리 > PostgreSQL' 카테고리의 다른 글

속도.postgres vs mariad  (0) 2022.06.15
Docker 설치  (0) 2022.01.18
필독) 특이 SQL 및 PLAN, Access 방식, 지원 Join, Query Rewrite  (0) 2021.12.30

Docker 설치

Database 관리/PostgreSQL
반응형

1. hub.docker.com> search offiicial immage for postgresql > click > find command like "docker pull postgres"

 

2. docker pull postgres

 

3. docker run -d -p 5432:5432 -e POSTGRES_PASSWORD="<YourStrong@Passw0rd>" --name PostgreSQL01 postgres

 

4. 

반응형