StoryCode

Install mariadb.10.6.tar.gz in ubuntu

Database 관리/Maria DB
반응형

# 참조 : https://dbwriter.io/installation-mariadb10/

 

1) 다운로드

https://downloads.mariadb.org/

 

2) 압축해제 및 mysql 사용자 추가

sudo groupadd mysql
sudo useradd -g mysql mysql
cd /usr/local
sudo tar -zxvpf mariadb-10.6.4-linux-systemd-x86_64.tar.gz
sudo ln -s mariadb-10.6.4-linux-systemd-x86_64 mysql

 

3) vi /etc/my.cnf

[client-server]
port=3306

# This will be passed to all MariaDB clients
[client]

# The MariaDB server
[mysqld]
# Directory where you want to put your data
datadir=/usr/local/mysql/data

 

character-set-server = utf8mb4
init_connect = SET collation_connection = utf8mb4_general_ci
init_connect = SET NAMES utf8mb4


# This is the prefix name to be used for all log, error and replication files
log-basename=mariadb

 

 

 

4) 초기화

cd /usr/local/mysql
sudo ./scripts/mysql_install_db --user=mysql

 

 

5) 디렉토리 권한 변경

/usr/local/mysql> sudo chown -R root .
/usr/local/mysql> sudo chown -R mysql data

 

6) 서버 기동

sudo ./bin/mysqld_safe --user=mysql &
or
sudo ./bin/mysqld_safe --defaults-file=~/.my.cnf --user=mysql &

 

7) 오류발생시

# ERROR 2002 (HY000): Can't connect to local server through socket '/var/run/mysqld/mysqld.sock' (2)

sudo mkdir /var/run/mysqld

sudo ln - /tmp/mysql.sock /var/run/mysqld/mysqld.sock

 

8)

> mysql

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.6.4-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> select user();

+------------------+
| user()           |
+------------------+
| user@localhost |
+------------------+

 

9)  sudo ./mysql_secure_installation

Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] Y
New password: "ROOT 비번 설정"
Re-enter new password:
Password updated successfully!
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] n
Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

 

10)

mysql> select host, user from mysql.user;

mysql> create user ml@localhost identified by 'ml';

mysql> flush privileges;

mysql> grant all privileges on *.* to ml@'localhost' identified by 'ml';

mysql> grant all privileges on *.* to ml@'%' identified by 'ml';
mysql> flush privileges;

 

11)

show variables like '%set%';

SELECT schema_name, default_character_set_name, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA ;

반응형

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

Data Directory 변경  (0) 2023.05.26
binlog 삭제  (0) 2023.01.16
Lock, 락, 해결  (0) 2021.10.29
RDS, export, mysqldump/ import  (0) 2021.10.14
[편법] CVS Parsing, 파싱  (0) 2021.09.23

데이타베이스 콘솔 기본 명령어 모음

Database 관리
반응형
  Oracle MySQL / MariaDB postgres Mongdb
접속   mysql -u id -p pwd psql -U postgres  
Exit   exit \q  
데이타베이스 목록   show databaes; \l
select 
* from pg_catalog.pg_namespace;
 
데이타베이스 선택   use db명 \c databasename  
테이블 목록     SELECT *
FROM pg_catalog.pg_tables
WHERE
schemaname = 'public'
AND tablename LIKE 'Weath%';
 
         

 

반응형

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

디비별 SQL 비교  (0) 2020.01.12

Spool 옵션

Database 관리/Tibero
반응형

# 참조 : https://positivemh.tistory.com/417

 

OS환경 : Oracle Linux6.8(64bit)

 

DB 환경 : Oracle Database 11.2.0.4

 

방법 : sqlplus spool 기능 사용 시 명령어 안나오게 하는방법 sqlplus 명령어

sqlplus에서 spool 기능을 이용해 쿼리를 실행할 때 해당 쿼리도 같이 spool 한 파일에 나옴

기존 방법으로 sqlplus 접속 후 spool 후 쿼리 실행

 

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
$ sqlplus scoot/tiger
 
SQL*Plus: Release 11.2.0.4.0 Production on Mon Feb 11 16:46:43 2019
 
Copyright (c) 19822013, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters and Data Mining options
 
SQL> spool imsi1.txt
SQL> select * from emp;
 
     EMPNO ENAME      JOB           MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7839 KING       PRESIDENT (null)       17-NOV-81       5000 (null)           10
      7698 BLAKE      MANAGER          7839 01-MAY-81       2850 (null)           30
      7782 CLARK      MANAGER          7839 09-JUN-81       2450 (null)           10
      7566 JONES      MANAGER          7839 02-APR-81       2975 (null)           20
      7788 SCOTT      ANALYST          7566 19-APR-87       3000 (null)           20
      7902 FORD       ANALYST          7566 03-DEC-81       3000 (null)           20
      7369 SMITH      CLERK          7902 17-DEC-80        800 (null)           20
      7499 ALLEN      SALESMAN          7698 20-FEB-81       1600        300       30
      7521 WARD       SALESMAN          7698 22-FEB-81       1250        500       30
      7654 MARTIN     SALESMAN          7698 28-SEP-81       1250       1400       30
      7844 TURNER     SALESMAN          7698 08-SEP-81       1500      0       30
      7876 ADAMS      CLERK          7788 23-MAY-87       1100 (null)           20
      7900 JAMES      CLERK          7698 03-DEC-81        950 (null)           30
      7934 MILLER     CLERK          7782 23-JAN-82       1300 (null)           10
 
14 rows selected.
 
SQL> spool off
SQL> exit

 

 

spool 된 imsi1.txt 파일 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ cat imsi1.txt
SQL> select * from emp;
 
     EMPNO ENAME      JOB           MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7839 KING       PRESIDENT (null)       17-NOV-81       5000 (null)           10
      7698 BLAKE      MANAGER          7839 01-MAY-81       2850 (null)           30
      7782 CLARK      MANAGER          7839 09-JUN-81       2450 (null)           10
      7566 JONES      MANAGER          7839 02-APR-81       2975 (null)           20
      7788 SCOTT      ANALYST          7566 19-APR-87       3000 (null)           20
      7902 FORD       ANALYST          7566 03-DEC-81       3000 (null)           20
      7369 SMITH      CLERK          7902 17-DEC-80        800 (null)           20
      7499 ALLEN      SALESMAN          7698 20-FEB-81       1600        300       30
      7521 WARD       SALESMAN          7698 22-FEB-81       1250        500       30
      7654 MARTIN     SALESMAN          7698 28-SEP-81       1250       1400       30
      7844 TURNER     SALESMAN          7698 08-SEP-81       1500      0       30
      7876 ADAMS      CLERK          7788 23-MAY-87       1100 (null)           20
      7900 JAMES      CLERK          7698 03-DEC-81        950 (null)           30
      7934 MILLER     CLERK          7782 23-JAN-82       1300 (null)           10
 
