SET GLOBAL time_zone='Asia/Seoul';
SET time_zone='Asia/Seoul';
SET GLOBAL time_zone='Asia/Seoul';
SET time_zone='Asia/Seoul';
Show variables like"c%";
ALTER TABLE cms_account converttocharset utf8;
ALTER DATABASE sigongweb_db charset utf8;
SET GLOBAL max_allowed_packet = 1024 * 1024 * 16;
SET SESSION max_allowed_packet = 1024 * 1024 * 16;
mysql 에는 데이터를 암호화, 복호화하는 AES_ENCRYPT, AES_DECRYPT 함수가 있습니다. 이 암호화는 128비트 길이로 인코딩되어 저장됩니다. 그러나 소스를 수정해서 256비트까지 확장시킬수 있다고 합니다.
AES_ENCRYPT 는 문자열을 암호화하고, 바이너리 문자열을 반환하지만, AES_DECRYPT 는 암호화된 문자열을 복호화합니다. AES_DECRYPT 는 유효하지 않은 데이터는 padding을 감지하고, NULL을 반환합니다.
# "암호화 키"는 임의의 값이 올 수 있으며, "문자열"은 암호화하고자 하는 값이 됩니다.
# AES_ENCRYPT 암호화
INSERT INTO 테이블명 VALUES (HEX(AES_ENCRYPT('문자열', '암호화 키')));
# AES_DECRYPT 복호화
SELECT AES_DECRYPT(UNHEX(필드명), '암호화 키') FROM 테이블명;
예제 (ex #1
# AES_ENCRYPT 암호화
INSERT INTO tbname VALUE (HEX(AES_ENCRYPT('123456','가나다라')));
// 결과: 5A33E11DC0B638E4E5E74EBD52F55E3D
# AES_DECRYPT 복호화
SELECT AES_DECRYPT(UNHEX(필드명), '가나다라') FROM tbname;
출처: <https://blog.habonyphp.com/213>
DB 속도 + 검색 문제로 상기기능 실제적용 실패
select * from music
where
(type='song' or type='album')
and
created_date > DATE_ADD(now(), INTERVAL -1 hour);
music 테이블에서 type이 song 또는 album 인 데이터가 지난 1시간 동안 얼마나 들어왔는지 검색
-1~ -24 까지 하면 최근 한 시간 부터 24시간까지 검색이 가능
이런 식으로 끝에
-1 hour 최근 한 시간
-1 day 최근 하루
-1 month 최근 한달
select * from music
where
created_date between '2013-10-10' and '2013-10-14';
10일부터 14일까지 검색
로컬개발 후 서버 적용을 지키기 위해
데이터베이스 덤프와 밀어넣는 작업을 자주 한다.
MySQL Error 2006 : MySQL server has gone away
상기 에러는 대용량 작업이 패킷사이즈보다 커서 생기는 에러.
set GLOBAL max_allowed_packet = 1024 * 1024 * 64;
set SESSION max_allowed_packet = 1024 * 1024 * 64;
1. my.cnf 파일 내용을 아래와 같이 수정한다.(Mysql, MariaDB 설정 파일)
명령어 : vi /etc/my.cnf [엔터]
[client]
default-character-set = utf8
[mysqld]
init_connect = SET collation_connection = utf8_general_ci
init_connect = SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8
2. 위 내용을 추가 한 후, my.cnf 파일을 저장 한다.
3. 내용을 추가 한 뒤, 설정한 내용을 적용 하기 위해 mysql을 재시작 한다.
- 명령어 : service mysqld restart 또는 /etc/init.d/mysql restart
(MariaDB도 Mysql 명령과 동일 함.)
4. DB에 접속 하여 정상적으로 적용 되었는지 확인 한다.
- 명령어 : mysql -u root -p [엔터]
> show variables like 'c%';
+--------------------------+-----------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/server/mysql/share/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
| completion_type | NO_CHAIN |
| concurrent_insert | AUTO |
| connect_timeout | 10 |
+--------------------------+-----------------------------------------
Groupby
예약어가 무조건 전체 그룹으로 묶여야만 하는 설정 해제
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION