위도와 경도를 표기하기 위해서 DB Column을 만드는 중 알게 된 내용을 정리해 본다.

정확한 내용이 아닐 수도 있으니 참고 사항으로만 보길...


MySQL에서 float, double 타입을 Create할 때 float(length, decimals) 와 같은 형식으로 만든다.

여기서 length와 decimal이 의미하는 내용이 정확히 무엇인지 알기 위해 구글링을 했지만, 매뉴얼에나 나올법한 알아듣지 못할 소리를 번역기로 돌린 듯한 글만 있...


그래서 좀더 검색해 보니 얻어 걸린 글에서 아래와 같은 내용이 보였다.




https://dev.mysql.com/doc/refman/5.0/en/floating-point-types.html


M(length)는 전체 길이 즉 정수 부분과 소수 부분을 합친 길이를 가리키며, D(Decimals)는 소수 부분을 가리킨다는 말이다.

예제에서도 나온 것처럼 float(7,4)로 Column을 정의 해 두었고 이 Column에 999.00009란 값이 들어가면 전체 길이가 8이고 소수 부분이 5 이므로 00009란 소수 부분이 0001로 바뀌게 된다.


덧. 아무런 의미 없는 매뉴얼 같은 내용을 이해도 하지 못하면서 블로그에 올려두는 것도, 수많은 정보로 제대로 된 지식을 못 찾게 만드는 주범인것 같기도 하다.



저작자 표시 비영리 변경 금지
신고

'Program! > MySQL' 카테고리의 다른 글

MySQL의 Float, Double에서 Length와 Decimal이 의미하는 것...  (0) 2015.06.02

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret

MySQL에 DateTime 필드에 값이 없을 경우 기본 값으로 "0000-00-00 00:00:00" 들어가는 경우가 있다.

이럴 경우 쿼리해 온 값이 Java의 Model 객체에 Setter로 값을 넣는 과정에서 에러가 발생한다.

에러 메시지는 다음과 같다.


"Cannot convert value '0000-00-00 00:00:00' from column 4 to TIMESTAMP"


뭐 '0000-00-00 00:00:00' 값은 timestamp 값으로 바꿀 수 없다는 메시지 같은데...

이럴 경우 어떻게 해결해야 하나 고민하다가 구글링을 통해 알게 된 내용을 정리한다.

보통 Model 객체의 Setter를 아래와 같이 작성하게 된다.



setter에서 Date 객체로 받아야 하는데 값을 넘겨줄 수 없기에 이런 경우에는 DB 접속 옵션을 아래처럼 바꾸어 주면 된다.


jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull


zeroDateTime일 경우 null을 반환하라는 의미같은데

위와 같이 옵션을 설정한 후 디버깅을 해 보면 zeroDateTime일 경우 setter에 실제로 null 값이 들어오게 된다.


참고 : http://stackoverflow.com/questions/1363527/cannot-convert-0000-00-00-000000-to-timestamp

저작자 표시 비영리 변경 금지
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret

MySQL Replication

Server/DB 2013.05.15 10:39

Replication을 한개의 물리적 서버에서 테스트 하기 위해 설치할 필요가 있었다.

이를 위해 다음과 같은 셋팅으로 설정하였는데, 자료 아카이빙을 위해 정리해 본다.


기본적인 것은 아래와 같다.


1. 한개의 서버에 두개의 MySQL을 설치한다.

2. 각각 다른 Port를 사용한다.

3. Master, Slave 설정을 하고 Replication을 시작한다.


자세하게 기술하면 아래와 같다.


1. configure를 통해 master mysql 설치 디렉토리를 지정한다.


ex)

./configure --prefix=/설치디렉토리/mysql_master --with-charset=utf8 --enable-assembler


2. make, make install을 통해 설치한다.


3. master db가 설치가 완료 되었으면, slave db를 설치한다.


ex)

./configure --prefix=/설치 디렉토리/mysql_slave --with-charset=utf8 --enable-assembler