14 rows selected.
 
SQL> spool off

 

 

 

 

-s 옵션 사용해서 sqlplus 접속 후 spool 후 쿼리 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ sqlplus -s scott/tiger
spool imsi2.txt
select * from emp;
 
     EMPNO ENAME      JOB           MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7839 KING       PRESIDENT (null)       17-NOV-81       5000 (null)           10
      7698 BLAKE      MANAGER          7839 01-MAY-81       2850 (null)           30
      7782 CLARK      MANAGER          7839 09-JUN-81       2450 (null)           10
      7566 JONES      MANAGER          7839 02-APR-81       2975 (null)           20
      7788 SCOTT      ANALYST          7566 19-APR-87       3000 (null)           20
      7902 FORD       ANALYST          7566 03-DEC-81       3000 (null)           20
      7369 SMITH      CLERK          7902 17-DEC-80        800 (null)           20
      7499 ALLEN      SALESMAN          7698 20-FEB-81       1600        300       30
      7521 WARD       SALESMAN          7698 22-FEB-81       1250        500       30
      7654 MARTIN     SALESMAN          7698 28-SEP-81       1250       1400       30
      7844 TURNER     SALESMAN          7698 08-SEP-81       1500      0       30
      7876 ADAMS      CLERK          7788 23-MAY-87       1100 (null)           20
      7900 JAMES      CLERK          7698 03-DEC-81        950 (null)           30
      7934 MILLER     CLERK          7782 23-JAN-82       1300 (null)           10
 
14 rows selected.
 
spool off

 

spool 된 imsi2.txt 파일 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
     EMPNO ENAME      JOB           MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7839 KING       PRESIDENT (null)       17-NOV-81       5000 (null)           10
      7698 BLAKE      MANAGER          7839 01-MAY-81       2850 (null)           30
      7782 CLARK      MANAGER          7839 09-JUN-81       2450 (null)           10
      7566 JONES      MANAGER          7839 02-APR-81       2975 (null)           20
      7788 SCOTT      ANALYST          7566 19-APR-87       3000 (null)           20
      7902 FORD       ANALYST          7566 03-DEC-81       3000 (null)           20
      7369 SMITH      CLERK          7902 17-DEC-80        800 (null)           20
      7499 ALLEN      SALESMAN          7698 20-FEB-81       1600        300       30
      7521 WARD       SALESMAN          7698 22-FEB-81       1250        500       30
      7654 MARTIN     SALESMAN          7698 28-SEP-81       1250       1400       30
      7844 TURNER     SALESMAN          7698 08-SEP-81       1500      0       30
      7876 ADAMS      CLERK          7788 23-MAY-87       1100 (null)           20
      7900 JAMES      CLERK          7698 03-DEC-81        950 (null)           30
      7934 MILLER     CLERK          7782 23-JAN-82       1300 (null)           10
 
14 rows selected.

select * from emp; 구문이 나오지 않음

 

컬럼까지 나오지 않게 설정(set heading off)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ sqlplus -s scott/tiger 
set heading off
spool imsi3.txt
select * from emp;
 
      7839 KING       PRESIDENT (null)       17-NOV-81       5000 (null)           10
      7698 BLAKE      MANAGER          7839 01-MAY-81       2850 (null)           30
      7782 CLARK      MANAGER          7839 09-JUN-81       2450 (null)           10
      7566 JONES      MANAGER          7839 02-APR-81       2975 (null)           20
      7788 SCOTT      ANALYST          7566 19-APR-87       3000 (null)           20
      7902 FORD       ANALYST          7566 03-DEC-81       3000 (null)           20
      7369 SMITH      CLERK          7902 17-DEC-80        800 (null)           20
      7499 ALLEN      SALESMAN          7698 20-FEB-81       1600        300       30
      7521 WARD       SALESMAN          7698 22-FEB-81       1250        500       30
      7654 MARTIN     SALESMAN          7698 28-SEP-81       1250       1400       30
      7844 TURNER     SALESMAN          7698 08-SEP-81       1500      0       30
      7876 ADAMS      CLERK          7788 23-MAY-87       1100 (null)           20
      7900 JAMES      CLERK          7698 03-DEC-81        950 (null)           30
      7934 MILLER     CLERK          7782 23-JAN-82       1300 (null)           10
 
14 rows selected.

 

 

 

 

spool 된 imsi3.txt 파일 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ cat imsi3.txt
      7839 KING       PRESIDENT (null)       17-NOV-81       5000 (null)           10
      7698 BLAKE      MANAGER          7839 01-MAY-81       2850 (null)           30
      7782 CLARK      MANAGER          7839 09-JUN-81       2450 (null)           10
      7566 JONES      MANAGER          7839 02-APR-81       2975 (null)           20
      7788 SCOTT      ANALYST          7566 19-APR-87       3000 (null)           20
      7902 FORD       ANALYST          7566 03-DEC-81       3000 (null)           20
      7369 SMITH      CLERK          7902 17-DEC-80        800 (null)           20
      7499 ALLEN      SALESMAN          7698 20-FEB-81       1600        300       30
      7521 WARD       SALESMAN          7698 22-FEB-81       1250        500       30
      7654 MARTIN     SALESMAN          7698 28-SEP-81       1250       1400       30
      7844 TURNER     SALESMAN          7698 08-SEP-81       1500      0       30
      7876 ADAMS      CLERK          7788 23-MAY-87       1100 (null)           20
      7900 JAMES      CLERK          7698 03-DEC-81        950 (null)           30
      7934 MILLER     CLERK          7782 23-JAN-82       1300 (null)           10
 
14 rows selected.

위에 나오던 컬럼들이 나오지 않음

 

