반응형

기존 mysql 5.5.40에서 사용시엔 인코딩 관련 옵션만 적어서 연결을 했는데, 5.7로 올리자 연결은 되지만 한글과 같은 데이터만 전달하면 정상적으로 인식이 되지 않는 현상이 있었다.

 

 

5.7로 올라오고 SSL 옵션이 기본적으로 true로 변경되었고, 이부분을 false처리하지 않으면 정상동작하지 않으니 수정하도록 한다.

 

 useSSL=false 

jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&defaultFetchSize=1000&useSSL=false

 

반응형
반응형

Mysql 또는 Maria를 리눅스 서버에 설치하고 사용하다보면 테이블을 대소문자 구분하도록 설정이 되어 있는 경우가 있다.

 

해당 설정을 확인하는 방법은 아래 명령어를 통해 알 수 있다.

 

대소문자 구분상태 확인하기

show variables like 'lower_case_table_names';

Value값이 0이면 구분, 1이면 구분하지 않는 상태이다.

 

구분하지 않도록 설정하기 위해선 설정값을 변경하고 재기동이 필요하다.

 

설정 변경하기

vi, vim 등의 에디터를 통해 설정 파일을 먼저 열어준다.

vim /etc/my.cnf

 

설정 값 중에 [mysqld] 영역이 존재할텐데, 최하단에 아래의 설정값을 입력한다.

[mysqld]
lower_case_table_names=1

* [mysqld] 자체가 없다면 추가하고 입력하면 된다.

설정을 추가한다.

 

 

 

이후 서비스를 재기동하면 구분하지 않는 것을 볼 수 있다.

systemctl restart mariadb   #maria 재기동
service mysql restart       #mysql 재기동

1은 구분하지 않음

반응형
  1. 11 2022.06.09 11:16

    이거 하면 mysql이 멈추는데요?

반응형

시작

systemctl start mariadb

 

종료

systemctl stop mariadb

 

재시작

systemctl restart mariadb

반응형
반응형

Mysql에서 대량의 insert쿼리를 처리하는 로직부분이 있는데, 수정 과정을 통해 기존 등록된 데이터를 삭제하고 insert 쿼리가 동작하면서 해당 에러가 발생하였다.

 

에러가 발생한 서버의 설치된 mysql의 max_allowed값을 확인해보니 4MB였고, 에러는 5MB가 요청되어 발생한 에러였다.

 

서버에서 max_allowed_packet값 확인하기

show VARIABLES like '%max_allowed_packet%';

 

 

설정값 변경하기

mysql 설정 파일에 찾아가 옵션을 변경한다.

# vim /etc/my.cnf

[mysqld]
max_allowed_packet=16M

 

이후 서비스를 재기동하면, 설정값이 변경된 것을 확인 할 수 있다.

 

Mysql 상태확인 및 시작, 중지, 재시작 명령어

# service mysql start //시작
# service mysql stop  //중지
# service mysql restart //재시작
# service mysql status //상태확인
반응형
반응형

CentOS에 MariaDB 설치 후 한글이 깨지는 현상이 발견되었다.

 

인코딩 변환이 필요하였고, 처리 방법은 아래와 같다.

vim /etc/my.cnf.d/server.cnf

 

설정파일 열어주고 [mysqld] 아래쪽에 아래와같은 설정을 입력한다.

[mysqld]
init_connect="SET collation_connection=utf8_general_ci"
init_connect="SET NAMES utf8"
character-set-server=utf8
collation-server=utf8_general_ci

 

재시작을 한다.

systemctl restart mariadb

 

반응형
반응형

mariaDB를 이번에 centOS에 올리고 개발서버로 세팅 도중 프로시저만 복원하려고 하면 에러가 발생하였다.

 

에러 메시지처럼 아래의 명령어를 통해 업그레이드 후  mariaDB를 재부팅하여 해결하였다.

 

mysql_upgrade -u root -p

...

 

이후 서비스를 재시작한다.

 

systemctl restart mariadb

 

 

정상적으로 동작한다.

반응형
반응형

기존 5버전대 mysql을 쓰다가 해당 구조만 가져올 일이 있어서 그대로 백업한 .sql파일을 복원 하는 과정에서 아래와같은 에러가 발생하였다.

 

 

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

 

 

 

함수 생성시 옵션 에러라고 하는데 버전이 올라가면서 기본값이 변경된 것 같다.

발생하는 에러로그를 토대로 검색해보니 함수 생성시 생성 제약처리를 할 수 있었고, 생성할 수 있는 부분이 OFF처리 되어있는걸 볼 수 있었다.

 

log_bin_trust_function_creators 옵션 확인하기

show global variables like 'log_bin_trust_function_creators';

 

해결방법
설치한 Mysql은 8버전대였고 아래의 쿼리를 실행 후 동일한 .sql파일 실행시 정상적으로 동작하였다.

SET GLOBAL log_bin_trust_function_creators = 1; //ON
#SET GLOBAL log_bin_trust_function_creators = 0; //OFF

1은 ON처리로 함수 생성을 시킬수 있다.

 

0은 OFF처리로 정상적으로 처리 후 다시 원복시 사용하거나 다른 사용자가 함수를 추가하지 못하도록 막을 수 있을것이다.

반응형
반응형

DB 컬럼에 primary key, unique 등을 사용하여 값의 중복을 방지할 수 있는데, 여러개의 컬럼을 동시에 체크하여 중복을 체크해야 하는 경우 여러개를 묶어서 unique 처리를 하면 된다.

 

ALTER TABLE 테이블명 ADD UNIQUE (컬럼1, 컬럼2, 컬럼3);

동시에 관리할 컬럼들을 UNIQUE() 안에 넣어주면 된다.

 

 

사용 예시)

db schema

 

형태로 c1, c2가 모두 중복되는걸 방지하기 위해 UNIQUE 처리하였다.

ALTER TABLE dupli ADD UNIQUE (c1, c2);

 

아래와 같은 샘플 데이터가 존재하는 상태에서

db sample

 

 

c1, c2에 1, 5를 각각 입력해보면 아래와 같은 유니크키 에러가 발생하는 것을 볼 수 있다.

1, 5를 똑같이 입력
중복 에러

 

반응형