4. master db의 config 설정을 위해 mysql_master 디렉토리 아래 my.cnf 파일을 다음과 같이 만든다. (필요한 내용만 기재)


[mysqld]

datadir=/설치디렉토리/mysql_master/var

socket=/설치디렉토리/mysql_master/tmp/mysql.sock

server-id=1

log-bin=/설치디렉토리/mysql_master/var/replication.log

binlog-do-db = xe

port=3306


5. slave db의 config 설정을 위해 mysql_slave 디렉토리 아래 my.cnf 파일을 다음과 같이 만든다. (필요한 내용만 기재)


[mysqld]

datadir=/home1/irteam/db/mysql_slave/var

socket=/home1/irteam/db/mysql_slave/tmp/mysql.sock

server-id=2

port=3307


7. 각 서버를 기동한다.


8. Master와 Slave의 상태를 본다.


ex)

./mysql -uroot --socket=/설치디렉토리/mysql_master/tmp/mysql.sock


mysql> show master status;

+--------------------+----------+--------------+------------------+

| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+--------------------+----------+--------------+------------------+

| replication.000002 |   346615 | xe           |                  |

+--------------------+----------+--------------+------------------+

1 row in set (0.00 sec)


./mysql -uroot -p --socket=/설치디렉토리/mysql_slave/tmp/mysql.sock


mysql> show slave status \G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 127.0.0.1

                  Master_User: replmon

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: replication.000002

          Read_Master_Log_Pos: 346615

               Relay_Log_File: dev-xemysql-relay-bin.001029

                Relay_Log_Pos: 253

        Relay_Master_Log_File: replication.000002

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB: 

          Replicate_Ignore_DB: 

           Replicate_Do_Table: 

       Replicate_Ignore_Table: 

      Replicate_Wild_Do_Table: 

  Replicate_Wild_Ignore_Table: 

                   Last_Errno: 0

                   Last_Error: 

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 346615

              Relay_Log_Space: 561

              Until_Condition: None

               Until_Log_File: 

                Until_Log_Pos: 0

           Master_SSL_Allowed: No

           Master_SSL_CA_File: 

           Master_SSL_CA_Path: 

              Master_SSL_Cert: 

            Master_SSL_Cipher: 

               Master_SSL_Key: 

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error: 

               Last_SQL_Errno: 0

               Last_SQL_Error: 

1 row in set (0.00 sec)


9. Slave 서버에서 master의 위치정보를 변경하고자 할 경우에는 다음과 같은 명령어를 날린다.


change master to master_host='127.0.0.1' , master_port = 3306, master_user='replmon', master_password='12345';





저작자 표시 비영리 변경 금지
신고

'Server > DB' 카테고리의 다른 글

MySQL Replication  (0) 2013.05.15
MySQL Erro Code 28이 리턴되는 경우  (2) 2009.04.08
MySQL의 백업 및 복구  (2) 2008.12.15
MySQL에서 대소문자 구별해서 쿼리하기  (0) 2007.05.15
Z와 S의 차이...  (2) 2007.02.14
MySQL에서 변수의 사용...  (2) 2006.12.18

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
XE의 mysqli 환경 가운데서 발생하는 오류를 잡기 위해 테스트 하다가 설치 후 초기 화면 조차 보이지 않는 문제를 당면하게 되었다.

맞닥뜨리게 된 에러는 다음과 같다.


Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 4294967296 bytes) in .../classes/db/DBMysqli.class.php on line 234


4G 메모리 할당을 하다가 오류가 발생했다는 오류였다.

대부분 memeory 할당 오류는 php.ini 또는 ini_set을 통해 해결할 수 있다는 답변 뿐이였다.

예를 들어 http://www.xpressengine.com/qna/20836943 이런 식 ^^;;


그런데 php.ini에서 메모리를 4G 이상 5G를 줘도 문제가 발생했고

메모리의 제한이 없도록 -1을 준 경우에는 서버의 메모리를 다 쓰게 되어서 서버가 멈추는 현상까지 벌어지게 되었다.