14 rows seleted. 까지 삭제 하기(set feedback off)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sqlplus -s scott/tiger 
set heading off
set feedback off
spool imsi4.txt
select * from emp;
 
      7839 KING       PRESIDENT (null)       17-NOV-81       5000 (null)           10
      7698 BLAKE      MANAGER          7839 01-MAY-81       2850 (null)           30
      7782 CLARK      MANAGER          7839 09-JUN-81       2450 (null)           10
      7566 JONES      MANAGER          7839 02-APR-81       2975 (null)           20
      7788 SCOTT      ANALYST          7566 19-APR-87       3000 (null)           20
      7902 FORD       ANALYST          7566 03-DEC-81       3000 (null)           20
      7369 SMITH      CLERK          7902 17-DEC-80        800 (null)           20
      7499 ALLEN      SALESMAN          7698 20-FEB-81       1600        300       30
      7521 WARD       SALESMAN          7698 22-FEB-81       1250        500       30
      7654 MARTIN     SALESMAN          7698 28-SEP-81       1250       1400       30
      7844 TURNER     SALESMAN          7698 08-SEP-81       1500      0       30
      7876 ADAMS      CLERK          7788 23-MAY-87       1100 (null)           20
      7900 JAMES      CLERK          7698 03-DEC-81        950 (null)           30
      7934 MILLER     CLERK          7782 23-JAN-82       1300 (null)           10

 

spool 된 imsi4.txt 파일 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cat imsi4.txt
      7839 KING       PRESIDENT (null)       17-NOV-81       5000 (null)           10
      7698 BLAKE      MANAGER          7839 01-MAY-81       2850 (null)           30
      7782 CLARK      MANAGER          7839 09-JUN-81       2450 (null)           10
      7566 JONES      MANAGER          7839 02-APR-81       2975 (null)           20
      7788 SCOTT      ANALYST          7566 19-APR-87       3000 (null)           20
      7902 FORD       ANALYST          7566 03-DEC-81       3000 (null)           20
      7369 SMITH      CLERK          7902 17-DEC-80        800 (null)           20
      7499 ALLEN      SALESMAN          7698 20-FEB-81       1600        300       30
      7521 WARD       SALESMAN          7698 22-FEB-81       1250        500       30
      7654 MARTIN     SALESMAN          7698 28-SEP-81       1250       1400       30
      7844 TURNER     SALESMAN          7698 08-SEP-81       1500      0       30
      7876 ADAMS      CLERK          7788 23-MAY-87       1100 (null)           20
      7900 JAMES      CLERK          7698 03-DEC-81        950 (null)           30
      7934 MILLER     CLERK          7782 23-JAN-82       1300 (null)           10

14 rows seleted. 결과 건수가 나오지 않음

반응형

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

Tibero 2 CSV  (0) 2022.01.07
Tibero to PostgreSQL  (0) 2022.01.07

save as CSV

Database 관리/MySQL
반응형

참조 : https://gist.github.com/gaerae/6219678

SELECT * FROM my_table
INTO OUTFILE 'my_table.csv'
CHARACTER SET euckr
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
SELECT * FROM (
    (
        SELECT
            '필드1' AS 'filed_1',
            '필드2' AS 'filed_2'
    ) UNION (
        SELECT
            filed_1,
            filed_2
        FROM my_table
    )
) AS mysql_query
INTO OUTFILE 'my_table.csv'
CHARACTER SET euckr
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
mysql -p my_db -e "SELECT * FROM my_table" | sed 's/\t/","/g;s/^/"/;s/$/"/;' > my_table.csv
#!/bin/bash
 
db=YOUR_DB
user=YOUR_USER
pass=YOUR_PASS
 
for table in $(mysql -u$user -p$pass $db -Be "SHOW tables" | sed 1d); do
  echo "exporting $table.."
  mysql -u$user -p$pass $db -e "SELECT * FROM $table" | sed 's/\t/","/g;s/^/"/;s/$/"/;' > $table.csv
done

저는 mysql 8를 사용 중입니다.
1번 쿼리를 사용해보니 'my_table.csv' 파일명에 my.ini의 secure-file-priv 경로를 같이 적어야 정상적으로 파일이 export 되네요.

 

데이터 건 수(몇 십만건)가 많을 경우에는 3번 방법을 사용하면 안될 것 같아요. 데이터 건마다 치환 작업을 해주어야 하니 오랜 시간이 걸립니다.

반응형

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

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

Tibero 2 CSV

Database 관리/Tibero
반응형

# 참조 : https://cafe-de-java.tistory.com/4

# 참조 : https://tommypagy.tistory.com/80

 

한글문제 ) locale -a export LANG="ko_KR.UTF-8" 

 

티베로에서 쿼리 결과를 CSV 파일로 만드는 스크립트이다.

Shell Script에서 Query String 에 "*" Asterisk 문자가 들어가는 경우 주의해서 처리가 필요하다.

