작은 프로젝트를 진행할 때도 메시지 브로커는 아키텍처에 따라 필요한 경우가 종종 있습니다. 이때 Apache kafka를 쓰자니 배보다 배꼽이 커지고, 클라우드의 메시지 큐(AWS SQS 등)를 사용하자니 벤더 락인(vendor lock-in)이 우려될 때 Redis stream은 아주 좋은 대안이 됩니다. 혹시 kafka를 redis pub/sub과 비교하려 한다면 정확한 비교가 안되는데 토픽 개념은 유사하지만 redis pub/sub에는 소비자 그룹의 개념이 없기 때문입니다. ( stream에서 xread의 경우에는 소비자 그룹을 사용하지 않습니다. xgroupread로 접근하는게 맞습니다. 소비자 그룹의 개념이 들어가면서 메시지가 잘 도착했는지 확인이 가능합니다. 혹시 메시지 전달의 성공/실패/처리..
MySQL을 터미널에서 접속했을 때 현재 동작중인 쿼리를 보려면 아래와 같은 명령어를 사용합니다. MariaDB [(none)]> show processlist; +-------+----------------+-----------+------+---------+------+-------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +-------+----------------+-----------+------+---------+------+-------+------------------+----------+ | 14929 | newstyleseller | localhost..
쿼리를 날리고 설정된 타임아웃에 의해 Lost connection to MySQL server during query 에러가 출력되는 경우 워크벤치에 아래 설정을 통해 쉽게 해결 할 수 있다. Edit → Preferences → SQL Editor → DBMS connection read time out (in seconds): 600 괜히 DB 타임아웃 설정 값을 바꾸려고 애쓰지 말자. 사실 어차피 내부적으로는 로컬 타임아웃을 건드리고 있겠지만. :-)
Redis 데이터 타입에 대한 글은 인터넷에 널리고 널렸다. 당장 그 이론을 한번 더 언급하는 것은 괜한 비용 낭비로 생각되니 실전 운영에 필요한 기초 예제 몇 가지를 공유해본다. 이번 글에서는 List 와 Hash 에 대해 집중적으로 다룬다.List리스트 형태로 데이터를 관리할 때 용이하게 사용되는 데이터 타입이다. 데이터는 LPUSH, RPUSH 로 적재하고 LPOP, RPOP 으로 꺼낼 수 있다. 한편 조회는 LRANGE, LLEN 을 사용한다. 아래에서 데이터를 확인하며 구체적으로 알아보자.이러한 리스트가 있을 때 LPUSH, LPOP 은 배열의 좌측에 있는 데이터를 제어할 수 있다. 즉, LPUSH 로 새로운 데이터 8을 넣게 되면 아래와 같이 데이터가 들어간다. 이때 LPOP 도 마찬가지로 좌..
MySQL Client command-line에서 테이블이나 필드의 이름이 긴 경우 확인을 위한 명령어가 필요한 경우가 있습니다.예를 들어 테이블 이름이 기억나지 않는다면 show tables로 확인 할 테고, 필드의 이름은 desc로 확인 하겠죠? 일반 리눅스의 readline처럼 자동 완성 기능이 있다면 얼마나 편할까요?마침 필요한 기능이 정확하게 존재합니다. 바로 rehash를 사용하는 것인데요, 사용법은 여러가지가 존재합니다.Clinet 모드로 접속할 때 사용은 아래와 같습니다. $ mysql -u root -pxxxx --auto-rehash 혹은 my.cnf 파일을 수정 (이 방법은 매번 --auto-rehash를 입력해야 하는 불편함을 없애주겠네요) [mysql] auto-rehash Cli..
테이블의 컬럼 값을 변경할때 update문을 사용합니다. 일단 친절한 help를 살펴보면 아래와 같습니다. MariaDB [oops]> help update; Name: 'UPDATE' Description: Syntax: Single-table syntax: UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] Multiple-table syntax: UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1..
테이블 생성시에 INT(11) 등으로 괄호 옵션을 주는 경우가 있다. 주변을 보면 의미를 제대로 알지 못하고 쓰는 경우가 종종 있다. 보통은 괄호안의 숫자는 자리수를 나타내는 것으로 많이 알고 있는데, 사실은 그렇지 않다. 실제 의미를 위해서는 zerofill 이라는 옵션과 함께 사용되어야 한다. 그렇지 않은 경우에는 무의미하다. zerofill은 말 그대로 0을 채우라는 의미고, 즉 괄호안의 숫자만큼 빈칸을 0으로 채우라는 의미다. 일단 테스트를 위해 아래와 같은 테이블을 생성한다. create table TEST(seq INT(11) not null auto_increment primary key, \ oops1_fillzero INT(1) zerofill, \ oops1_nozero INT(1) ,..
하아..별걸로 다 삽질을 하네.그래도 건진게 있으니까 한시름 놓습니다. 오늘 이슈는 localhost 로의 mysql 접속입니다. $ mysql -uroot -ptest ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES) 일단 패스워드가 틀렸다는 에러인데.. (test라는 패스워드는 블로깅을 위한 샘플임) "root가 접속을 하는데 패스워드가 틀렸다" 입니다. 당연한 이야기죠? 근데 외부에서 접속할때 항상 test라는 패스워드를 써왔는데 이게 뭔가 싶었죠, 검색을 해보면 패스워드 초기화를 위해 mysqld를 skip-grant-tables 옵션을 써서 다시 올리고 패스워드를 재설정 하라는 내용밖에 안보입니다..
종종 db에 저장되어 있는 unixtime을 풀어서 봐야 하는 경우가 있습니다.이럴때 사용하는 mysql 명령어를 살펴봅니다. 우선 현재 시간을 알아볼까요? mysql> select now(); +---------------------+ | now() | +---------------------+ | 2014-03-20 16:08:04 | +---------------------+ 1 row in set (0.00 sec) mysql> 이번에는 1395299569 와 같은 형태의 UTC 시간을 변경해서 봅니다. mysql> select from_unixtime(1395299569); +---------------------------+ | from_unixtime(1395299569) | +-------..
아래와 같은 데이터가 있습니다. mysql> select sipv4,timestamp,bytes from oops; +-----------+-----------+---------+ | sipv4 | timestamp | bytes | +-----------+-----------+---------+ | 171115273 | 9 | 40 | | 169152406 | 10 | 2772021 | | 169152406 | 10 | 142312 | | 174325910 | 10 | 51029 | | 169152406 | 11 | 1254172 | | 171115273 | 15 | 3192 | | 169152406 | 14 | 132 | | 169152406 | 15 | 11516 | | 171115273 | 16 ..
mysql 에서 결과 컬럼을 합쳐야 할 필요가 있을때가 종종 있습니다.예를들어 아래와 같은 테이블이 있습니다. mysql> select * from new_table; +------+------+-------+-------+-------+ | num | name | descr | sipv4 | dipv4 | +------+------+-------+-------+-------+ | 1 | oops | test | 111 | 222 | | 2 | oops | test | 111 | 333 | | 2 | oops | test | 123 | 122 | | 2 | oops | test | 148 | 843 | +------+------+-------+-------+-------+ 4 rows in set (0...
아래와 같이 파일을 통해 등록할 수도 있고, MySQL 프롬포트에서 등록할 수도 있습니다. $ cat hello.sql delimiter // // create procedure hello() begin select 'hello'; end // $ mysql -u oops -poops test call hello(); +-------+ | hello | +-------+ | hello | +-------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> 이미 동일한 이름의 프로시져가 있는 경우를 대비해서 기존 프로시져 함수명을 삭제하고 등록하는..
MySQL을 사용하다보면 간혹 외부 SQL script file 을 읽어와서 실행하면 편한 경우가 있습니다.(새로운 Query 를 설계하고 즉시 테스트 할때 용이하지요, notepad Ctrl+c, Ctrl+v 신공보다는..^^;) 이럴때는 아래와 같은 명령어를 사용하도록 합니다. mysql> source /bin/test.sql # SQL query문이 있는 파일의 경로 입니다. MySQL 을 접속한 위치가 test.sql 의 위치와 같다면, 아래와 같이 절대경로를 입력하지 않아도 상관없습니다. mysql> source test.sql 혹은 source 대신 \. 를 사용하셔도 됩니다. mysql> \. /bin/test.sql 꼭 MySQL 에 접속해야만 Query 를 날릴수 있는것도 아닙니다.아래와..
필요할때 찾아보면 유용하겠습니다. http://ss64.com/ora/
물리적으로 다른 테이블 다수의 테이블(스키마는 같은)에 동일한 컬럼을 추가할 일이 생겼습니다, 각 테이블에는 약 30만건 이상의 레코드가 들어있고.. 스키마는 20개 정도의 가지각색의 type을 갖는 컬럼들로 이루어져 있는데.. 과연.. 모든 테이블에 컬럼을 추가하는게 DB에 무리가 없을까요..(물론 추가하려는 컬럼의 default 값은 null이다, 만약 추가하려는 컬럼의 default 값이 특정한 값이라면, table modify시에 update가 이루어질 것으므로 부하는 예상 가능하지만..) 테스트 사양cpu 2.66GHzmemory 2G.. 테이블 하나 당 약 3~5초가량 소요 됩니다..테이블의 개수를 n개(수백개가 될 수도 있음)라고 생각했을때...현재로서 컬럼을 무턱대고 추가하는건 미친짓입니다..
컬럼 추가alter table 테이블_이름 add 컬럼_이름 타입 ; mysql> desc new_table; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | title | varchar(50) | YES | | NULL | | | descr | varchar(128) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> mysql..
테이블 이름 변경alter table 현재_테이블_이름 rename 새로운_테이블_이름; mysql> show tables; +----------------+ | Tables_in_oops | +----------------+ | old_table | +----------------+ 1 row in set (0.00 sec) mysql> mysql> alter table old_table rename new_table; Query OK, 0 rows affected (0.00 sec) mysql> mysql> show tables; +----------------+ | Tables_in_oops | +----------------+ | new_table | +----------------+ 1 row ..
index 정보 보기show index from 테이블_이름; mysql> show index from 20121019_log; +--------------------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +--------------------------..
- Total
- Today
- Yesterday