MySQL8.4 LTS - data 디렉토리 변경 (Ubuntu)

data 폴더 위치를 변경해 이동한다.

  • rsync 를 사용해서 복사한다.

위치 이동

my.cnf 에 있는 기본 디렉토리를 /data 폴더로 변경하고 적용한다.

  1. 기본 data 디레토리 확인

my.cnf 에서 datadir 로 지정된 항목을 찾아 보자.

1
2
~$ grep datadir /etc/mysql/mysql.conf.d/mysqld.conf
/etc/mysql/mysql.conf.d//mysqld.conf:#datadir = /var/lib/mysql

기본으로 Ubuntu 종류에서는 /var/lib/mysql 를 기본 데이터 디렉토리로 지정하고 있다.

  1. data 디렉토리를 /data/mysql 로 변경한다.

mysqld.conf 를 수정해서 /data로 변경하자

1
2
3
4
5
[mysqld]
#datadir = /var/lib/mysql
socket = /data/mysql/mysqld.sock
datadir = /data/mysql
log-error = /var/log/mysql/error.log

mysql.conf

1
2
[client]
socket = /data/mysql/mysqld.sock
  1. data 폴더 권한

mysqld / mariadbd 데몬은 mysql 사용자, mysql 그룹으로 사용권이 실행되고 있다. 데이터베이스에서 접근하는 모든 자원(폴더, 파일, 로그 등등)은 mysql 사용자로 접근이 가는해야 한다. 그래서 /data 디렉토리 권한을 변경한다.

mysql 사용자와 그룹 확인한다.

1
2
3
4
5
$ grep mysql /etc/passwd
mysql:x:111:117:MySQL Server,,,:/nonexistent:/bin/false

$ grep mysql /etc/group
mysql:x:117:

소유권을 mysql 사용자로 변경한다.

1
2
3
4
5
$ sudo chown -R mysql:mysql /data/mysql
[sudo] 암호:
$ ls -al /data/mysql
drwxr-xr-x 3 mysql mysql 4096 5월 6 22:35 .
drwxr-xr-x 20 root root 4096 5월 6 17:15 ..
  1. data 이동

rsync 를 사용해서 /var/lib/mysql 데이터를 /data 아래로 복사한다.

1
$ sudo rsync -avzph /var/lib/mysql/ /data/mysql/
  1. apparmor 변경

Ubuntu 24.04 는 apparmor 를 실행하고 있다. mysql 관련 권한을 지정해 주어야 한다.