따라서 처음에는 XE의 문제인줄 알고 Source code를 수정하고자 Debuging을 열심히 하였지만 도저히 방법이 보이지 않았다.


그러다가 4G라는 크기에 눈이 가게 되었고, 4G는 MySQL의 longtext type의 크기라는 것에 시선이 고정되게 되었다.

이를 기초로 구글링을 해보니 어떤 검색 결과에서는


CAST(`modules`.`content` AS char(20000))


와 같이 longtext type의 column의 type cast를 하라는 말이 나와 있었다.

물론 위와 같이 하니까 문제 없이 해결은 되었지만...

길이가 다르니 내용까지 짤려서 보일 듯 싶어서 왠지 깨름직 했다.


왠지 해결책은 매뉴얼에 있을 듯 싶어 php 매뉴얼을 뒤졌더니


http://kr2.php.net/manual/en/mysqli-stmt.bind-result.php#101543


위와 같이 똑같은 증상을 호소하는 사람이 있었다.

해당 내용에 연결된 버그리포트에는 해당 내용이 버그가 아니며 mysql 버그로 보인다라는 말이 있었다.

따라서 php 재설치 시 다음과 같은 옵션으로 설치해 보면 된다고 했다.


--with-mysql=mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--enable-mysqlnd


mysqlnd로 구글링 해 보니 또한 다음과 같은 문서도 나오더라.


http://www.lovelgw.com/Blog/316


애초에 설치 시에는 옵션을


--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/bin/mysql_config \


와 같이 줬는데 mysqlnd로 옵션을 바꿔 설치하니 이상없이 동작을 하게 되었다.


하루종일 이 문제로 구글링 하고 디버깅 했는데 결국 해결을 하게 되어 한시름 놓을 수 있게 되었다.


신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
작업 서버에서 잘 되던 쿼리가 에러가 떨어졌다.
에러 코드 내용...

ERROR 1030 (HY000): Got error 28 from storage engine

1030 에러코드를 메뉴얼로 찾아보니 별다른 내용도 없고, 위 메시지랑 같은 이야기만... ^^;;

Error: 1030 SQLSTATE: HY000 (ER_GET_ERRNO)

Message: Got error %d from storage engine


그래서 사내 DBA분에게 물어보고 확인해 본 결과 28 에러코드는 다음과 같은 방법으로 찾는 것이라고 한다.

[xxxxxx bin]# ./perror 28
OS error code  28:  No space left on device

mysql이 설치된 디렉토리의 bin 디렉토리에서 perror라는 바이너리 파일을 실행하면 관련된 내용을 리턴해 준다.
위 내용은 디스크 공간이 부족하다는 말!!!

그래서 df -h로 해당 공간 확인하고 tmp 공간이 부족한 것을 확인한 다음, /tmp에서 $MYSQL_HOME/data/tmp로 변경을 해 준 후 mysql을 재시작 했더니 문제가 해결되었다.

신고

'Server > DB' 카테고리의 다른 글

MySQL Replication  (0) 2013.05.15
MySQL Erro Code 28이 리턴되는 경우  (2) 2009.04.08
MySQL의 백업 및 복구  (2) 2008.12.15
MySQL에서 대소문자 구별해서 쿼리하기  (0) 2007.05.15
Z와 S의 차이...  (2) 2007.02.14
MySQL에서 변수의 사용...  (2) 2006.12.18

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 저도 같은 에러로 고생하다 우연찮게 님의 글을 보고 해결했습니다...너무 너무 x 10000000 감사합니다...단점투성이인 인터넷의 장점이 이런거군요...님에게 신의가호가 있길 진심으로 기원합니다...하시는일 잘되시고 부자되시고 건강하시고 오래오래 사세요....제 블로그는 http://blog.naver.com/sdisys 입니다...인연이 된다면 소주한잔 ^^...행복하세요!!
secret
요즘은 MySQL Replication 기능을 이용해서 DB System을 구축하는 경우가 많다. 또한 MySQL DB를 사용하면서 백업은 보통 Replication Slave 단에 있는 백업 Server에서 별도로 받게 된다.
백업 서버에서 Dump로 받게 된 Data는 DML 쿼리로 된 text data이며, 이 데이터를 이용해서 신규 장비를 설치하던가, 아니면 기존 장비에 문제가 생겼을 시 복구를 하게 된다.

