Database 24

PostgreSQL Vacuum 기초

PostgreSQL에서 Vacuum은 MVCC를 구현하기 위해 PostgreSQL에서 사용하는 동작을 이야기 합니다. Vacuum 명령어나 AutoVacuum은 다음과 같은 작업을 수행합니다. Maintenance 를 위해 임계치 이상의 Dead tuple을 정리하고 FSM으로 반환 Transaction ID Wraparound 방지 Statistics Plan update Visibility map update를 통한 index scan 성능 향상 오늘은 Dead tuple 정리와 관련 된 Vacuum 작업을 살펴보도록 하겠습니다. Vacuum Test Vaccum을 확인하기 위해 test 테이블을 만들고, update하면서 Vacuum이 어떻게 영향을 미치는지 확인해 보도록 하겠습니다. 1. Post..

Database/PostgreSQL 2024.01.15

Redis Cluster, Redis Replica (Sentinel) 백업, 복원

Redis Cluster Backup Redis Cluster, 또는 Sentinel 구조일 경우 Slave 서버의 .rdb 파일을 백업하도록 ansible 명령을 cronjob에 등록해서 사용 가능합니다. 1. 원격 서버에서 각 서버의 role을 확인하여 slave 일 경우만 백업 2. 백업 실패할 경우 메일 발송 3. 기간이 오래된 경우 백업 디렉토리에서 오래된 파일 삭제 사용하는 Util은 https://www.tencentcloud.com/ko/document/product/571/13749 에서 redis-port를 다운로드 하여 사용합니다. 백업 방식은 백업을 하는 Manager 서버에서 각 Cluster로 ssh를 사용해서 Manager 서버 mount 된 Nas Storage로 백업되도록 ..

Database/Redis 2023.03.15

MySQL Binlog > GTID 모드 복제로 변경

MySQL의 기존 Binlog 복제를 GTID 모드로 변경하는 방법 Binlog 복제를 GTID 모드로 변경하기 위해서는 GTID 모드를 확인 (MySQL 8.0.30 기준으로 작성) show variables like 'gtid_mode'; OFF로 설정되어 있을 경우, STOP REPLICA; OFF로 설정되어 있을 경우 다음 순서로 GTID 모드 변수를 변경 후, GTID 모드를 활성화 한다. set global gtid_mode='OFF_PERMISSIVE'; set global gtid_mode='ON_PERMISSIVE'; set global gtid_mode='ON'; 복제 정보를 GTID를 이용할 수 있도록 변경한다. Change replication source to source_host..

Mysql 계정 정보 복사, 이전 (DB 마이그레이션 시)

pt-show-grants를 사용하지 않더라도 아래 스크립트를 .sh 로 생성하여 실행하면 비밀번호와 grant 옵션을 얻을 수 있음 #!/bin/bash HOST=localhost USER= PASSWORD= for i in `mysql -Ns -h$HOST -u$USER -p$PASSWORD -e "select concat('\'',user,'\'@\'',host,'\'') from mysql.user where user not in ('mysql.session','mysql.sys','debian-sys-maint','root','mysql');"` do mysql -Ns -h$HOST -u$USER -p$PASSWORD -e 'SHOW CREATE USER '"$i"';' >> users.sql ..

MariaDB 버전에 따른 mysql DB 스키마 관련 오류 ([Error] Query caused different errors on mast

이슈 상황 Database Drop 문 실행 시, MySQL Slave에서 Error 발생 mysql.proc 관련 [Error] Query caused different errors on master and slave. Error on master: message (format)='Column count of %s.%s is wrong. Expected %d, found %d. The table is probably corrupted' error code=1805 " Error on slave: actual message='no error', error code=0. mysql.event 관련 Incorrect definition of table mysql.event: expected column 's..

MySQL Group Replication

Single/Multi Primary Mode 그룹 복제는 Client에서 Failover를 처리하지 않으므로 MySQL Router 8.0, ProxySQL, Connector 등으로 redirection 조치 미들웨어가 추가 되어야 함 group_replication_single_primary_mode 값을 모두 같은 값으로 설정해야 하며 GR 실행 중에 변경할 수 없음 group_replication_bootstrap_group=ON 으로 전체 reboot 필요 (안전하게 트랜잭션이 처리되며 실행할 수 있도록 함) MySQL 8.0.16 이후부터 group_replication_switch_to_single_primary_mode(), group_replication_switch_to_multi_p..

[MY-000068] [Server] unknown option '---'.

[ERROR] [MY-000068] [Server] unknown option '---'. [ERROR] [MY-010119] [Server] Aborting --initialize 옵션 실행 시 MySQL 설치 시 위와 같은 에러가 발생하면서 서버가 올라오지 않는다면 configuration 파일에 - 가 없는지 확인해야 한다. 8.0.30 버전 이후로 --initialize 시 --user 옵션은 제외 하고 아래와 같이 사용 ./mysqld --defaults-file={{cnf_file_path}} --basedir={{ mysql_base_path }} --datadir={{ mysql_data_path }} --explicit_defaults_for_timestamp --initialize

max number of clients reached 오류

/etc/redis.conf 의 maxclients 값 이상의 connection 요청이 있을 경우 발생하는 에러 maxclients 값을 높게 수정하고 redis 재시작 후 들어오는 connection 수를 확인한다. linux> netstat | grep ESTABLISHED | wc -l redis errorlog에서 동일한 에러가 발생하면 조금 더 높은 숫자로 변경하되 fs.file-max 값을 넘기지 않는다. 필요 시 아래 값을 상향 조정 후 redis.conf에서 maxclients 값을 수정한다. linux> sysctl -w fs.file-max=100000 참조: https://redis.io/docs/reference/clients/

Database/Redis 2022.09.08

MySQL Group Replication 설정 순서

Group Replication 설정할 MySQL 노드에서 모두 순서대로 실행한다. MySQL 필요한 설정 업데이트 # my.cnf report-host= gtid_mode=ON enforce_gtid_consistency=ON master_info_repository=TABLE replay_log_info_repository=TABLE binlog_checksum=NONE log_slave_updates=ON log_bin=binlog binlog_format=ROW log_bin_trust_function_creators=1 transaction_write_set_extraction=XXHASH64 loose-group_replication_group_name="그룹명" loose-group_repl..

ProxySQL 2.3 - 향상된 Group 복제 운영 방식

ProxySQL 에 추가된 두가지 Replication 지원 방식 Status SHUNNED Automatically shunning slaves with replication lag replication 지연이 임계값에 도달하면 ProxySQL 은 server 를 OFFLINE 상태로 변경하는 대신 임시로 제외 시키는 SHUNNED 상태로 변경하며, 갑자기 상태 변경과 모든 backend connectin 을 drop 하는 것이 아니라 천천히 제외 시킨다. Replication lag 임계값에 도달하면 ProxySQL이 서버를 'OFFLINE' 호스트 그룹으로 옮기지 않고 Shunned 상태로 변경한다. # 자동으로 복제 서버를 replication 에서 제외시키려면 max_replication_lag..