(다운로드 : csv_conver_shell파일.txt

 

 

※ 주의 : Asterisk 처리할 때 <더블 쿼테이션><싱글 쿼테이션><아스테리크><싱글 쿼테이션><더블 쿼테이션> 순서로 작성할 것

 

 

$ cat csv_convert.sh

#!/bin/sh

 

CSV_FILE="/home/tibero/work/out.csv"

QUERY_STR="select "'*'" from all_tables;"

SQL_COMMAND="tbsql -s sys/tibero"

 

RESULT=`$SQL_COMMAND <<EOF

set pagesize 0 feedback off ver off heading off echo off

set pages 0 colsep ',' trimspool on lines 30000 termout off

spool $CSV_FILE

$QUERY_STR

spool off

quit

/

EOF

`

 

 

참고로 Asterisk 문자를 Shell Script에서 Query String안에 들어있는 경우 echo 처리 부분은 아래 박스를 참고할 것

 

 

$ QUERY_STR2="SELECT "'*'" FROM ALL_TABLES"

 

$ echo $QUERY_STR2

SELECT csv_convert.sh out.csv FROM ALL_TABLES  ==> Asterisk문자가 현재 디렉토리의 파일 목록으로 대체된다.

 

$ echo "'$QUERY_STR2'"

'SELECT * FROM ALL_TABLES'

 

$ echo "$QUERY_STR2"

SELECT * FROM ALL_TABLES

 

select 문장에 asterisk 가 들어가는 경우 shell script안에 변수로 처리하기가 까다토울 수 있다.

그래서 tbsql 툴을 사용해서 shell script를 짤 경우에는 @를 이용해서 외부 파일을 실행하는 방법으로 스크립트 작성이 편리해 보인다.

 

반응형

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

Spool 옵션  (0) 2022.01.11
Tibero to PostgreSQL  (0) 2022.01.07

Tibero to PostgreSQL

Database 관리/Tibero
반응형

# 참조 : https://cbwstar.tistory.com/110

 

티베로에서 postgresql로 데이타 이관하는 소스 입니다.

파이션으로 만들었습니다.

80만건 되는 데이터를 엑셀로 다운받아서 해볼려고 했는데 엑셀로 80만건 내려받는데 20분이 넘게 걸려서 포기하고

파이쎤으로 만들어 볼까 하고 만들었는데 외상예로 처리 속도가 빨라서 jdbc만 지원하는 모든 데이터 베이스 이관은 이것 하나 응용하면 끝날것 같아서 필요 하신분 있을것 같아서 소스 공개합니다.

80만건 티베로에서 postgresql로 이관시 2분도 안 걸렸습니다.

소스 로직도 간단 합니다. db접속해서 원하는 데이터 쿼리로 가져와서 그냥 sqlalchemy 라이브러리 사용해서 밀어 넣으면 끝입니다.

from sqlalchemy import create_engine
import sqlalchemy.types as sql_types
import jaydebeapi as jp
import pandas as pd
import time

tibero_JDBC_Driver = 'd:\import_trans_erd\python\jdbc\\tibero6-jdbc.jar'
drivers = [tibero_JDBC_Driver]


def postgres_connect(user, password, db, host, port=5432):
    url = 'postgresql://{}:{}@{}:{}/{}'.format(user, password, host, port, db)
    engine = create_engine(url, client_encoding='utf8',
                           executemany_mode='batch')
    return engine


def tibero_connect():
    conn = jp.connect('com.tmax.tibero.jdbc.TbDriver',
                      'jdbc:tibero:thin:@192.168.1.19:9027:naqs', ['id', 'password'], jars=drivers)
    return conn


user = 'id'
password = 'pw'
db = 'naqs'
host = '192.168.1.26'

query = """
    SELECT *
      FROM TABLE
    """

start_time = time.time()
tb_conn = tibero_connect()
df = pd.read_sql_query(query, tb_conn)

pg_engine = postgres_connect(user, password, db, host)
start_time1 = time.time()

print(df.columns)

df.to_sql('table_name_tmp',
          schema='test',
          con=pg_engine,
          if_exists='replace',  # {'fail', 'replace', 'append'), default 'fail'
          chunksize=1000,
          index=False,
          method='multi',
          dtype={
              'LGN_ID': sql_types.VARCHAR(20),
              'REG_TM': sql_types.TIMESTAMP,
              "UPD_TM": sql_types.TIMESTAMP,
              "LAST_LOGIN_DT": sql_types.TIMESTAMP,
              "CONFIRM_DT": sql_types.TIMESTAMP,
              "CANCEL_DT": sql_types.TIMESTAMP,
              "SECSN_DT": sql_types.TIMESTAMP,
              "INFO_AGREE_DT": sql_types.TIMESTAMP

          }
          )

tb_conn.close()

print("Total  : %s seconds" % (time.time() - start_time))
print("to_sql : %s seconds" % (time.time() - start_time1))



오류.참고.리눅스 파이썬 psycopg2 패키지 설치 오류 해결 )

파이썬 3.8버전 기준 리눅스에서 테스트

관련 의존성 라이브러리를 pip로 설치한다.

sudo pip3.8 install sqlalchemy

sudo pip3.8 install jaydebeapi

sudo pip3.8 install pandas

sudo pip3.8 install psycopg2

 

Error: pg_config executable not found. 

에러 발생시 postgresql과 설정에 문제가 있어서 발생 

sudo yum install postgresql postgresql-devel python3-devel

설치 후

다시 설치

sudo pip3.8 install psycopg2

gcc 관려 에러가 발생하면 gcc도 설치 해 준다.

 

sudo yum install gcc

 

/* 리눅스에서 대량의 데이타 sqlalchemy를 사용하여 처리하기 */

/* jdbc 폴더를 만든후에 jdbc드라이브 파일을 올린다 */

파이쎤 파일을 생성한다.

vi test.py

#!/usr/bin/python3.8

from sqlalchemy import create_engine
import sqlalchemy.types as sql_types
import jaydebeapi as jp
import pandas as pd
import time

tibero_JDBC_Driver = './jdbc/tibero6-jdbc.jar'
drivers = [tibero_JDBC_Driver]


def postgres_connect(user, password, db, host, port=5432):
    url = 'postgresql://{}:{}@{}:{}/{}'.format(user, password, host, port, db)
    engine = create_engine(url, client_encoding='utf8',
                           executemany_mode='batch')
    return engine


def tibero_connect():
    conn = jp.connect('com.tmax.tibero.jdbc.TbDriver',
                      'jdbc:tibero:thin:@192.168.1.19:9027:test', ['test', 'test'], jars=drivers)
    return conn



user = 'postgres'
password = 'postgres'
db = 'naqs'
host = '192.168.1.26'

query2 = """
    SELECT *
      FROM tibero.table
    """

start_time = time.time()
tb_conn = tibero_connect()
df = pd.read_sql_query(query2, tb_conn)

pg_engine = postgres_connect(user, password, db, host)
start_time1 = time.time()

print(df.columns)

df.to_sql('test_tmp',
          schema='public',
          con=pg_engine,
          if_exists='replace',  # {'fail', 'replace', 'append'), default 'fail'
          chunksize=1000,
          index=False,
          method='multi',
          dtype={
              'LGN_ID': sql_types.VARCHAR(20),
              'REG_TM': sql_types.TIMESTAMP,
              "UPD_TM": sql_types.TIMESTAMP,
              "LAST_LOGIN_DT": sql_types.TIMESTAMP,
              "CONFIRM_DT": sql_types.TIMESTAMP,
              "CANCEL_DT": sql_types.TIMESTAMP,
              "SECSN_DT": sql_types.TIMESTAMP,
              "INFO_AGREE_DT": sql_types.TIMESTAMP,
              "CD_LEN": sql_types.NUMERIC,
              "ARA_ORDER": sql_types.NUMERIC,
              "LATITUDE": sql_types.NUMERIC,
              "LONGITUDE": sql_types.NUMERIC,
              "REG_DTTM": sql_types.TIMESTAMP,
              "UPD_DTTM": sql_types.TIMESTAMP,
              "HLDY_DT": sql_types.TIMESTAMP

          }
          )

tb_conn.close()