보통의 MySQL Replication 구성

보통의 MySQL Replication 구성


그런데 복구를 하더라도 Replication이란 문제로 인해 Master DB와 싱크를 맞추는 문제가 발생하게 된다.
따라서 백업 서버에서 백업을 받게 되는 경우, Master DB의 binary log의 포지션을 알아야지만 된다.
이럴 경우에는 다음과 같은 절차를 따라서 Dump를 받으면 된다.

/usr/local/mysql/bin/mysqldump -uroot -p --master-data=2  > /data/…/backup.sql

이 명령어 중에서 "--master-data=2" 옵션을 주게 되면 덤프 시점의 binary log의 포지션 정보가 같이 Dump 되게 된다.
Dump된 파일을 에디터로 열어보면 다음과 같은 내용이 나온다.

CHANGE MASTER TO MASTER_LOG_FILE='binary파일', MASTER_LOG_POS=포지션번호;

위 말은 binary파일의 포지션 번호 시점에서 백입이 이루어 졌다는 의미이다.
물론 binary 파일과 포지션은 복구하기 위한 중요한 내용이 되겠지만, 위와 같은 구성에서 복구를 하기 위해서는 조금 애매 보호한 감이 있다.
가령, Backup DB에서 Dump받은 파일을 Slave DB를 복구하기 위해 사용한다던가, 아니면 신규 Slave 장비가 와서 새로운 시스템을 구축할 시에는 Backup DB의 binary 파일명과 포지션은 별로 소용이 없기 때문이다.
따라서 이럴 때에는 다음과 같은 절차로 Master DB의 binary 파일과 포지션을 알아낼 수 있다.

1. Backup DB에서 포지션이 속한 바이너리 로그를 sql 파일로 export 한다. 사용 툴은 mysqlbinlog이다.

/usr/local/mysql/bin/mysqlbinlog --start-datetime="2008-12-15 02:00:00" --stop-datetime='2008-12-15 02:30:00' /data/mysql_data/binary파일 > binlog.sql

2. Master DB에서도 위 방법대로 바이너리 로그를 sql 파일로 export 한다.

/usr/local/mysql/bin/mysqlbinlog --start-datetime="2008-12-15 02:00:00" --stop-datetime='2008-12-15 02:30:00' /data/mysql_data/binary파일 > binlog.sql

3. Backup DB에서 export한 sql 파일을 에디터로 열어서 확인해 본다.

# at 576856551
#060824  2:18:30 server id 1  log_pos 576856551     Intvar
SET INSERT_ID=136;
# at 576856579
#060824  2:18:30 server id 1  log_pos 576856579     Query   thread_id=16587969  exec_time=16157 error_code=0
SET TIMESTAMP=1156353510;

...

# at 576856919

최초에 Backup DB에서 Dump받은 파일에 기록된 포지션 정보를 찾는다.

4. Master DB에서 export 한 sql 파일을 에디터로 열어서 동일한 포지션을 찾는다.

# at 576375776
#060824  2:18:30 server id 1  log_pos 576375776         Intvar
SET INSERT_ID=136;
# at 576375804
#060824  2:18:30 server id 1  log_pos 576375804         Query   thread_id=16587969      exec_time=0     error_code=0
SET TIMESTAMP=1156353510;


Backup DB에서 해당 포지션에 기록된 TIMESTAMP값과 동일한 정보를 Master DB에서 export한 sql 파일에서 찾는다.
위의 경우에는 576375776이 포지션 번호가 된다.

5. 최초에 Dump 받은 Dump Data의 바이너리 파일과 포지션을 수정해 준다.