1
2
3
4
5
# Allow data dir access
# /var/lib/mysql/ r,
# /var/lib/mysql/** rwk,
/data/mysql/ r,
/data/mysql/** rwk,
1
$ sudo systemctl restart apparmor
  1. mysqld 데몬을 재시작하고 확인한다.
1
2
3
4
$ sudo systemctl restart mysql
$ sudo systemctl status mysql

● mariadb.service - MariaDB 10.11.2 database server

데이터베이스에 접속해 데이터를 확인해 보자. @@datadir 환경변수를 출력해서 /data 가 출력되면 my.cnf 의 설정이 잘 구성된 상태를 확인할 수 있다.

1
2
3
4
5
6
7
8
$ sudo mysql -u root -p

> select @@datadir;
+-----------+
| @@datadir |
+-----------+
| /data/ |
+-----------+

rsync 로 복사한 실제 데이터들은 각 스키마에서 확인해 보자.

mysql client 접속시 다음 에러가 발생해


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


사용자와 bind

1
2
[mysqld]
bind-address = 0.0.0.0

mysql>
mysql> create user ‘root‘@’%’ identified by ‘rkdxo!0615’;
Query OK, 0 rows affected (0.36 sec)

mysql> grant privileges on . to ‘root‘@’%’;
ERROR 1149 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
mysql> grant all privileges on . to ‘root‘@’%’;
Query OK, 0 rows affected (0.11 sec)

mysql>
mysql>
mysql> flush privileges;

MariaDB 클라언트-서버 TLS/SSL 암호화 연결(2)-2508업데이트

MariaDB 클라언트-서버 TLS/SSL 클라이언트 사용시 HeidiSQL 12 버전에서 SSL 접속에 대해서 수정을 반영

글 타래:

  1. MariaDB 클라언트-서버 TLS/SSL 암호화 연결(1)
  2. MariaDB 클라언트-서버 TLS/SSL 암호화 연결(2)-2508업데이트
  3. MariaDB 클라언트-서버 TLS/SSL 암호화 연결(3)

서버측에서 MariaDB/MySQL 의 TLS를 활성화한 다음 실제 다양한 클라이언트에서 접속을 시도해 보자. 서버에서 생성한 CA 파일 ca.pem, 클라이언트 인증서 client-ssl.pem, 클라이언트 키 client-key.pem 을 다운로드해서 사용한다.

글 진행 순서

  1. 클라이언트 인증서 다운로드
  2. DB API: python 에서 SSL 접속
  3. HeidiSQL 에서 SSL 접속 (2508업데이트)
  4. MySQL Workbench 에서 SSL 접속

1. 클라이언트 인증서 다운로드

앞서 MariaDB 클라언트-서버 TLS/SSL 암호화 연결(1) 만든 ca.pem, client-cert.pem, client-key.pem 을 외부접속할 클라이언트 PC로 다운받는다.

1
2
3
4
5
6
> mkdir .ssl/mysql/
> cd .ssl/mysql
# 다운로드
> scp USERID@HOST_IP:/etc/ssl/mysql/ca.pem .
> scp USERID@HOST_IP:/etc/ssl/mysql/client-cert.pem .
> scp USERID@HOST_IP:/etc/ssl/mysql/client-key.pem .

SSH 에 다른 포트 번호를 사용하면 scp -P PORT 로 사용한다.

다운로드한 파일은 3종류로

1
2
3
4
5
6
> ls .ssl/mysql
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2023-07-16 오후 4:38 1984 ca.pem
-a--- 2023-07-16 오후 4:38 1497 client-cert.pem
-a--- 2023-07-16 오후 4:38 1679 client-key.pem

서버와 비슷하게 mysql client 설정에 인증키들을 설정해주면 그냥 접속해도 ssl로 접속된다. 아래 참고2 에서 mysql client 의 클라이언트 측 my.cnf/my.ini 파일에 ssl-ca, ssl-cert, ssl-key 를 설정하면 된다.

2. DB API: python 에서 SSL 접속

pymysql, sqlalchemy 등 mysql client API 에 ssl_ca, ssl_key, ssl_cert 인자에 클라이언트용 인증 파일을 연결한다.

pymysql

pymysql.connect 에 ssl_ca, ssl_key, ssl_cert 인자 클라이언트용 인증 파일의 경로가 SSL_CA, SSL_CERT, SSL_KEY 에 있다고 가정한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
conn = pymysql.connect(host='192.168.0.10', 
user=DB_USER,
password=DB_PW,
db='bookstore',
ssl_ca=SSL_CA,
ssl_key=SSL_KEY,
ssl_cert=SSL_CERT,
charset='utf8')

# Connection 으로부터 Cursor 생성
curs = conn.cursor()
sql = "select * from book"
curs.execute(sql)
rows = curs.fetchall()
print(rows) # 전체 rows
conn.close()

SQLAlchemy : engine

sqlalchemy의 create_engin에 connect_args 인자에 클라이언트 인증 파일의 경로가 SSL_CA, SSL_CERT, SSL_KEY 에 있다고 가정한다.

1
2
3
4
5
6
7
8
9
ssl_args = {'ssl_ca': SSL_CA,
'ssl_cert': SSL_CERT,
'ssl_key': SSL_KEY}
engine = sqla.create_engine(
f'mysql+pymysql://{DB_USER}:{DB_PW}@192.168.0.24/bookstore',
connect_args=ssl_args)

query = """SELECT * FROM book;"""
df = pd.read_sql(sqla.text(query), con=engine)

C 라이브러리 사용 SSL 접속

참고2 를 보면 C API를 사용한 `libmariadb.dll`` 라이브러리에서 SSL 사용하는 C++ 콘솔 예제 가 있다.


3. HeidiSQL 에서 SSL 접속 (2508업데이트)

HeidiSQL 에서 SSL 을 이용해 접속할 수 있다. 아래 그림 같이 DB 정보를 입력한다.

그리고 SSL 탭에서 SSL에 서버측의 ssl 파일을 위치하고 CA 검증을 하지 않게 하면 사용이 가능하다.


4. MySQL Workbench 에서 SSL 접속

MySQL Workbench 에서도 SSL 연결로 데이터베이스에 접속할 수 있다. DB 접속 계정 정보를 입력한다.

SSL 탭에서 SSL 관련 옵션을 선택하는데 여기서는 if available 로 지정했다. 서버측이 SSL활성화가 되어 있으면 자동으로 SSL 통신을 진행한다.

Test 로 확인해 보면 SSL 접속이 잘 되고 있는 것을 알 수 있다.

5. 사용자 SSL 권한 부여

새 사용자를 생성할 때 아래 같이 접속시 REQUIRE 인자로 SSL 로만 접속하도록 할 수 있다.

사용자의 추가/권한 부여에 대해서 MySQL CLI/Admin: 권한부여 글을 참고.

1
2
3
4
5
6
7
8
9
10
# SSL/TLS(가장 기본적인 암호화 접속)
mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY '********' REQUIRE SSL;

# X509
mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY '********' REQUIRE X509;

# CIPHER 'cipher'
mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY '********' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';

mysql> flush privileges;

기존 사용자는 사용자 권한에서 SSL을 권한을 추가한다.

1
2
mysql> GRANT ALL PRIVILEGES ON DB이름.* TO 'USERID'@'%' REQUIRE SSL;
mysql> flush privileges;

주어진 grant에 SSL/X509 등이 주어졌는지 확인한다.

1
mysql> SHOW GRANTS FOR 'USERID'@'HOST';

내부 네트워크 외부 네트워크로 분리해 사용한다면 외부에서는 무조건 SSL 을 사용하도록 할 수 있을 것 같다.

  1. 참고1 : OpenSSL을 이용한 사설 인증서 생성
  2. 참고2 : MariaDB 외부접속시 ssl 사용법, 그리고 ssl 로 replication(동기화) 하기
  3. 참고3 : Configuring MySQL to Use Encrypted Connections

nbconvert 사용

nbconvert은 jupyter notebook 파일을 markdown 파일 혹은 html 파일로 변환해주는 프로그램입니다.

설치

nbconvert 를 설치 한다.

1
2
3
4
5
# pip을 통해 nbconvert 설치
(env)$ pip install nbconvert

# conda를 통해 nbconvert 설치
(env)$ conda install nbconvert

사용

원하는 포맷을 --to 에 지정해서 변환한다, 지원되는 포맷은 다음 같다

  • HTML, LaTeX, PDF,WebPDF, Reveal.js HTML slideshow,
  • Markdown, Ascii, reStructuredText,executable script,notebook.

다음 같이 사용한다.

1
jupyter nbconvert --to FORMAT notebook.ipynb

nbconvert 로 markdown 변환 명령은 다음의 두가지 결과물을 생성한.

  • notebook.md : markdown 파일
  • notebook_files : markdown 파일에 포함되어 있는 모든 이미지를 모아놓은 폴더
1
2
3
(env)$ jupyter nbconvert notebook.ipynb
(env)$ ls
notebook.ipynb notebook.html notebook_files/

예를 들어 My_NOTEBOOK.ipynb 라는 jupyter notebook 파일을 markdown 파일로 변환한다면

1
(env)$ jupyter nbconvert --to markdown My_NOTEBOOK.ipynb

pyenv-doctor

pyenv 에 doctor 명령이 생겼다.

  • pyenv 설치 구성을 검증한다.
  • python 버전을 빌드하기 위한 개발 도구들

doctor 명령을 사용하려면 시스템에 개발도구와 빌드도구가 설치되어야 한다.

준비

pyenv 의 시스템 빌드환경에 필요한 도구를 설치가 필요하다.

Ubuntu/Linux

1
2
3
sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

macOS

1
brew install openssl readline sqlite3 xz zlib tcl-tk@8 libb2

pyenv doctor 사용

1
2
3
4
5
$ pyenv doctor
Cloning /home/USER/.pyenv/plugins/pyenv-doctor/bin/.....
Installing python-pyenv-doctor...
Installed python-pyenv-doctor to /tmp/pyenv-doctor.20250327094025.5063/prefix
Congratulations! You are ready to build pythons!

기타

시스템에 빌드 도구가 설치되지 않으면 doctor 명령을 실행하면 다양한 에러를 낸다.

1
2
3
4
5
6
7
$ pyenv doctor
...
...
configure: error: GNU readline is not installed.
Problem(s) detected while checking system.

See https://github.com/pyenv/pyenv/wiki/Common-build-problems for known solutions.

jupyterlab - kernel 관리

Jupyter-lab 의 kernel 은 Jupyterlab 과 실행 환경과 직간접으로 연결을 해준다.

ipykernel 은 jupyter에 대해서 iPython을 제공한다.

ipython은 jupyterlab에 kernel을 통해서 python 혹은 virtualenv 의 개발환경을 제공한다.

kernel

jupyter-lab 을 실행하면 커널 launcher 화면에 kernel이 출력된다.

실행중인 커널은 사이트 바에서 확인 가능하다.

jupyter 명령으로 커널을 관리할 수 있다.

jupyter 명령

jupyter 명령에서 kernels 를 생성, 제거 관리를 할 수 있다.

현재 kernel 목록을 확인 가능하다.

1
2
$ jupyter kernelspec list
python3 /home/user/.pyenv/versions/MyEnv/share/jupyter/kernels/python3

새 kernel 생성성

가상환경 TestEnv 가 있다고 가정한다.

TestEnv 의 python 환경을 jupyterlab 에서 사용하려면

해당 가상환경을 jupyterlab 커널에서 사용하게 하려면 커널을 생성해 주어야 한다.

그러기 위해서 ipykernel 이 필요하다

1
pip install ipykernel

ipykernel 로 새 kernel 생성:

1
python -m ipykernel install --name {MACHINE_NAME} --display-name "{DISPLAY_NAME}" --user

다음 명령에서 --user을 사용하면 사용자의 ~.local/share 공간에 커널이 추가 되고 사용자의 jupyterlab 에서 모두 사용할 수 있다.

1
2
$ python -m ipykernel install --name testenv_kernel --display-name "Test Env" --user
Installed kernelspec testenv_kernel in /home/user/.local/share/jupyter/kernels/testenv_kernel

kernelspec 으로 확인 할 수 있고,

1
2
3
4
5
~$ jupyter kernelspec list
Available kernels:
python3 /home/qkboo/.pyenv/versions/3.12.8/envs/TestEnv/share/jupyter/kernels/python3
testenv_kernel /home/qkboo/.local/share/jupyter/kernels/testenv_kernel
(TestEnv) qkboo:~$

Jupyterlab 의 launcher 화면에도 새 커널을 확인할 수 있다.

kernel 제거

kernelspec uninstall 명령을 사용해서 사용자 커널을 제거할 수 있다.

1
jupyter kernelspec uninstall {KERNEL_NAME}

testenv_kernel 을 삭제해 보자

1
2
3
4
5
jupyter kernelspec uninstall testenv_kernel
Kernel specs to remove:
testenv_kernel /home/user/.local/share/jupyter/kernels/testenv_kernel
Remove 1 kernel specs [y/N]: y
Removed /home/user/.local/share/jupyter/kernels/testenv_kernel

— 참고 —

  1. https://docs.posit.co/ide/server-pro/user/jupyter-lab/guide/jupyter-kernel-management.html

MariaDb 10 이전하기

기존 MariaDB 10 에서 다른 서버로 데이터/사용자 등을 이전하기. 이전은 2가지 방법을 제시한다.

  1. 데이터베이스 덤프만 이전: mysqldump 이용
  2. 데이터베이스 데이터 폴더 복제: rsync 이용

준비

  1. 기존서버: 현재 운영중인 mariadb 데이터베이스
  2. 대상서버: 새로 설치한 mariadb 데이터베이스

양쪽 서버의 mariadb 를 모두 종료한다.

1
2
3
4
5
$ systemctl stop mariadb

OR

$ systemctl stop mysql

데이터베이스 덤프만 이전

데이터베이스 시스템의 데이터베이스를 덤프를 통해서 백업하고 리스토어한다.

- 기존 데이터베이스 덤프

모든 데이터베이스를 덤프해서 사용.

1
$ mysqldump -u [user] -p --all-databases > all_databases.sql

지정한 데이터베이스만 덤프하려면

1
mysqldump -u root -p --opt [database name] > database_name.sql

덤프 후에 덤프 파일을 대상 서버에 이전한다.

1
2
$ scp all_databases.sql user@192.168.1.10:~/
$ scp database_name.sql user@192.168.1.10:~/

- 대상 서버에서 갱신

덤프 파일을 데이터베이스에 리스토어 한다.

1
2
$ mariadb -u [user] -p --all-databases < all_databases.sql  # 모든 데이터베이스
$ mariadb -u [user] -p newdatabase < database_name.sql # 단일 파일

덤프 파일을 리스토어 한 후에 접속해서 데이터베이스가 들어 있는지 확인.

1
2
$ mysql -u user -p
> show databases;

대상 서버에 사용자 허용 범위 설정

1
2
3
4
> SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';


> SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';
1
2
> GRANT ALL PRIVILEGES ON *.* TO 'user'@'192.168.1.%' 
IDENTIFIED BY 'password' WITH GRANT OPTION;

데이터베이스, 사용자와 권한을 모두 옮기기

기존 데이터베이스 서버의 데이터베이스, 사용자, 권한과 데이터 구조 등을 모두 새 서버에 이전하려고 하면 데이터베이스 시스템이 다루고 있는 모든 파일 시스템을 대상 서버에 복제를 하면 된다. 보통 rsync 를 통해서 모든 파일을 소스에서 타겟 서버로 이전을 한다.

  1. 대상서버 데이터 폴더 준비
  2. 기존서버에서 rsync 로 대상서버로 데이터 폴더 전송
  3. 대상서버 mariadb 종료 및 my.cnf 에 데이터 폴더 위치 확인
  4. 대상서버 데이터 폴더 권한을 mysql 로 변경

1. 대상 서버 데이터 폴더와 복사

옮기는 서버가 192.168.1.10 이고 사용자 계정 user 를 사용한다고 가정하자.

기존서버에서 mariadb 를 종료한다.

1
$ susdo systemctl stop mariadb

먼저 대상서버의 data 폴더를 준비하고 사용자 계정 user 가 사용할 수 있게 한다.

1
2
$ sudo mkdir -p /data/maria_db
$ sudo chown user:user /data/maria_db

2. 기존서버에서 대상서버로 데이터 폴더 복제

기존서버에서 mariadb 를 종료한다.

1
$ susdo systemctl stop mariadb

기존서버 데이터 폴더를 대상서버로 모두 복제한다.

1
$ rsync -avz /var/lib/mysql/* user@192.168.1.10:/data/maria_db/ 

3. 대상서버 폴더 권한 및 시작

1
$ sudo chown mysql:mysql -R /data/maria_db

/etc/mysql/my.cnf 의 데이터 폴더 위치를 조정한다.

mariadb 를 재시작한다.

1
$ susdo systemctl start mariadb

에러가 없이 잘 시작되면 데이터 폴더 이전이 잘 된것으로 보인다.

4. 확인

클라이언트로 mariadb 에 root 계정으로 접속해 본다. 이 계정의 비밀번호는 이전서버의 root 계정과 비밀번호일 것이다.

1
$ mariadb -u root -p

기존 서버의 데이터베이스 계정 student 가 있다고 가정하고 클라이언트로 접속해 본다.

1
$ mariadb -u student -p

MariaDB 설치

Debian계열: Ubuntu 22.04 / Armbian

MariaDB 재단은 apt를 사용하여 패키지를 관리하는 여러 리눅스 배포판을 위한 MariaDB 패키지 저장소를 제공합니다

- apt로 MariaDB 10.4 이상 설치

1
2
3
4
5
6
7
$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
# [info] Checking for script prerequisites.
# [info] MariaDB Server version 11.3 is valid
# [info] Repository file successfully written to /etc/apt/sources.list.d/mariadb.list
# [info] Adding trusted package signing keys...
# [info] Running apt-get update...
# [info] Done adding trusted package signing keys

그리고 apt 업데이트를 진행한다

1
sudo apt update

이제 레포지토리를 통해서 mariadb 를 업데이트할 수 있게되었다.

- MariaDB GPG 공개키

Debian 9(Stretch) 및 Ubuntu 16.04 LTS(Xenial)부터 GPG 공개 키의 ID는 0xF1656F24C74CD1D8. 전체 키 지문은 다음과 같습니다.:

1
177F 4010 FE56 CA33 3630  0305 F165 6F24 C74C D1D8

apt-key유틸리티를 사용하여 공개키를 가져올 수 있습니다. 예를 들어:

sudo apt-key adv –recv-keys –keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

- mariadb 패키지 설치.

MariaDB 10.4 이상 에서 가장 일반적인 패키지를 설치하려면 다음 명령을 실행합니다 :

1
sudo apt-get install mariadb-server galera-4 mariadb-client libmariadb3 mariadb-backup mariadb-common
  • 24/3: 11.3 설치.

설치후 확인

1
2
3
4
5
6
7
8
$ systemctl status mariadb
● mariadb.service - MariaDB 11.3.2 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/mariadb.service.d
└─migrated-from-my.cnf-settings.conf
Active: active (running) since Tue 2024-03-05 06:32:22 KST; 7min ago
Docs: man:mariadbd(8)
https://mariadb.com/kb/en/library/systemd/

MariaDB 보안 설정하기

설치후에 MariaDB 시스템 초기화와 보안 설정을 진행해야 한다.

7개 질문이 나오는데 unix_socket 은 n 이고 나머지는 기본 값으로 진행한다.

단, root 패스워드는 잊어버리지 않아야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo mysql_secure_installation

Enter current password for root (enter for none):

Switch to unix_socket authentication [Y/n] n

Change the root password? [Y/n] Y

Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n] Y


Remove test database and access to it? [Y/n] Y

Reload privilege tables now? [Y/n] Y

이제 root 계정으로 명령행으로 접속해 보자

1
2
3
4
5
6
7
8
9
10
11
~$ mariadb -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 40
Server version: 11.3.2-MariaDB-1:11.3.2+maria~ubu2204 mariadb.org binary distribution

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)]>

현재 11버전까지 mysql 클라이언트를 사용하지만 향후 deprecated 될 예정으로

mariadb 클라이언트 사용을 권장한다.

Option file 설정

설정 파일은 유닉스 계열은 my.cnf (or mariadb.cnf) 이고 윈도우 계열은 my.ini 이다.

Ubuntu/Debian 계열:

/etc/mysql 밑에 데이터베이스 구성 설정 파일이 있다.

  1. 기본 설정 파일 my.cnf
  2. Debian / Ubuntu 계열은 my.cnf -> mariadb.cnf 로 링크되어 있다.
  3. mariadb.cnf 은 보통 /etc/mysql/mariadb.conf.d/ 폴더 아래 구성 파일들.
1
2
3
4
5
6
$ ll mariadb.conf.d/
50-client.cnf
50-mysql-clients.cnf
50-server.cnf
60-galera.cnf
99-enable-encryption.cnf.preset/

data 폴더 변경

블로그 글 MariaDb 10/ MySQL 8 - data 디렉토리 변경 (Ubuntu)


참조

https://mariadb.com/kb/ko/installing-mariadb-deb-files/

zipline-reloaded 빌드환경

zipline 은 Quantopian 이 운영하던 오픈소스 백테스팅 으로 2021년경 지원이 중단된 뒤로 Machine Learning for Trading 책의 저자가 fork 한 zipline-reloaded 프로젝트로 유지되고 있다.

오픈소스 개발에 참여하기 위해서 링크의 개발환경이 갖춰져야 한다.

개발환경 구성하기

https://zipline.ml4trading.io/development-guidelines.html

  1. python 3.12
  2. venv, pyenv, conda 등 가상환경 가능.

Linux 의존성 설치

컴파일을 위해서 리눅스 패키지 의존성을 설치한다.

1
sudo apt install libatlas-base-dev gfortran pkg-config libfreetype6-dev hdf5-tools

ta-lib 의존성

zipline 에는 ta-lib 를 사용하는데 C 기반의 컴파일이 필요하다.

  • linux / macos

ta-lib C library 설치가 된후에 파이썬 모듈을 설치한다.

1
sudo apt install ta-lib

numpy, sphinx, Cython 설치

1
pip install -U numpy Cython 

필요 모듈 설치하기

setuptools/build 설치

1
pip install -U setuptools wheel twine build

빌드

1
python -m build

dist 폴더에 .wheel 결과가 생성된다. 이 whl 을 설치한다

~/zipline-reloaded$ pip install dist/zipline_reloaded-3.0.3-cp311-cp311-linux_x86_64.whl

doc 빌드

sphinx 관련

1
pip install -U sphinx m2r2 sphinx_markdown_tables

cd docs

zipline-reloaded 1 - 설치

zipline 은 Quantopian 이 운영하던 오픈소스 백테스팅 으로 2021년경 지원이 중단된 뒤로 Machine Learning for Trading 책의 저자가 fork 한 zipline-reloaded 프로젝트로 유지되고 있다.

zipline 이란

  • zipline 은 Quantopian 이 운영하던 오픈소스 백테스팅이다.
  • 2021년경 업데이트 지원이 중단된 상태이다.
  • 여기서는 fork 중 Machine Learning for Trading 책의 저자 fork이 zipline-reloaded 프로젝트를 선택한다.

zipline의 fork 버전인 zipline-reload 를 설치하고 zipline은 bundle 를 통해서 데이터를 받아서 알고리즘을 실행하는 구조로 보이다. 여기서는 기본 번들로 사용하는 quandl 설치까지만 진행한다.

zipline 설치

zipline-reload 를 설치한다.

1
2
3
4
5
6
# pip
pip install zipline-reloaded


# conda
conda install -c conda-forge zipline-reloaded

quandl 시세 데이터 설치

기본 데이터 번들 Ziplin 을 위한 데이터: https://zipline.ml4trading.io/bundles.html

zipline은 기본 번들로 quandl 의 wiki 데이터 세트를 제공한다. Quandl 데이터 번들에는 자산의 일일 가격 데이터, 분할, 현금 배당금 및 자산 메타데이터가 포함됩니다.

Quandl은 2018년 초에 이 데이터 세트를 중단했으며 더 이상 업데이트되지 않습니다. 그럼에도 불구하고 자체 데이터 세트를 설정하지 않고 Zipline을 시험해 보는 것은 유용한 시작점입니다.

현재 quandl 데이터는 NASDAQ 에서 호스팅한다. 설치시 NASDAQ 에 가입해 설치를 했어야 한다.

Get a QUANDL API Key

*Ingest Zipline Bundle 을 다운받으려면 data.nasdaq.com에 가입해서 API key 를 얻는다. account setting 에 API Key 가 있다.

https://data.nasdaq.com/account/profile

Zipline 기본 Bundle

API key 를 복사해서 quandl 데이터 번들을 다운로드 하려면 zipline 명령으로 시작한다.

다음 명령 중 하나를 사용하면 기본 quandl 번들을 홈디렉토리에 다운로드 한다.

1
2
3
4
5
$ QUANDL_API_KEY='**********'  zipline ingest -b quandl

or

$ QUANDL_API_KEY='**********' zipline ingest

다운로드 되는 번들 파일은 사용자 홈디렉토리 아래 .zipline/data 폴더에 저장된다.

Jupyter Notebook 셀에서 실행한다면

! 다음에 명령을 넣어 주면 된다.

1
$ ! QUANDL_API_KEY='**********' zipline bundles

다운로드한 번들을 확인할 수 있다.

1
2
3
4
5
6
7
$ zipline bundles

csvdir <no ingestions>
quandl 2024-02-03 12:59:38.882421
quandl 2024-02-03 12:55:18.326897
quandl 2024-02-03 12:42:14.980288
quantopian-quandl <no ingestions>

zipline 으로 알고리즘 실행

zipline 은 3가지 방법으로 알고리즘을 실행할 수 있다. run 명령 도움말을 참조할 수 있다.

1
$ zipline run --help

기본 번들에 있는 자산의 가격 데이터를 사용해서 zipline 알고리즘을 실행해 보자.

Python - 문서화 도구 Sphinx

Sphinx 는 python의 대표적인 문서화 도구로 reStructedText 또는 Markdown 문서를 HTML, pdf, man page 등의 결과물로 생성할 수 있다.

sphinx 설치

sphinx 는 python 환경에서 실행이 된다. 설치는 python 환경 혹은 OS 환경에 직접 설치하는 방법이 있다. 파이썬 가상환경을 권장한다.

https://www.sphinx-doc.org/en/master/usage/installation.html

- Python 환경에 설치

python 환경 혹은 python 가상환경 (venv, virtualenv 등)에 설치

pip

1
pip install sphinx

Anaconda

1
conda install sphinx

- 시스템에 직접 설치

각 OS 의 SW 로 설치한다면 package 관리자를 사용해 설치한다.

Debian/Ubuntu

1
apt install python3-sphinx

RHEL, CentOS

1
yum install python-sphinx

macOS / home-brew

1
brew install sphinx-doc