print("Total  : %s seconds" % (time.time() - start_time))
print("to_sql : %s seconds" % (time.time() - start_time1))

저장후 테스트 실행한다.

실행 권한을 부여후 실행

[python@localhost python]$ chmod 755 test.py

 

[python@localhost python]$ ll
합계 4
drwxrwxr-x. 2 python python   78 12월 23 01:03 jdbc
-rwxr-xr-x. 1 python python 3113 12월 23 01:10 test.py

 

 

[python@localhost python]$ ./test.py
Index(['LAWD_CD', 'SD_NM', 'SD_SHORT_NM', 'SGG_NM', 'EMD_NM', 'RI_NM', 'SD_CD',
       'SGG_CD', 'EMD_CD', 'RI_CD', 'EFTV_YN', 'RMK', 'REGR_ID', 'REG_TM',
       'UPDR_ID', 'UPD_TM', 'DT', 'END_DT'],
      dtype='object')
Total  : 15.065675735473633 seconds
to_sql : 9.883891820907593 seconds

 

/* 대량의 데이타 처리 끝 */



출처: https://cbwstar.tistory.com/entry/파이썬-psycopg2-패키지-설치-오류-해결?category=1021765 [C.B.W 블로그]

 

반응형

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

Spool 옵션  (0) 2022.01.11
Tibero 2 CSV  (0) 2022.01.07

필독) 특이 SQL 및 PLAN, Access 방식, 지원 Join, Query Rewrite

Database 관리/PostgreSQL
반응형
SELECT DISTINCT ON(FIRSTNAME) FIRSTNAME, LASTNAME FROM MEMBER_TBL ORDER BY FIRSTNAME, LASTNAME DESC;
SELECT MEMBERID, MEMBERNAME, PHONENO FROM MEMBER_TBL ORDER BY MEMBERID LIMIT 4 OFFSET 0;
# 0번째 행(=첫 행) 부터 4 개행 가져오기
Oracle 계층 쿼리 )
SELECT A.CONTS_ID,
             A.CONTS_NM,
             A.UP_CONTS_ID,
             A.MENU_ORD,
             LEVEL   /* 계층구조에서 단계, 레벨을 나타내주는 함수 */
FROM CLT_MENU A
WHERE A.MENU_INCL_YN = 'Y'
             AND LEVEL IN (2,4)
START WITH A.CONTS_ID = 'voc'   /* 계층구조의 시작조건을 주는 조건절 */
CONNECT BY PRIOR A.CONTS_ID = A.UP_CONTS_ID  /* 계층구조의 상,하위 간의 관계 조건 */
ORDER SIBLINGS BY A.MENU_ORD   /* 계층구조를 유지하면서 정렬해주는 구문 */

PostgreSQL 계층 쿼리 )
WITH RECURSIVE CODE_LIST(CONTS_ID, CONTS_NM, UP_CONTS_ID, MENU_ORD, DEPTH, PATH, CYCLE) as (
             /* 계층구조의 시작조건 쿼리 */
             SELECT A.CONTS_ID,
                           A.CONTS_NM,  
                           A.UP_CONTS_ID,
                           A.MENU_ORD,
                           1,
                           ARRAY[A.CONTS_ID::text],
                           false
             
FROM CLT_MENU A
             
WHERE A.CONTS_ID = 'voc'
                           
AND A.MENU_INCL_YN = 'Y'
            
 UNION ALL
             /*하위 데이터를 찾아가기 위한 반복조건 쿼리*/
            
 SELECT A.CONTS_ID,
                           A.CONTS_NM,  
                           A.UP_CONTS_ID,
                           A.MENU_ORD,
                           B.DEPTH + 1,
                           ARRAY_APPEND(B.PATH, A.CONTS_ID::text),
                           A.CONTS_ID = any(B.PATH)
             
FROM CLT_MENU A, CODE_LIST B
             
WHERE A.UP_CONTS_ID = B.CONTS_ID
                           
AND A.MENU_INCL_YN = 'Y'
                           
AND NOT CYCLE
)
/*View 쿼리*/
SELECT CONTS_ID,
             CONTS_NM,
             UP_CONTS_ID,
             MENU_ORD,
             DEPTH AS A_MENU_LEVEL,
             PATH
FROM CODE_LIST
WHERE DEPTH IN (2,4)
ORDER BY PATH