CHANGE MASTER TO MASTER_LOG_FILE='마스터DB의 binary파일', MASTER_LOG_POS=576375776;

위와 같이 되었다면, Dump 받은 파일은 언제라도 Master DB에 붙여서 replication을 동기화 시킬 수 있는 준비가 된 상태이다.
만일 새로운 장비를 들여와서 Dump Data로 복구를 했다면, 위 명령어를 내린 후 slave를 start 시키면, Master DB의 해당 포지션 부터 sync를 맞춰가기 시작한다.
Master DB의 포지션을 모두 다 따라갔다고 판단되면 Slave DB를 서비스에 투입시키면 끝이다.




신고

'Server > DB' 카테고리의 다른 글

MySQL Replication  (0) 2013.05.15
MySQL Erro Code 28이 리턴되는 경우  (2) 2009.04.08
MySQL의 백업 및 복구  (2) 2008.12.15
MySQL에서 대소문자 구별해서 쿼리하기  (0) 2007.05.15
Z와 S의 차이...  (2) 2007.02.14
MySQL에서 변수의 사용...  (2) 2006.12.18

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 좋은글 출처를 표시하고 블로그에 담아갑니다. ^^
  2. 좋은글 잘 보고 갑니다. ^^
    블로그에 퍼가겠습니다. 당연히 출처도 표시합니다.
    감사합니다.
secret
[행사 홈페이지]

행사는 다음과 같은 순서로 진행 되었다.

  • 13:00 ~ 13:15 : 오프닝 - LDS(리눅스데이타시스템)
  • 13:15 ~ 14:00 : [세션1] Overview of MySQL HA Solutions (Jimmy Guerrero -Senior Product Manager)
  • 14:00 ~ 14:45 : [세션2] Web 2.0 and Emerging web technologies (Brian Acker - Director of Architecture) 
  • 14:45 ~ 15:05 : Coffee Break
  • 15:05 ~ 15:50 : [세션3] Migrating from Oracle to MySQL (Jimmy Guerrero -Senior Product Manager)
  • 15:50 ~ 16:35 : [세션4] MySQL 5.1 in depth (Brian Acker - Director of Architecture) 
  • 16:35 ~ 16:45 : 휴식
  • 16:45 ~ 17:30 : [세션5] MySQL Enterprise (Daniel Saito - Sales Engineering )  
  • 17:30 ~ 17:50 : 클로징 - LDS(리눅스데이타시스템)

Conference 장 전경

Conference 장 전경


일전에 NHN Conference를 했던 메리어트 호텔의 5층에서 진행 되었다. 인원이 아주 많지 않은 관계로 5층의 체리홀만 빌려서 했다.
하지만 체리홀이 꽉 차 넘칠 정도로, 규모에 비해서는 꽤 많은 인원이 모였다.
각종 협력사들도 모인 듯 했지만, 장비에 그다지 관심이 없어서 ^^

Conference 장 내부

Conference 장 내부


Conference장 내부의 모습이다.

리시버와 교재의 모습

리시버와 교재의 모습


다행히도 번역을 위한 리시버가 준비되어 있었다. ㅎㅎ
컨퍼런스의 대부분이 영어로 진행 되어서 리시버 없이는 조금 힘들었을 듯 ^^
하지만, 역시나 오늘도 영어를 잘하는 사람들이 너도 나도 영어로 질문하느라고 조금 난감 -.-;;

MySQL AB 부사장

MySQL AB 부사장


이름은 잘 기억이 ^^;;

LDS 사장님

LDS 사장님


LDS 사장님...

Brian Aker

Brian Aker


강연을 해 주신 Brian Aker님... MySQL의 기술이사라고 얼핏 들었던 기억이...
이 외에도 Jimmy Guerrero님도 강연을 해 주셨는데 사진을 못 찍었다.

강연의 내용들이 별로 유익하지 못할 듯 예상을 했는데, 뭐 짧은 시간에 비해 나름 많은 내용들을 다룬 것 같긴 하다.
깊게 다루지는 못해도 5.1대에서 일어날 많은 변화를 예상할 수 있었다.
5.1이 가을 쯤에 베타를 뗀다고 하던데, 자꾸 미뤄지는 모습은 보기 좋지 않지만, 그래도 얼른 5.1 정식버젼이 나오길 바란다.

한가지 아쉬운 점은 12:20분까지 참석하라는 문자를 받고 갔는데 점심 제공이 안되었다는 것이다. 아침을 먹고 점심을 또 먹기에 참으로 애매 모호한 시간이라서 Conference 끝날 때까지 배고픈 상태로 참고 기다렸는데 -.-;;
제공된 것은 다만 커피 한잔 -.-;;

그리고 마지막으로 경품 추첨이 있었다.
내심 기대 했는데, 역시나 당첨은 -.-;; 다만 선착순 100명에게 주는 경품(조그만 시계)를 받아 왔다. 중국산 같긴 한데 아들놈이 좋아하니 다행이다 ^^
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

트랙백  2 , 댓글이 없습니다.
secret
사용자 삽입 이미지

MySQL Conference


MySQL 본사(부사장 인듯...) 직원이 직접 와서 강연하는 컨퍼런스가 열리네요.
뭐 영어에 약점이 있어서 이번에도 많이 못 알아 듣고 오겠지만, 일단 사전등록 해 놨습니다. ㅎㅎ
그리고 팀장님께 승인 메일을 ^^
일단 저질러 놓고 보는 거죠.. ㅠㅠ

좋은 경험 됬으면 하는 바램이 있습니다. ^^

아... 사전등록 url은 http://www.linuxdata.co.kr/mysql_event/index.html 입니다.
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
[기사]

뭐 저만 이번에 알게 된건가요?
어째든 보니까... 최근에 발표된거 같은데... innoDB가 오라클에 먹히고 나서 MySQL의 트랜젝션 지원 디비를 자체 개발한다고 했는데, 그 타입이 포함된 디비가 나온 듯 합니다.
성능이 얼마나 좋아졌을지(또는 나빠졌을지) 모르겠는데...
뭐 기능상으로는 이노디비보다 좋게 만든다고 들었으니 ^^

아직은 불안한 감이 좀 있고 beta라도 되면 좀 깔아서 테스트 좀 해 봐야 겠습니다.
다운로드 사이트는 이곳에서 받으면 될 듯 ^^
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
100만건이 조금 넘는 MyISAM 테이블이 있었다.
주소록 그룹 관련 테이블인데, 유저당 그룹 이름이 중복될 수 없었다.
그런데 기존에는 nhn과 NHN이 서로 같은 것이라고 생각해서 디비 내에서 대소문자가 틀린 경우에는 새로운 그룹을 추가하거나 기존 그룹의 이름을 수정할 수 없었다.

뭐 간단하게 BINARY로 해당 컬럼의 속성을 변경해도 되겠지만...
innoDB도 아닌 MyISAM 테이블에 100만건이니 ALTER 한번만 쳐도 수시간은 잡아 먹을 듯 했다.
그래서 메뉴얼을 뒤졌더니... 역시나 ^^


BINARY

BINARY


BINARY라는 Cast Function을 쓰면 되는 것이었다.
복잡하게 해결해야 만 될것같은 문제를 간단하게 해결할 수 있게 되었다.
역시 모든 문제의 해결책은 메뉴얼이다.
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
mssql?

mssql?


에러는 php인데... 디비 접속은 mssql이네...
궁합을 희한하게 한건지...
개발자가 모르고 mysql을 mssql이라고 오타 친것인지... -.-;;
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  5개가 달렸습니다.
  1. 세션 초기화 되면서 자동 로그아웃 되더니...
    이젠 비밀번호도 틀렸다고 나오네 -.-;;
  2. 비밀댓글입니다
  3. 내부 핵심 코어쪽에서 MSSQL을 일부 사용하고 있습니다. 데이터베이스가 백업본을 포함하여 2-3중 구조로 되어있는터라... ^^;
