[Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe Statement:

리눅스/MySQL|2015. 1. 16. 11:43
반응형

[Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is unsafe Statement:  

 

위의 메세지...

 

Set Session binlog_format='MIXED';  를 적용

 

또는

 

my.cnf 에서

binlog_format=mixed 를 설정


[출처] 아이구이런 | 조아 (http://blog.naver.com/i92run2k/50174224969)

반응형

댓글()

데이타를 임의 순서로 검색하되 특정 값만 가져오는 쿼리

리눅스/MySQL|2015. 1. 16. 11:43
반응형

mysql> SELECT * FROM datas WHERE name = '$a' AND type = ( SELECT type FROM datas WHERE name = '$a' AND type IN('A','B','O') ORDER BY type ASC LIMIT 1 )


설명 : datas 테이블에서 name 값이 $a 이며, type 이 A 나 B 나 O 로 된것만 select 하는데

         그중에서도 먼저 type 이 A 인 데이타가 있으면 A 인 데이타 출력,

         없으면 B 데이타 출력,

         없으면 O 데이타를 출력한다.

반응형

댓글()

MySQL 중복 데이터 제거 (NOT IN)

리눅스/MySQL|2015. 1. 16. 11:42
반응형

table_a(A)

 num

va

 1

 2

 3

 4

 5

 6


과 같은 데이터를(B)

 num

va 

 1

 2

 4

와 같이 중복된 값을 삭제하고 싶을때가 생기게 마련이다.


  1. 우선 값을 삭제하지 않고 원하는 결과가 나오는 쿼리를 짜 보는것이다.
    어떻게 하면 (B)와 같은 값을 도출해 낼 수 있을까?어떻게 하면 (B)와 같은 값을 도출해 낼 수 있을까?

    SELECT MIN(num),va FROM table_a GROUP BY va 


     MIN(num)

    va 

     1

     2

     4



  2. 즉 num이 1,2,4를 제외한 나머지를 삭제하는 것이다.

    SELECT MIN(num) FROM table_a GROUP BY va 


     MIN(num)

     1

     2

     4


  3. num 1,2,4를 제외한 나머지를 삭제해 보자.
    이때 사용되는 것이 서브쿼리와 함께 NOT IN이다. 포함된 것이 아닌 이라고 해야 할까? 반대로 포함된것을 지우겠다면 IN을 사용하면 될 것이다.

    DELETE FROM table_a WHERE

    num NOT IN (SELECT MIN(num) FROM table_a GROUP BY va)


    말로 풀어보자면 table_a에 num값이 MIN(num)값을 제외한 나머지를 삭제하라는 것이다.


  4. 하지만 이대로 한다면 에러가 발생할 것이다.
    Yon can't specify target table.... 어쩌구 저쩌구....
    이는 mysql에서는 서브쿼리의 from과, delete 되는 from을 같게 사용할 수 없는 룰 때문이다.
    이를 위한 꼼수는...

    DELETE FROM table_a WHERE

    num NOT IN (SELECT * FROM (SELECT MIN(num) FROM table_a GROUP BY va) AS temp)


    와 같이 서브쿼리로 한번 더 묶어서 별칭으로 지정해 주면 문제 해결...

     

 

[출처] MySQL 중복 데이터 제거 (NOT IN)|작성자 닌자 (http://ninja099.blog.me/60159002192)

반응형

댓글()

select 할때 특정 필드값 우선 순위 정하기

리눅스/MySQL|2015. 1. 16. 11:42
반응형
mysql> select * from sysdocu where user='sawon'
  order by CASE user 
  when 'superman' then 1
  when 'superwoman' then 2
  when 'superbaby' then 3
  else 4
  END;

[설명]
sysdocu 테이블에서 user 필드가 sawon 인것만 검색합니다.
순서는 superman 값이 1순위,
superwoman 값이 2순위,
superbaby 값이 3순위로 출력하고
나머지는 모두 4순위로 아래 출력 되게 합니다.


반응형

댓글()

Warning: Using a password on the command line interface can be insecure. 메세지 안보이게 하기

리눅스/MySQL|2015. 1. 16. 11:41
반응형

MySQL 5.6 버전부터 mysqldump 명령시 패스워드를 같이 명령줄에 입력하면 
패스워드 노출 위험성에 대한 경고 문구가 뜨게 됩니다.

 

# mysqldump -u root -p"1234" sysdocu > sysdocu.sql
Warning: Using a password on the command line interface can be insecure.

 

이 메세지 출력을 원하지 않을 경우 아래와 같이 설정하시면 됩니다.
(사용자 계정 및 비밀번호를 미리 입력해두고 호출하는 방법)

 

# mysql_config_editor set --login-path=autologin --host=localhost --user=root --password
Enter password: (패스워드를 한차례 입력해줍니다.)

 

이제 root 계정과 패스워드가 autologin 이라는 명칭으로 저장되었습니다.

 


[옵션 설명]
--login-path : 구분하기위한 문자를 입력합니다. 여기서는 autologin 이라고 했지만 헷갈리지 않도록 계정명과 동일하게 사용하셔도 됩니다.

--host : 접속하려는 DB서버의 호스트명 또는 IP를 입력합니다.
--user : 저장할 계정을 입력합니다.
--password : 패스워드값은 제외하고 옵션만 지정하여 실행합니다. 패스워드는 엔터를 친 다음에 입력해야 합니다.


* 삭제시

mysql_config_editor remove --login-path=autologin


* 설정 리스트 확인시

mysql_config_editor print --all


 

[사용방법]
# mysqldump --login-path=autologin sysdocu > sysdocu.sql

패스워드 경고 메세지 없이 작업이 완료됩니다.



반응형

댓글()

./mysql_install_db: line 37: use: command not found

리눅스/MySQL|2015. 1. 16. 11:41
반응형

MySQL 설치시 아래와 같은 에러 메세지가 나타났을 경우


# sh ./mysql_install_db
./mysql_install_db: line 37: use: command not found
./mysql_install_db: line 38: use: command not found
./mysql_install_db: line 39: use: command not found
./mysql_install_db: line 40: use: command not found
./mysql_install_db: line 41: use: command not found
./mysql_install_db: line 42: use: command not found
./mysql_install_db: line 43: use: command not found
./mysql_install_db: line 45: syntax error near unexpected token `"pass_through"'
./mysql_install_db: line 45: `Getopt::Long::Configure("pass_through");'


아래와 같이 실행 명령을 바꾸어 해결할 수 있습니다.

# perl ./mysql_install_db



반응형

댓글()

Curses library not found. Please install appropriate package

리눅스/MySQL|2015. 1. 16. 11:41
반응형

mysql 5.6.14 설치시 cmake 할때 아래와 같은 에러메세지가 출력될경우

  
-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:85 (MESSAGE):
  Curses library not found.  Please install appropriate package,
 
      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
  cmake/readline.cmake:128 (FIND_CURSES)
  cmake/readline.cmake:202 (MYSQL_USE_BUNDLED_EDITLINE)
  CMakeLists.txt:325 (MYSQL_CHECK_EDITLINE)
 
 -- Configuring incomplete, errors occurred!
 
 아래와 같이 필요한 패키지를 추가 설치 후 다시 진행하면 됩니다.
 
# yum -y install bison ncurses-devel
# rm -f CMakeCache.txt
# cmake ... (생략)

반응형

댓글()

mysql 바이너리 로그 파일 초기화

리눅스/MySQL|2015. 1. 16. 11:40
반응형
mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
....
mysql-bin.005009
 
위와같이 로그파일이 많아 삭제를 하고 000001 번부터 다시 사용하고자 할 경우에는
로그 인덱싱 파일(mysql-bin.index)과 모든 로그 파일(mysql-bin.*)을 삭제한 후
mysql 을 재시작 하면 아래와 같이 새롭게 생성이 됩니다.
 
-rw-rw----  1 mysql mysql      107  9월 13 11:46 mysql-bin.000001
-rw-rw----  1 mysql mysql       19  9월 13 11:46 mysql-bin.index


반응형

댓글()

MySQL 타임스탬프(timestamp) <-> 날짜 상호 변환

리눅스/MySQL|2015. 1. 16. 11:40
반응형

현재시간일자를 타임스탬프로

SELECT UNIX_TIMESTAMP();

SELECT UNIX_TIMESTAMP(DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'));

 

현재일자에서 하루후를 타임스탬프로

SELECT UNIX_TIMESTAMP(DATE_FORMAT(SYSDATE() + INTERVAL 1 DAY, '%Y-%m-%d %H:%i:%s'));

 

특정시간일자를 타임스탬프로

SELECT UNIX_TIMESTAMP('2012-01-01 12:00:00');

 

타임스탬프를 날짜시간으로

SELECT FROM_UNIXTIME(1337849511, '%Y-%m-%d %H:%i:%s');

 

[출처] MySQL 타임스탬프↔날짜 상호 변환|작성자 Developer (http://blog.naver.com/csaiur/10139447880)

반응형

댓글()

홈페이지 한글 깨짐(물음표) 현상 해결

리눅스/MySQL|2015. 1. 16. 11:40
반응형

설정 파일을 수정 합니다.


# vi /etc/my.cnf

 

[mysqld] 항목에 아래 옵션을 추가해주고 mysqld 를 재시작 합니다.

skip-character-set-client-handshake

 

/etc/init.d/mysqld restart



* MariaDB 10.3.17


최신 버전에서는 아래와 같이 추가해주어야 정상 출력되었습니다.


# vi /etc/my.cnf.d/mariadb-server.cnf


[mysqld] 항목에 아래 옵션 추가 후 mysqld 재시작

character-set-client-handshake=FALSE

collation-server=utf8_general_ci

character-set-server=utf8


# systemctl restart mysqld



반응형

댓글()

euckr DB를 utf8 로 변경하기 (간단)

리눅스/MySQL|2015. 1. 16. 11:39
반응형
MySQL 환경, data 모두 euckr 로 사용중인데 이것을 모두 utf8로 변환하고자 할때
(테스트 환경 : MySQL 5.0.77)
 
1. 데이타를 euckr 로 덤프 받습니다.
(옵션을 주지 않으면 시스템 캐릭터셋으로 저장될수 있습니다)
mysqldump -p --default-character-set=euckr sysdocu > sysdocu.sql
 
2. MySQL 환경을 바꿉니다.
다른 포스팅을 참고하여 /etc/my.cnf 의 euckr 을 utf-8 로 변경
 
3. MySQL 을 재시작 해줍니다.
/etc/init.d/mysqld restart
 
4. 덤프 파일을 열어 테이블 속성을 변경해줍니다.
(변경 하지 않아도 상관없으나 추후 속성확인 필요시 유용합니다)
vi sysdocu.sql
:%s/CHARSET=euckr/CHARSET=utf8/g
 
5. 덤프 파일을 넣습니다.
mysql -p --default-character-set=utf8 sysdocu < sysdocu.sql
 
사이트에서 확인하면 됩니다.


반응형

댓글()