- CYCLE은 RECURSIVE를 통한 재귀 쿼리 수행 시 성능 상의 문제를 해결하기 위함
UNION ALL 다음의 반복조건 쿼리가 수행되면 
CYCLE이 false이기 때문에 SELECT문이 수행 되고 검색된 자식 node의 ID 값이 배열(ARRAY[A.CONTS_ID::text])에 추가(ARRAY_APPEND(B.PATH, A.CONTS_ID::text)됨.
- 
ANY(B.PATH)는 PATH 배열에 자신의 ID값이 있는 지를 검사하여, 이미 찾은 값에 대해서는 더 이상 데이터 검색을 수행하지 않도록 함.
배열에는 DataType이 int, text인 형태만 담을 수 있으므로 배열에 담을 varchar타입의 컬럼 뒤에 ::text 를 붙여 형태를 변환 해줌.
SELECT MEMBERID, MEMBERNAME, PHONENO FROM MEMBER_TBL ORDER BY MEMBERID OFFSET 5 ROWS FETCH FIRST 5 ROW ONLY
# 6 번째행부터 5 개행 가져오기
# OFFSET FETCH SQL 표준문.
# 테이블 상속. table inheritance
# 참조 : https://corekms.tistory.com/entry/table-inheritance%EC%83%81%EC%86%8D

a) 부모 테이블 생성
postgres=# CREATE TABLE cities (
postgres(#     name            text,
postgres(#     population      float,
postgres(#     altitude        int     -- in feet
postgres(# );

b) 자식 테이블 생성
postgres=# CREATE TABLE capitals (
postgres(#     state           char(2)
postgres(# ) INHERITS (cities);
* 부모컬럼포함해서 생성됨

c) insert test
insert into cities values('kms',10.23,1000);
insert into capitals values('kms',10.23,1000,'01');

select * from cities;
name | population | altitude
------+------------+----------
 kms  |      10.23 |     1000
 kms  |      10.23 |     1000

select * from only cities;
name | population | altitude
------+------------+----------
 kms  |      10.23 |     1000

d) 설명
- 자식테이블은 부모 컬럼을 포함한다.
- 자식에게 데이타를 추가하면 부모에게도 보인다.
- 부모에 데이타를 조작하면, 자식에게도 동일하게 영향이 간다. 다만 조회는 only 를 이용하여 해당 테이블의 것만 볼 수 있다.

※ 가독성을 높히기 위해 부모테이블을 대상으로 하는 쿼리를 작성할 때 테이블 후미에 *를 붙여 상속테이블이 포함될 것임을 표시하는 것을 권장합니다.
예시) select * from cities*;

 예측 모드 사용법
explain select * from t2;
QUERY PLAN

 실행 모드 사용법
explain (analyze, buffers) select * from t2;
QUERY PLAN

# 참조 : https://simpledb.tistory.com/75?category=941841
# 참조 : https://simpledb.tistory.com/76?category=941841 

 

# Access 방식

Seq Scan 방식
 Seq Scan은 테이블을 Full Scan 하면서 레코드를 읽는 방식이다.
 인덱스가 존재하지 않거나, 인덱스가 존재하더라도 읽어야 할 범위가 넓은 경우에 선택한다.
 
Index Scan 방식
 Index Scan은 인덱스 Leaf 블록에 저장된 키를 이용해서 테이블 레코드를 액세스하는 방식이다.
 인덱스 키 순서대로 출력된다.
 레코드 정렬 상태에 따라서 테이블 블록 액세스 횟수가 크게 차이 난다.
 
Bitmap Index Scan 방식
 테이블 랜덤 액세스 횟수를 줄이기 위해 고안된 방식이다.
 Index Scan 방식과 Bitmap Index Scan 방식을 결정하는 기준은 인덱스 칼럼의 Correlation 값이다.
 Correlation이란 인덱스 칼럼에 대한 테이블 레코드의 정렬 상태이다. (클러스터링 팩터)
 , Correlation이 좋으면 Index Scan 방식을, 나쁘면 Bitmap Index Scan 방식을 사용한다.
 Bitmap Index Scan 방식은 액세스할 블록들을 블록 번호 순으로 정렬한 후에 액세스한다.
 이로 인해, 테이블 랜덤 액세스 횟수가 크게 줄어든다. (블록당 1)
 테이블 블록 번호 순으로 액세스하므로, 인덱스 키 순서대로 출력되지 않는다.
 
CLUSTER 명령어를 이용한 테이블 재구성
 특정 인덱스 칼럼 기준으로 테이블을 재 정렬해서 다시 생성하고 싶다면 CLUSTER 명령어를 사용하면 된다.
 다만, 이때도 Vacuum FULL과 동일하게 SELECT와도 락이 호환되지 않는다는 점을 유의해야 한다.
 
Lossy 모드
 Bitmap Index Scan 방식은 비트맵을 이용해서 처리된다.
 이때, 비트맵 정보는 Backend 프로세스 메모리 내에 저장된다.
 만일 메모리 공간이 부족하면 exact 모드에서 lossy 모드로 전환한다.
 lossy 모드는 exact 모드에 비해서 느리다.
exact 모드는 비트맵 내의 1개의 비트가 1개의 레코드를 가리킨다.
lossy 모드는 비트맵 내의 1개의 비트가 1개의 블록을 가리킨다.
 
Index Only Scan 방식
 Covering Index를 이용하는 것을 Index Only Scan 방식이라고 한다.
 Covering Index SELECT 칼럼 및 WHERE 조건을 모두 포함하는 인덱스를 의미한다.
 Covering Index의 장점은 테이블 랜덤 액세스를 제거할 수 있다는 것이다.
 , Vacuum을 수행해야만 Index Only Scan 방식으로 동작한다.
 
액세스 방식을 제어하는 방법
 SET 절을 이용해서 액세스 방식을 제어할 수 있다

 

# Join 방식

PostgreSQL에서 지원하는 조인 방법
 Nested Loop 조인
 Sort Merge 조인
 해시 조인 (Hybrid 해시 조인 지원)

Nested Loop Join

NL 조인 시에 Materialize가 발생하면 인덱스 생성을 고려해야 한다.

 NL 조인 시에 연결 고리에 인덱스가 없으면 Materialize 오퍼레이션이 발생할 수 있다.

 이는 보완책이지 해결책이 아니다. 따라서 인덱스 생성을 고려해야 한다

 

Hash Join

 해시 조인은 해시 함수를 이용한다. 해시 함수(h)는 다음과 같은 특성을 갖는다.

1. X=Y이면 반드시 h(X)=h(Y) 이다.

2. h(X)≠h(Y)이면 반드시 X≠Y 이다.

3. X≠Y이면 h(X)≠h(Y)인 것이 가장 이상적이다.

4. X≠Y이면 h(X)=h(Y) 일 수도 있다. 이것을 해시 충돌이라고 한다.

 

In-Memory 해시 조인

 In-Memory 해시 조인은 해시 Build 작업을 work_mem 공간 내에서 모두 처리할 수 있을 때 사용하는 방식이다.

 

In-Memory로 처리할 수 없을 때 사용되는 해시 조인 방식들

 해시 Build 작업을 work_mem 공간 내에서 모두 처리할 수 없을 때 사용하는 방식은 크게 3가지이다.

Outer 조인 개요

 Outer 조인은 조인 성공 여부와 무관하게 기준 집합의 레코드를 모두 출력하는 방식이다.

 PostgreSQL ANSI-SQL 형태의 Outer 조인 문법만을 지원한다.

 Outer 조인은 결과 건수에 영향을 미치므로 사용시에 주의해야 한다.

 NL Outer 조인은 기준 집합을 항상 먼저 Driving 한다.

 Hash Outer 조인은 SWAP INPUT 기능을 제공한다

 

Hash Right Join, Hash Left Join의 의미

 

 

 Explain 결과의 Hash Right Join은 기준 테이블이 RIGHT,  Build 테이블이라는 사실을 알려준다.

 Explain 결과의 Hash Left Join은 기준 테이블이 LEFT,  Probe 테이블이라는 사실을 알려준다.

 

 

 

# Query Rewrite

 사용자가 작성한 쿼리를 Optimizer가 더 좋은 실행계획을 수립할 수 있는 형태로 변경하는 것을 Query Rewrite라고 한다.

1) 서브 쿼리 Collapse : 서브 쿼리를 Main 쿼리에 병합하는 기법 (Sub query unnest)

2) View Merging : 뷰 또는 인라인 뷰를 풀어헤쳐 테이블 간의 조인으로 변경하는 방법

