2023년 7월 19일 수요일

mariadb ER_CANT_AGGREGATE_2COLLATIONS 에러발생

테이블 charset 이 utf8mb4 일때 클라이언트 charset 을 따로 설정하지 않으면 이모지 사용할때 아래와 같은 오류가 난다.

code: 'ER_CANT_AGGREGATE_2COLLATIONS',

0|api.dlwl |   errno: 1267,

0|api.dlwl |   sqlMessage: "Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb3_general_ci,COERCIBLE) for operation '='",

0|api.dlwl |   sqlState: 'HY000',

0|api.dlwl |   index: 0,



나의 경우는 nodejs mysql 모듈에서 난 오류인데, 아래와 같이 수정하면 됨. 서버와 클라이언트 간에 charset 맞추는거 까먹지말자..
const config = {
  ...
charset:'utf8mb4',
};

connection = mysql.createConnection(config);

2023년 6월 26일 월요일

우분투 스케쥴러

1. /etc/crontab/
2. /etc/cron.*/*
3. systemctl list-timers

1,2번은 익숙한데 3번이 잘 생각이 안나서 기록함.

2023년 6월 21일 수요일

ssl 인증서 생성

- 인증서 생성

# CA 개인키 생성
$ openssl genrsa -out starkey-rootCA.key 2048
$
# CA CSR ( Certificate Signing Request ) 생성 -- 인증신청서
$ openssl req -new -key starkey-rootCA.key -out starkey-rootCA.csr

# CA CRT 생성 -- 인증서
$ openssl x509 -req -in starkey-rootCA.csr -signkey starkey-rootCA.key -out starkey-rootCA.crt

중간 인증서 개인키 생성
$ openssl genrsa -out starkey-ia.key 2048

중간 인증서 CSR ( Certificate Signing Request ) 생성 -- 인증신청서
$ openssl req -new -key starkey-ia.key -out starkey-ia.csr

중간 인증서 CRT 생성 -- 인증서
$ openssl x509 -req -in starkey-ia.csr -CA starkey-rootCA.crt -CAkey starkey-rootCA.key -CAcreateserial -out starkey-ia.crt

$ openssl x509 -sha256 -req -days 365 -in mongodb-test-server1.csr -CA mongodb-test-ia.crt -CAkey mongodb-test-ia.key -CAcreateserial -out mongodb-test-server1.crt -extfile openssl-test-server.cnf -extensions v3_req

- 추가사항

# 개인키로 공개키 만들기
$ openssl rsa -in test.key -out test.pub -pubout

# format 변환 -----BEGIN PRIVATE KEY----- (PKCS#8) -> -----BEGIN RSA PRIVATE KEY----- (PEM)
$ cp -rpf test.key test.pem # 파일복사
$ ssh-keygen -p -m PEM -f test.pem # format 변환

# 비공개 공개키 한번에 만들기
$ ssh-keygen

puppeteer 로 크롤링 시 발생하는 문제점

node pm2 로 크롤링을 계속 하니 /tmp/snap-private-tmp/snap.chromium/tmp 폴더 안에 puppeteer_dev_chrome_profile-* 파일들이 지워지지 않고 계속 살아 있어서 디스크 용량이 꽉 차버렸다.

일단 du -sh * | sort -rh | head -n 10 로 용량 많은것들 찾아서 지워줬다.

그리고 /var/log/journal 폴더 안에 용량도 많길래 최대 사이즈 설정

$ sudo nano /etc/systemd/journald.conf
SystemMaxUse=1000M

최적의 방법은 모르겠지만 puppeteer.launch 옵션에 userDataDir 옵션을 줘서 해당 폴더에 유저데이터 저장하게 하고 puppeteer.launch 하기전 userDataDir 폴더를 fs.rmSync 로 삭제하는 방법으로 우선적으로 수정.

나중에 시간되면 더 좋은 방법을 찾아봐야할듯.

puppeteer.launch 해서 받은 변수 browser 로 close() 하고 바로 또 launch 하는게 문제였음..

browser.close(); -> await browser.close(); 로 해결.

close() 함수가 정상적으로 실행이 안된다면, 아래 오류가 발생
Failed to create /home/ubuntu/node/project/pricedown/crawling/user-data-dir/SingletonLock: File exists (17)

크롤링 파일 실행할때 user-data-dir 폴더 삭제하는 방법으로 해결.