Database/MySQL, MariaDB 10

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

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..

MySQL HA (Orchestrator, ProxySQL, Consul)

동작 방법 MySQL (is source that replicating) > Orchestrator (will be actively polling mysql for information & pulling it into its own space) > as updates are done,it will push infromation into Consul (Key-value store) > other processes take data from the Consul and update to ProxySQL (proxy application) almost immediate SPOF 요소 제거를 위해 Orchestrator 사용 Orchestrator: MySQL 복제 운영 및 복구 실행 automatically r..

ProxySQL과 Orchestrator의 simple STONITH

STONITH (Shoot The Other Node In The Head) 재설정하거나 전원을 차단하여 문제가 생긴 노드를 클러스터에서 제외 시키는 테크닉 multi-DC 구조에서 ProxySQL이 routing 과 proxying 을 해주는데 DC1 번의 primary MySQL 노드에서 잠시 이상이 생겼을 때 Orachestrator health check 에서 이상이 생김을 감지하고 DC2 의 다른 노드를 primary로 승격시킬 수 있다. 하지만 잠깐 동안 발생했던 문제의 DC1 의 노드가 정상으로 돌아올 때 문제가 발생할 수 있다. ProxySQL이 이 노드를 다시 read-write 가 가능하다고 지정하려는 경쟁적인 상황이 발생할 수 있고, Orchestrator 가 다시 node를 먼저 찾..

MySQL 백업, 복원 비교 (xtrabackup/mysqldump)

MySQL 백업/복원 방식특징장점/단점 핫 백업 (Hot Backup/Open Backup) DB 서버를 온라인 상태로 유지한 채 데이터 백업 - 데이터베이스 서버를 중지하지 않고 백업 가능 - 트랜잭션, 스냅샷, 로그 등을 이용하여 실시간 백업 - Archive Log 모드에서만 백업을 수행할 수 있음 - 디스크 용량이 추가로 요구될 수 있음 - 핫 백업 도구를 사용할 때의 비용이 발생할 수 있음 콜드 백업 (Cold Backup/Close Backup) DB 서버를 중지한 후 데이터 백업 - 쉬운 백업이 가능함 - 데이터 백업을 요청한 시기 이후의 데이터는 백업할 수 없음 (따라서 일부 데이터 손실이 발생할 수 있음) 논리 백업 (Logical Backup) 각 오브젝트를 SQL문 등으로 저장 - 데..