3) JPPD(조인 조건 push down) : View Merging이 실패한 경우, 조인 조건을 뷰 내부로 밀어 넣는 방법

 

View Merging

 뷰를 풀어헤쳐서 테이블 간의 조인으로 변경함으로써 , 다양한 조인 순서와 조인 방법을 선택할 수 있다. 이때 View 2개로 구분된다.

 Simple View는 항상 View Merging에 성공한다.

 Complex View는 항상 View Merging에 실패한다.

1) Simple View: Group by , Distinct와 같은 Aggregate를 사용하지 않는 뷰

2) Complex View: Group by , Distinct와 같은 Aggregate를 사용하는 뷰

PostgreSQL Simple View Merging을 지원한다.

 

JPPD (Join Predicate Push Down)

2가지 방법을 이용해서 JPPD를 동작하게 할 수 있다.

① 조인 조건을 상수화 한다.

 LATERAL View를 사용한다. - 측면 테이블의 조건 입력

 이는 JPPD를 직접 구현할 수 있는 매우 획기적인 튜닝 방법이다.

 LATERAL View LEFT JOIN도 지원한다.

 LEFT JOIN시에는 ON TRUE 키워드를 이용한다

 

# 힌트의 필요성과 PG_HINT_PLAN

힌트의 필요성과 PG_HINT_PLAN

 

 특정 인덱스를 지정하거나, 조인 순서를 지정하거나, 여러 개의 테이블 간의 조인 방법을 각

조인마다 다르게 선택하는 것을 사용자가 지정할 수 있다면, 이는 매우 강력한 무기일 것이다.

 ORACLE Hint를 이용해서 이러한 작업을 수행할 수 있다.

 다행히 PG_HINT_PLAN 이란 기능이 제공된다.

 이는 Hint 가 아니라 Plan Tree 자체를 변경하는 기법이다.

 따라서 Hint와 달리 Optimizer PG_HINT_PLAN을 무시할 수 없다.

 , 매우 강력하면서도 위험한 무기인 셈이다.

 

PG_HINT_PLAN 설치

 

PG_HINT_PLAN이 제공하는 Hint

 

 

 

 

# BRIN Index

BRIN

 BRIN PostgreSQL 9.5부터 제공되는 인덱스 유형이다.

 BRIN은 블록 내의 MIN/MAX 값을 이용해서 블록 단위로 인덱싱한다.

 이로 인해 인덱스 크기는 매우 작아진다는 장점이 있다. 이러한 장점으로 인해, 디스크 공간이 부족한 경우에는 BRIN을 선택하기도 한다.

 BRIN EXADATA Storage 인덱스는 매우 흡사하다

 

BRIN의 특성

 BRIN의 크기는 매우 작다. 예를 들어, 1Gb 테이블인 경우에 BRIN의 크기는 6블록이다. (1MB 단위로 1개의 Min/Max 값을 저장하기 때문이다)

 1건을 읽어도 128 블록 (1 MB)를 읽는다.

 BRIN Index Only Scan 방식보다는 느리다. 왜냐면 반드시 테이블을 액세스하기 때문이다.

 BRIN 생성 후에 입력된 레코드들은 Vacuum을 수행해야만 BRIN에 적용된다.

 BRIN Row Level 락을 지원한다.

 

Partial Index

 PostgreSQL은 인덱스 생성 시에 WHERE 조건을 제공한다.

 PostgreSQL NULL 값도 인덱스에 포함된다.

create index t10_flag_idx on t10(flag) where flag='N’;

 

 

# Parallel Processing (병렬 처리)

Parallel Processing

 PostgreSQL 9.6 부터 병렬 처리를 지원한다.

 병렬 처리는 Parallel Scan, Parallel Group by, Parallel Join을 지원한다.

 ORACLE과 같은 생산자-소비자 모델은 아니다.

Worker 프로세스 개수 산정 방식

 Worker 프로세스의 개수는 min_parallel_relation_size 파라미터값을 기준으로 산정한다.

 기준 크기의 3배 단위로 1개씩 증가하며, 최대 7개이다.

Parallel Index Scan

 PostgreSQL 10부터는 Parallel Index Scan 기능을 제공한다.

 Parallel Index Scan 기능은 Index Full Scan 뿐만 아니라 Index Range Scan 시에도 동작한다.

1) 조건절 범위에 해당하는 "Start 리프 블록" "End 리프 블록"의 위치를 계산한다.

2) 처리 범위가 인덱스 병렬 처리를 할 정도로 큰지 확인한다. (아래 표 참조)

3) 만일 크다면, 크기에 따라서 Worker 개수를 설정한 후에, "Start" ~ "End" 범위를 나눠서 처리한다.

4) 만일 작다면, 싱글 프로세스로 처리한다.

 

 

 

# PostgreSQL 파티션

PostgreSQL 파티션

 

 상속 (Inherits)을 이용해서 파티션을 구현함

 인덱스 정보는 상속되지 않음

 Trigger를 이용해서 파티션 Pruning을 처리함

 파티션 생성 시에 CHECK 조건을 이용함

 Range, List 파티션을 제공함

 Global Index는 제공하지 않음

 입력 조건에 맞는 파티션만 액세스하는 것을 파티션 Pruning’이라고 한다.

 이를 위해서는 constraint_exclusion 파라미터를 ‘on’ 또는 ‘partition’으로 설정해야 한다.

(기본 설정값: partition)

 CHECK 조건을 입력하면 정상적으로 파티션 Pruning이 수행된다.

 

서브 파티션을 이용한 튜닝 방안

 1차 파티션을 통해 IO 범위를 줄인 후에도 여전히 IO 량이 많은 경우에는 2차 파티션을 고려한다.

 PostgreSQL은 상속에 의한 파티션 생성 방식이므로, 이론적으로는 n차 파티션도 가능하다.

 따라서 업무 속성에 따른 서브 파티션 생성을 통한 IO 튜닝이 가능하다.

 

파티션 Partial 인덱스를 이용한 튜닝 방안

 PostgreSQL은 파티션 Partial 인덱스를 제공한다.

 , 파티션 별로 인덱스 생성 여부를 결정할 수도 있고, 파티션 마다 다른 인덱스 (, B*Tree, Covering Index, BRIN )를 생성할 수도 있다.

 참고로, 오라클은 12c 버전부터 파티션 Partial 인덱스 기능을 제공한다.

 

