DB/DB 공통 관리19 웹에서 내용들이 수정이 안될때 (sql_mode) 웹에서 내용 정보들이 수정이 안될때 분명히 access_log는 제대로 찍혔고, error_log는 안나올때 DB my.cnf를 의심해보자. 서버 이전경우는 이전 서버를 확인해보자. 이전 서버에서 mysql -u root -p SELECT @@sql_mode; SELECT @@GLOBAL.sql_mode; SELECT @@SESSION.sql_mode; 해당 값을 그대로 확인한 다음 my.cnf 에서 수정해야합니다. MariaDB [(none)]> SELECT @@sql_mode; +-------------------------------------------------------------------------------------------+ | @@sql_mode | +----------------.. DB/DB 공통 관리 2023. 4. 16. 5. Sphinx 스핑크스 주기적 인덱스 방법 ( delta + crontab ) 스핑크스의 인덱스 순서는 아래와 같습니다. 환경설정 : sphinx.conf 인덱스 실행 : indexser --all 데몬 실행 : searchd 인덱스 재 실행 : indexser --all -- rotate (searchd 실행중인 경우에는 --ratate 옵션 부여) 그럼 인덱스 실행은 얼마나 자주 해야 하는걸까요? 실시간으로 응대해야 한다면 전혀 다루지 않았던 RT형식으로 해야 할 겁니다. 제가 구현하고자하는 통합검색에는 실시간까지는 필요 없고 그래도 최대 1~5분 주기로는 인덱스 작업을 해줘야 합니다. 그러나 테이블 하나가 100만 건만 된다고 하더라도 인덱스하는 시간이 수분~수십분이 걸립니다. 100만건 되는 테이블이 다수개라면 서비스 자체가 할 수 없게 됩니다. 이를 해결하기 위해서 아래와.. DB/DB 공통 관리 2023. 3. 26. 4. Sphinx, MySQL 에서 스핑크스 직접 join하기 (sphinxSE) 이전 시간까지 스핑크스를 설치했고, sphinxQL을 이용하여 주로 사용하는 쿼리를 테스트 해봤으며, PHP 연동까지도 해봤습니다. 이번 장은 sphinxSE를 사용하는 방법을 설명하고자 합니다. 이글 부터 보시는 분들은 꼭 #1 부터 읽어주시기 바랍니다. sphinxSE는 searchd(스핑크스 데몬)와 대화하여 텍스트 검색을 가능하게 하는 스토리 엔진입니다. 스핑크스와 sphinxSE는 mariaDB에 내장된 전체 텍스트 검색(full text) 보다 빠르고 사용자 정의 가능한 대안으로 사용됩니다. MariaDB에서 sphinxSE 설치하기 # mysql에 스핑크스 엔진 설치 mysql> INSTALL SONAME 'ha_sphinx'; mysql> SHOW ENGINES\G +------------.. DB/DB 공통 관리 2023. 3. 26. 3. Sphinx스핑크스 쿼리 테스트 PHP 연동 스핑크스 설치 환경설정 (sphinx.conf) 인덱싱 생성 데몬 실행 sphinxQL 실행 이번에는 sphinxQL을 통해 쿼리를 날려보고 동작원리 및 유용한 쿼리를 연습하는 시간을 가져보려 합니다. 기본 sphinxQL를 접속해주세요. ]$ mysql -h0 -P9306 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 2.2.11-id64-release (95ae9a6) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c'.. DB/DB 공통 관리 2023. 3. 26. 1. Sphinx 이란 mysql 사용중인 사이트에 통합검색을 하나 달아야 합니다. 5백만 건 정도이며 text자료형의 필드가 다소 있는 상태입니다. 'like'는 'index'를 사용할 수 없기 때문에 논의 대상 자체가 아닙니다. myisam 구조라서 full-text 방식을 사용하고 있지만 varchar 도 검색엔진에 태워야 하는데 결국 부분적으로 'like'를 사용해야 하기때문에 대안이 아닙니다. 결국 엘라스틱서치(Elasticsearch)와 스핑크스(sphinx) 두개로 압축이 되었고, 당분간 스핑크스를 사용하기로 결정했습니다. 검색엔진은 크게 3가지의 기능을 가지고 있어야 합니다. 형태소 분석기, 색인(index)하는 기능, 마지막으로 검색하는 기능입니다. 검색엔진은 위의 3가지의 기능을 필수로 가지고 있어야 하는데,.. DB/DB 공통 관리 2023. 3. 26. 2. Sphinx 스핑크스 설치 및 환경 현재 mysql를 사용 중이며, 500만 건 text, varchar 등 혼합된 구조의 테이블이 10개 정도 존재합니다. 이들 대상으로 통합검색을 사이트에 구현해야 합니다. 몇가지 후보군 중에 스핑크스(sphinx)가 적당하다 판단하고 설치부터 테스트, 구현까지의 과정을 포스팅합니다. 아래는 스핑스크 테스트할 사용 계획입니다. mysql에는 zip_code라는 우편번호 테이블이 존재합니다. 스핑크스를 이용하여 zip_code의 text, varchar 컬럼을 인덱스 로드합니다. 인덱스 로드한 이름은 sph_zip_code로 명명합니다. sphinxQL 이용하여 쿼리 테스트를 합니다. sphinxSE 이용하여 zip_code와 sph_zip_code를 innser join 하여 통합검색 서비스를 합니다. .. DB/DB 공통 관리 2023. 3. 26. mysql 상태 모니터링 # 상태 mysqladmin -u root -ppassword -i3 status 현재 내 서버의 상태 Uptime: 9063212 Threads: 7 Questions: 91587331 Slow queries: 104 Opens: 694 Flush tables: 1 Open tables: 229 Queries per second avg: 10.105 Uptime: 9063215 Threads: 7 Questions: 91587332 Slow queries: 104 Opens: 694 Flush tables: 1 Open tables: 229 Queries per second avg: 10.105 슬로우쿼리가 많은것으로 봐서 문제가 있다… 슬로우쿼리만 따로 로그로 남겨서 확인해 봐야겠네 # 프로세스 확인.. DB/DB 공통 관리 2023. 3. 26. 사이트 접속했을때 Too many connection가 나올때 Max connections 에러가 발생하면서 PHP페이지에 mysql에서 동시연결가능한 클라이언트수를 넘었기 때문이다. MySQL 서버 내에서 확인 # mysqladmin -u root -p variables | grep max_connection | max_connections | 100 # mysql -uroot -p mysql> show variables like ‘%max%’; 리눅스나 솔라리스 계열에서는 클라이언트의 동시 접속자수가 500 ~ 1,000 까지 가능합니다. 하지만 1000 설정 하려고 해도 cpu에 상당히 많은 램이 필요하다고 할고 있다. 256이 적당하다. MySQL 외부에서 설정파일 수정 # vi /etc/my.cnf max_connections= 1024 max_connec.. DB/DB 공통 관리 2023. 3. 12. MySQL, MariaDB 비밀번호 변경 및 유저 생성 MySQL 5.7 미만 버전 mysql> use mysql mysql> update mysql.user set password=password('비밀번호') where user='root'; mysql> flush privileges; mysql> select user,host,password from mysql.user; mysql> exit MySQL 5.7 mysql> use mysql; mysql> update user set authentication_string=password('비밀번호') where user='root'; 우분투 한정 mysql> update mysql.user set plugin='mysql_native_password', authentication_string=passw.. DB/DB 공통 관리 2023. 3. 12. MySQL Slow Query 설정 MySQL 설정파일 Slow Query 설정 slow query log 확인하기 mysql> show variables like 'slow_query_%'; 서버밖에서 설정하기 MySQL my.cnf 설정 vi /etc/my.cnf ======================================================================== [mysqld] #slow_query_setting slow_query_log=1 //////1=on 0=off log_slow_log_file = /var/log/mysql/mysql-slow.log long_query_time = 3 슬로우 쿼리가 3초가 초과하는 쿼리에 대한 로그를 남기는 설정입니다. log_slow_querise : 저장될 .. DB/DB 공통 관리 2023. 3. 12. my.cnf 설정파일 정리 [client] #password = your_password → client 패스워드 설정 port = 3306 → 포트번호 socket = /tmp/mysql.sock → mysql.sock 위치 # The MySQL server [mysqld] port = 3306 → 포트번호 socket = /tmp/mysql.sock → mysql.sock 위치 skip-external-locking → 외부(TCP/IP) 잠금 비활성 key_buffer_size = 384M → 인덱스를 메모리에 저장하는 버퍼의 크기 max_allowed_packet = 1M → 요청된 쿼리의 최대길이의 값 table_open_cache = 512 → 각 쓰레드별 오픈할 테이블수 sort_buffer_size = 2M → 정렬.. DB/DB 공통 관리 2023. 3. 12. bin log 개념 및 설정 bin log 이란 MySQL 의 빈로그 혹은 바이너리 로그는 MySQL 서버 인스턴스의 데이터 변경사항들에 대한 정보를 포함하는 로그 파일의 세트이다. 여기에는 에러코드, 바이너리 로그 자체에 대한 메타데이터 등 다양한 데이터가 같이 포함되게 된다. 기본적으로 Transaction Commit 시에 기록되어지며, 데이터 변경 순서를 보장한다는 특징이 있다. 주로 복제(Replication) 및 복구(Recovery)를 목적으로 binary log 가 사용되어지며, 복제 시에는 Secondary Node 가 Primary Node 로부터 binlog 데이터를 전달받아서 로깅하게 된다. (그리고 전달받아 로깅하는 이 로그를 릴레이 로그 라고 한다) MySQL 에서 제공하는 바이너리 로그에는 3가지 종류가 .. DB/DB 공통 관리 2023. 3. 12. 이전 1 2 다음