everydayminder
MySQL에서 Ignoring query to other database 에러 발생시 어느 날, MySQL에 CLI로 접속하여 명령을 수행하는데, 아래와 같은 에러가 발생했다. mysql> show databases; Ignoring query to other database 원인 파악 $ mysql -u사용자ID -p 명령어를 실행하면서 옵션을 혹시 대소문자를 다르게 입력했는지 확인해 보자. 내 경우는, $ mysql -U사용자ID -p 와 같이, -U를 대문자로 입력하고 로그인 하여 위의 문제가 발생하였다. 대소문자에 따른 옵션 차이 인식 -u와 -p는 대소문자에 따라 의미하는 바가 명확히 다르다. 따라서, 클라이언트 실행시 대소문자에 주의하여 실행해야 한다. -u, --user=name User f..
MySQL에서 auto_increment 값을 조정하려면? MySQL에서 id를 지정하고 auto_increment 옵션을 지정하면, 데이터를 추가할 때 마다 1씩 자동 증가한다. 그런데, 이 값을 다시 임의의 값으로 조정하거나 초기화 하려면 어떻게 해야 할까? 테스트 테이블 구조 다음과 같은 테이블로 테스트 해 보자. CREATE TABLE IF NOT EXISTS `idtest` ( id int(6) AUTO_INCREMENT, name varchar(255) NOT NULL, PRIMARY KEY (id) ); 따라서, 이 테이블에 insert를 하면, id가 1씩 증가하도록 사용할 수 있는 상태이다. insert 하기 이 테이블에서 insert를 테스트 하면 아래와 같다. mysql> insert..
2038년 버그란? 도대체 2038년에 어떤 일이 생기길래 2038년 버그라는 말이 있고, Y2K38이라는 단어까지 존재하는 것일까? 예전에 1999년에서 2000년으로 넘어갈 무렵에 전산상 표기할 수 있는 자릿수가 변경되면서 발생하는 문제를 통칭하여 Y2K 문제라고 불렀었다. 90년대 후반까지는 년도를 두자리로 부르는 것이 관례적이었는데, (마치 우리가 학번을 부르면 끝에 두 자리만 부르고, 주민등록 번호상으로도 년도는 뒤의 두 자리만 주로 쓰듯이) 1999년에서 2000년도로 넘어가면서 99->00으로 바뀌는 과정에서 00을 2000으로 인식하느냐, 1900으로 인식하느냐의 문제가 발생했었다. 그리고, 이름으로도 유추할 수 있듯이 유사한 문제가 2038년에 발생하려고 한다. 왜 그럴까? 2038년 버..
날짜와 시간을 표현하는 데이터타입 비교 - datetime vs. timestamp MySQL에서 YYYY-MM-DD HH:MM:SS (년-월-일 시:분:초)로 날짜를 표현하는데 사용되는 데이터 타입으로, datetime과 timestamp 두 가지가 있다. 기본적으로 시간을 표현한다는 점에서는 유사해 보이지만, 저장되는 값의 형태와 동작하는 방식의 차이점, 그리고 제약사항을 인지하고 사용해야 한다. DATETIME과 TIMESTAMP 비교 시간 정보를 DATETIME과 TIMESTAMP로 표현할 때 어떤 차이가 있는지 살펴보자. DATETIME 표현가능 범위: 1000-01-01 00:00:00~9999 - 12:31 23:59:59 타임존에 대한 변환 없이, 저장할 때 값 그대로 저장이 된다. 타임존..
개요 글로벌 서비스를 하면서 Time Zone 설정은 신경써야 할 부분이 된다. 본 포스트에서는 MySQL의 Time Zone을 설정하는 방법에 대해 정리한다. 테스트의 편의상 Docker를 기반으로 테스트하였다. 현재 설정 확인 mysql> select @@global.time_zone, @session.time_zone; +--------------------+----------------------------------------+ | @@global.time_zone | @session.time_zone | +--------------------+----------------------------------------+ | SYSTEM | 0x | +--------------------+-----..
MySQL로 트랜잭션 격리 수준 동작 테스트를 하고, 결과를 정리해 놓는다. 트랜잭션 범위 MySQL에서 트랜잭션은 START TRANSACTION으로 시작하고, COMMIT으로 다음과 같이 실행된다. START TRANSACTION ... (트랜잭션) ... COMMIT 트랜잭션 격리 수준 확인/ 변경 MySQL에서의 트랜잭션 격리수준 확인 및 변경은 아래 포스트를 참고한다. MySQL 트랜잭션 격리수준 확인/변경 본 포스트에서는 MySQL 트랜잭션 격리수준을 확인하는 방법과 변경하는 방법에 대해 정리한다. MySQL 버전에 따른 사용법 차이 예전에는 tx_isolation이 쓰였는데, MySQL 5.7.20에서 transaction_isolation이 ali. luran.me 본 포스트에서는, 구문형..
본 포스트에서는 MySQL 트랜잭션 격리수준을 확인하는 방법과 변경하는 방법에 대해 정리한다. MySQL 버전에 따른 사용법 차이 예전에는 tx_isolation이 쓰였는데, MySQL 5.7.20에서 transaction_isolation이 alias로 추가되었고, 8.0에 이르러서는 tx_isolation이 더 이상 사용되지 않기 때문에 변수를 사용하여 트랜잭션 격리수준을 확인하거나 설정할 때, 이를 참고하여 활용하면 된다. MySQL 5.7.2 이하: tx_isolation 사용가능 MySQL 8.0 이상: transaction_isolation 사용 트랜잭션 격리수준 확인하기 현재 트랜잭션 격리 수준이 어떻게 설정되어 있는지는 간단히 쿼리로 확인할 수 있다. SELECT @@GLOBAL.trans..
파이썬으로 MySQL 사용하기 Python으로 MySQL에 접속하고, 데이터를 다루려면 여러 라이브러리가 있다. 마침 StackOverFlow에도 이와 관련한 Q&A가 있어서 살펴보고 선택하고자 한다. https://stackoverflow.com/questions/43102442/whats-the-difference-between-mysqldb-mysqlclient-and-mysql-connector-python What's the difference between MySQLdb, mysqlclient and MySQL connector/Python? So I've been trying to do some database update with python and while setting up the w..
MySQL에서 쿼리 타임아웃을 설정하려면? MySQL에서 쿼리를 실행하다 보면, 클라이언트쪽이 아니라 서버쪽에서 실행시간을 제어하고 싶을 때가 있다. 너무 실행시간이 길어지는 경우 kill을 하면 좋겠지만, 클라이언트와 서버간 중간 커넥션이 끊어지면 트래킹하기도 어렵다. 만약, 조건(?)만 만족한다면 다음의 옵션을 검토해 보자. 사용 옵션 - MAX_EXECUTION_TIME(n) 제목에도 썼듯이, 사용할 옵션은 MAX_EXECUTION_TIME이다. 환경 변수나, conf로 설정하게 되면 여러 쿼리들에 적용되는 부작용을 겪을 수도 있다. 따라서, 쿼리 힌트로 사용하는 것이 현실적이라고 생각한다. SELECT /*+ MAX_EXECUTION_TIME(n) */ * FROM ... 형식으로 사용하면 된다...
MySQL Information_schema로 세부 정보 확인하기 특정 어느 한 개의 테이블에 대한 스키마 정보를 알고 싶을 때, desc 테이블명 을 실행하면 테이블의 스키마를 확인할 수 있다. 그런데, 전체 스키마 중 어떤 특징을 기준으로 조회하거나 내용을 걸러서 확인해야 한다면, 모든 테이블을 대상으로 desc 하는 것은 비효율적이다. DB 테이블 구조를 쿼리로 확인할 수 있다면 도움이 될 것이므로, 어떤 정보를 조회할 수 있는지 다음과 같이 확인해 보자. 테스트스키마 및 테이블 구성 테스트를 위해, 아래와 같이 스키마를 만들고 몇 개의 테스트 데이터를 넣어보자. CREATE TABLE IF NOT EXISTS `docs` ( `id` int(6) unsigned NOT NULL, `rev` int..
Docker를 사용하여 MySQL을 설치하는 방법을 정리한다. docker-compose.yml YAML 파일의 기본 골격을 다음과 같이 작성한다. version: "3" services: db: image: mysql:8.0.20 container_name: mysql_db restart: always ports: - "3306:3306" environment: MYSQL_DATABASE: "${MYSQL_DATABASE}" MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}" MYSQL_USER: "${DB_USER_ID}" MYSQL_PASSWORD: "${DB_USER_PASSWORD}" command: - --character-set-server=utf8mb4 - --co..
쿼리로 테이블 이름 조회하려면? 테이블 이름을 조사할 일이 있을 때, DB Client에서 조회하는 것이 불편할 때가 있다. 쿼리로 테이블 이름을 추출하려면 어떻게 할까? 주요 DB별로 테이블 정보를 조회하는 쿼리는 다음과 같다. MySQL SELECT table_name FROM information_schema.tables; PostgreSQL SELECT RELNAME AS TABLE_NAME FROM PG_STAT_USER_TABLES; Oracle SELECT * FROM all_all_tables; SELECT * FROM tabs; MS-SQL SELECT * FROM INFORMATION_SCHEMA.TABLES; 간편하게 온라인으로 SQL Query 실행해 보기 베경 DB가 설치되어 있고..
출처) http://infodotnet.blogspot.com/2008/03/install-and-configure-freeradius-with.html
만약, DB의 한글 설정이 UTF-8로 되어 있고 (show variables like 'c%' 로 확인) 웹서버든 프로그램 상에서든 인코딩을 맞춰서 넣어준다고 치자. 컴퓨터에서 HeidiSQL 같은 프로그램을 써서 DB에 접속해 보면, 한글이 문제 없이 디스플레이 된다. 그러나, command로 mySQL client 접속해보면, 한글이 깨지는 경우가 있다. 그럴 때, set names euckr 이라고 하면, 테이블의 데이터가 정상으로 디스플레이된다. 물론, 그 상태에서 update 문을 실행해도 이상없이 업데이트가 수행된다.