파티션 입력 성능 향상을 위한 Tip

 RULE 보다는 Trigger를 이용한다. 어떤 경우에도 Trigger가 빠르다.

 자주 입력되는 파티션을 Trigger의 윗 부분에 위치하는 것이 좋다. 그래야 IF THEN ELSE의 부하를 줄일 수 있다.

 가능하면, 파티션을 지정해서 입력하는 것이 좋다.

 

PostgreSQL 파티션 Pruning 시의 주의 사항

 예상과 달리, 파티션 Pruning이 동작하지 않는 경우가 존재한다.

 이점은 쿼리 작성 시에 매우 주의해야할 점이다.

▪ IN 절 내에 Subquery를 사용할 경우에는 파티션 Pruning이 동작하지 않는다.

▪ IN 절 사용시 파티션 Pruning을 유도하기 위해서는 실제 CHECK 조건을 입력해야 한다.

 NL 조인으로 수행되면 추가 조건 없이도 파티션 Pruning이 수행된다.

 Hash 조인으로 수행되면 추가 조건을 반드시 입력해야 한다.

 따라서, 쿼리 작성 후에 Explain 결과 확인 및 추가 조건을 입력할 필요가 있다.

 Hash 조인으로 수행될 때를 고려해서, 상수 조건을 추가하는 것을 습관화 하는 것이 좋다.

 PostgreSQL 10부터 오라클과 유사한 파티션 생성 문법을 제공한다.

 이때, 트리거는 생성할 필요가 없다. (이점은 관리측면의 편의성을 제공한다)

 , 파티션 Pruning은 기존과 같은 한계가 존재한다. (, 해시 조인 시에는 상수 조건 추가 필요)

 

파티션 성능 테스트(INSERT)

 9.6 까지는 파티션이 1개인 경우에도 일반 테이블보다 입력 속도가 3배 이상 느리다. 그 이유는 매 건마다 Trigger 함수를 호출하는 부하 때문이다.

 CPU 성능에 좋을수록 이 차이는 감소한다.

 파티션 개수가 많아질 수록 입력 성능은 저하된다.

 이 문제는 PG10 버전에서도 여전히 발생한다.

 상속을 이용한 파티션은 Trigger 조정을 통해서 입력 성능을 향상 시킬 수 있다.

 하지만, Native 파티션 (PG 10 버전)은 입력 파티션 위치에 따른 성능 차이가 거의 없다.

 

 

 

# PostgreSQL – Grafana 연동

설치하기 전 git, make, go 패키지 설치

# yum install git

# yum install make

# yum install go

 

git에서 postgres_exporter 가져옴

# git clone https://github.com/prometheus-community/postgres_exporter.git

 

폴더로 이동 후 빌드

# cd postgres_exporter

# make build

 

데이터 소스 환경 변수 설정 및 실행

# export DATA_SOURCE_NAME=postgresql://어드민계정:어드민비밀번호@RDS_ENDPOINT:5432/접속DB?sslmode=disable

# . /postgres_exporter

Prometheus에 pgexporter Job 등록

# vi prometheus.yml

Prometheus 서버에 pgexporter가 등록되었는지 확인

http://prometheus서버ip:9090/targets

 

Prometheus 그래프 확인

http://prometheus서버ip:9090/graph

 

Grafana에서 대시보드에 그래프 출력

 

Grafana에 PostgreSQL 직접 등록

 

 

 

 

# PostgreSQL slow query – Cloudwatch 연동

RDS의 데이터베이스 옵션에서 Cloudwatch Logs로 보낼 수 있도록 설정.

 

 

 

 

 

 

 

반응형

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

속도.postgres vs mariad  (0) 2022.06.15
설치/기본사용.우분투  (0) 2022.06.15
Docker 설치  (0) 2022.01.18

Lock, 락, 해결

Database 관리/Maria DB
반응형

SELECT   TRX_MYSQL_THREAD_ID

FROM INFORMATION_SCHEMA.INNODB_TRX A;

 

KILL trx_mysql_thread_id;

 

반응형

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

binlog 삭제  (0) 2023.01.16
Install mariadb.10.6.tar.gz in ubuntu  (0) 2022.01.18
RDS, export, mysqldump/ import  (0) 2021.10.14
[편법] CVS Parsing, 파싱  (0) 2021.09.23
UDF 만들기  (0) 2021.05.06

RDS, export, mysqldump/ import

Database 관리/Maria DB
반응형

# 참조 : https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html

 

1) 두 데이타베이스로 원격 접속가능한 EC2 한대 필요. ( Function, Trigger, Event 덤프 필수 )

 

2.소스 db dump) /bin/mysqldump --routines --trigger --databases db1 db2 --single-transaction -r /mysqldump/dbdump.sql -h sourcedbserverip -u id -p password

 

3-1.타겟 db 접속) mysql -h targetdbserverip -u id -p password

 

3-2. source /mysqldump/dbdump.sql

 

끝 .

반응형

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

Install mariadb.10.6.tar.gz in ubuntu  (0) 2022.01.18
Lock, 락, 해결  (0) 2021.10.29
[편법] CVS Parsing, 파싱  (0) 2021.09.23
UDF 만들기  (0) 2021.05.06
Ubuntu 20.04.02, MariaDB 10.5 설치, UDF 설치, System Call Udf  (0) 2021.02.16

[편법] CVS Parsing, 파싱

Database 관리/Maria DB
반응형

- mysql 혹은 mariadb 에는 csv 를 파싱하는 함수가 없음.

- user function 을 짤수는 있음.

- 편법으로는 아래처럼 json_value 혹은 json_parse 으로 추출하는 것이 가능함.

 

column1 = "1","2",3

column1 이라는 컬럼에 위와 같은 csv 포맷 데이타가 있다고 가정하면,

select json_value(concat('{"data": [', column1, ']}'), '$.data[0]') c1;
c1 = 1

select json_value(concat('{"data": [', column1, ']}'), '$.data[1]') c2;
c2 = 2

select json_value(concat('{"data": [', column1, ']}'), '$.data[2]') c3;
c3= 3

 

 

반응형

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

Lock, 락, 해결  (0) 2021.10.29
RDS, export, mysqldump/ import  (0) 2021.10.14
UDF 만들기  (0) 2021.05.06
Ubuntu 20.04.02, MariaDB 10.5 설치, UDF 설치, System Call Udf  (0) 2021.02.16
maria10.zip.windows10 64bit.설치  (0) 2020.04.23