secret
MySQL에서 테이블 컬럼 분석할 일이 생겨서...
일전에 phpMyAdmin에서 하던 명령을 콘솔에서 날려 볼려고 하였다.
대충 기억나는 명령어로는 ANAL... 뭐라고 하는거 같았는데 라며...
메뉴얼을 뒤적였다.
다음과 같은 명령어가 나오더군...
ANALYZE

ANALYZE


이게 맞나보다 하고 날렸더니 -.-;;
왜 안되는거지... -.-;;
내가 예상했던 결과하고 틀리게 나오네 -.-;;
이곳 저곳 한참을 찾은 끝에 알아 낸 명령어는... -.-;;
ANALYSE

ANALYSE

ANALYSE

ANALYSE

어...
ANALYZE하고 ANALYSE하고 뭐가 틀린거야?
얼른 네이버 사전을 찾아 봤다

analyze

an·a·lyze vt.
1물리·화학분석하다, 분해하다;【수학해석하다
   analyze+++analyze something into its elements 어떤 요소분해[분석]하다
   Water can be analyzed into oxygen and hydrogen. 물은 산소수소분해 있다.

2 분석적으로 검토하다, 분석하다
3문법】 <(文)> 해부하다, 분석하다;검토하다
4 정신 분석하다
anlysis n.;analtic a.
--------------------------------------------------------------------------------
analyse

an·a·lyse vt. 《》 =ANALYZE

다른건가? -.-;;
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 세번째줄의 ANAL만 (그것도 볼드체로) 쾅!쾅!쾅!하면서 눈에 들어오네요 -0-
secret
보통 MySQL에서 변수를 쓰려면 다음과 같이 하면 된다.

SET @yesterday := DATE_ADD(DATE(CURDATE()), INTERVAL -1 DAY);


또한 쿼리 내에서 직접 변수에 값을 담으려면 다음과 같이 하면 된다.

SELECT column
INTO @columnVar ...


이런식으로 쿼리만을 모아서 프로그램 짜듯이 procedure하게 짜나간 후 sql파일로 저장해서 사용한다.

여지껏 이렇게 만들어서 사용하고 있는데...
문제가 하나 생겼다
SELECT해온 컬럼값이 없을 경우 에러를 내 뱉으면서 다음 내용으로 넘어가질 않는 것이다.

MYSQL 문법을 뒤져서 겨우 겨우 찾아냈다.

SELECT @columnVar := column ...


이런식으로 하면 에러가 안나면서 변수에 값을 담을 수 있다.
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 지난번 스쿨에 올려주셨을 때, 저 문법이 가능한 버젼을 여쭤봤는데, 혹시 알고계시다면, 간단히 커멘트 부탁드립니다.
    mysql 메뉴얼이 좀 복잡하잖아여. ㅋㅋ
    번거롭더라도 스쿨에도 꼭 달아주시면 같이 도움이 될 것 같구요.
    가능하시다면, preparedstatment 와의 연계도 언급하셨는데, 마찬가지로 버젼정보를 부탁드릴께요.

    제가 너무 이기적인 거 같아서 죄송합니다. ^^;;
    꾸벅~!
    • 버전은 정확히 모르겠구요.
      4.1 버전에서 현재 사용중입니다.
      그리고 preparedstatment라는 것은 db 단에서 어떻게 처리되는지는 모르겠고 php api 중에 mysqli 과련 함수들이 있습니다.
      그것을 사용하면 전처리 작동을 하기 때문에 같은 쿼리에 대해서는 속도가 증가하는 것으로 알고 있습니다.
secret
이전에는... 튜닝이다 속도다 뭐다 해서...
mysql을 일일히 컴파일 해서 깔았다.
제일 편한 방법은 rpm인줄 알았었다.
오늘 더 편한 방법을 알아냈다.
binary 설치법 -.-;;;;;;

tar -xvzf "mysql binary 파일"
mv "mysql 풀린 디렉토리" "원하는 mysql 설치디렉토리"

이상 끝 -.-;;
신고

'Program?' 카테고리의 다른 글

오페라 첫 인상은 괜찮네요 ㅎ  (2) 2007.03.15
HTML 개발자?  (0) 2006.12.08
MySQL 한방에 깔기...  (6) 2006.11.24
갑갑하다... -.-;;  (1) 2006.11.23
얼마나 배워야 하나요?  (2) 2006.11.22
다음 3.4 ID에 대한 나의 생각...  (1) 2006.11.17

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  6개가 달렸습니다.
  1. rpm의 역할이 저기 1. 압축 풀기, 2. 옮기기, 3. 옮긴파일 구분해내서 삭제하기 인데, 저러면 3번 역할을 수작업으로 관리가 쉽지 않을 듯 보이네요. :)
  2. oseb//그런거였나요? 아... 나는 왜 그동안... 그렇게 많이 깔면서도 몰랐을까요 -.-;;
  3. 호스팅업체에 살고있다면 안해도 되는 것이지요? 제 계정의 mysql이 이미 있던데.. 많이 어려워 보이더군요. +_+
  4. 서버 돌리시나용~? ^^
secret
음... 안올릴려다가.. ㅋ
그냥 올립니다. ^^
제목에 허접이라고 달려 있으니 딴지는 반사.. ^^

우선 ERD처럼 만든 다음 CREATE 쿼리 만드는 것은 EXPORT로 하면 쉬운데..
현재 돌고 있는 디비를 ERD처럼 만드는 것은 해보질 않아서..
조금 해멨습니다. ^^;;
다음과 같이 하면 됩니다.

1. DB Designer를 설치합니다. ^^
없으면... http://down.clubbox.co.kr/studyweb/cnr1 에서 다운로드..
이거 클럽박스 링크이니.. 다운로드가 별로 없으면... 삭제 되니 그 이후에는 알아서들 구하시길...(아마도 GPL이니.. 라이센스 문제는 없을 듯..)

2. File > New 해서 빈 문서 하나를 만듭니다.

3. Database > Reverse Engineering 합니다.

4. 접속하고자 하는 디비를 선택합니다. 접속하고자 하는 디비가 없을 경우에는 New Database Connection을 통해 새롭게 커넥션을 만듭니다.

5. 옵션 설정하고... Execute 합니다. ^^;

6. 그럼 화면에 ERD 처럼 죽 뜹니다.

7. 저장합니다.. ㅋ 이미 사용해 보신 분은 아시겠지만 XML 형태로 저장됩니다.


이상 허접팁이었습니다.
언제나 허접한 체리필터.. ^^;;
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

트랙백이 하나이고 , 댓글  2개가 달렸습니다.
  1. 크허허허. 디비디자이너를 쓰고 계시다니.. 갑자기 마구 반갑습니다. ㅜㅡ
    • 앗... 상용에서 안쓰고요..
      전에 잠깐... 테스트 용도로 해보기만 한거에요 ^^;;
      지금은 ERWin이나 SyBase의 PowerDesigner를 씁니다. ^^
secret
이메일이 들어가 있는 필드를 검색하는 부분이 있었다.
결과는 뒤에 '@naver.com'과 같은 부분을 제하고 보여주는 것이였는데...
아무 생각없이...

"email LIKE '%$searchWord%' 라고 했더니... 바로 QA 팀에 걸렸다 ㅎㅎ

n, a, v, e, r, ., c, o, m 중 아무 글자로나 검색하면...
모든 내용이 다 나오게 되니 말이다 ㅎㅎ

그래서 MySQL 메뉴얼 찾아서 검색해보니... SUBSTRING_INDEX 라는 좋은 놈이 있더라...

SELECT email FROM table
WHERE SUBSTRING_INDEX(eamil, '@', 1) LIKE '%$searchWord%';
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret