목록Study/MySQL (21)
오늘도 한 뼘 더
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bsqkMT/btrRBLES6Qn/5Vsdv2fb8GkbxBJDgChCk1/img.png)
# 칼럼 하나 수정 > UPDATE {테이블명} SET update_at=now() where id={ID값}; # 다중 칼럼 수정 > UPDATE {테이블명} SET update_at=now(), deleted_at=now() where id={ID값};
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/C58pp/btrRKJFkojB/MoBZk2ksmsn6eLfn7HJndK/img.png)
# 현재 시간 now() : 날짜와 시간 같이 표기 curdate() : 날짜만 표기 # update 쿼리 예시 > UPDATE {테이블명} SET updated_at=now() where id={ID}
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bksLUf/btrPpW8cPuN/dvGsGMYi2PBD7HMUNY2nE1/img.png)
# 배경 SSH 접속을 통해 RDS로 접근을 하고자 하였다. 그런데 다음과 같은 에러가 반환이 되었다. Last Connection to MySQL server at 'reading initial communication packet', system error:0 # 해결방법 mysql hosts.allow 변경하기 host가 막혀서 일 수 있다는 이유를 듣고 다음을 적용하였다. $ /etc/hosts.allow > mysqld: Allow 하지만 이 방법으로는 해결이 되지 않았다. AWS 문서를 통해 알게 된 부분은 총 4가지 설정 값을 변경해 볼 수 있다고 했다. https://aws.amazon.com/ko/premiumsupport/knowledge-center/rds-mysql-communica..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/coiFJg/btrNSBehvnM/vgppKOIkGQZBxoqIHYdWF0/img.png)
# 배경 데이터 보안을 위해 MySQL 서버 접속을 cmd창으로 진행하면서 MySQL Client를 사용하여 데이터를 볼 때 가독성을 높여서 보고 싶다. # MySQL 데이터 확인 일반적으로 데이터를 확인하는 방법 다음과 같이 데이터를 조회하면 컬럽의 수가 많으면 굉장히 보기 힘들다. > select * from mysql.user; ego를 사용하여 가독성 높이기 ego (\G)를 사용하여 행 별로 수직으로 나열이 되어 가독성이 올라간다. > select * from mysql.user \G
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JcDHo/btrNusVUVXC/X3H36P9u9yQdPMlULARjOk/img.png)
# 배경 DB 보안을 위해서 네트워크를 통한 DB 접근을 막았고, 그 과정에서 Workbecnh를 사용해서 볼 수 있는 방법을 찾았다. Workbench에서 SSH를 통한 접근을 설정을 제공한다. # SSH 설정 방법 기존의 Connection을 편집하거나 새로 생성한다. 그리고 Connection Method를 SSH로 선택한다 나머지 세팅을 다음과 같이 진행한다. SSH Hostname : 접근하고자 하는 서버 주소(or IP) SSH Username : 서버의 username SSH KeyFile : SSH private 키 파일을 선택해야 한다. MySQL Hostname : MySQL 서버 주소 MySQL Server Port : 3306 Username : 사용자 이름 비밀번호를 저장하여 사용..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cRgShz/btrL42LlnVq/ZdRArWmVeRXHAfK7TJx3WK/img.png)
# 배경 최근 회사에서 slow query를 보고 인덱스를 추가하는 작업을 진행하고 있다. 그런데 인덱스를 추가했음에도 여전히 계속 느린 쿼리들이 발생했고 이때, query plan이라는 것을 알게 되었다. MySQL Workbench에서는 해당 기능을 볼 수 있게 제공한다. # Query Plan 보기 1. 그림으로 확인하기 쿼리문을 작성하고 위의 돋보기 모양으로 실행을 하면 output 창에 query plan이 뜨게 된다. 2. Explain 사용하여 확인하기 EXPLAIN SELECT * FROM world.city explain 명령어를 붙여서 쿼리문을 실행하면 query의 상세 정보가 결과 값으로 반환된다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c9wY8A/btrHkUr4mNK/1CUJl6yxXNADtINELeNPEk/img.png)
# 배경 $ mysql -h {HOST_NAME} -u {USER} -p {DATABASE_NAME} < dump.sql mysql dump를 하는데 다음과 같은 에러가 반환되었다. ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation # 문제 원인 이 문제는 RDS가 제공하는 MySQL 서버가 사용자가 아닌 다른 DEFINER가 지정된 sql파일은 허용하지 않아 생기는 것이라고 한다. 즉, data export를 할 때와 data import 할 때의 사용자가 달라서 생긴 문제였다. # 해결 방법 1. 명령어 $ sed -i 's/DEFINER=[^*]..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dmW1rA/btrDPCaeSNV/LiNi1KphPNkrmY4eKDcSQK/img.png)
# 배경 스트레스 툴 (J meter)를 사용하여 스트레스 테스트를 진행하기 위해 운영 데이터를 로컬 DB에 import 하여 운영환경과 같은 환경을 만드려고 한다. # 문제 import를 하는 과정에서 다음과 같은 에러가 발생하며 진행이 되지 않았다. ## 원인 show variables like 'max_allowed_packet'; max_allowed_packet 값이 4MB로 되어있다 에러가 발생한 곳의 쿼리문이 4MB를 넘어 처리를 할 수 없는 것이었다. 해당 쿼리에 텍스트 내용이 많아 발생한 문제 # 해결 방법 SET GLOBAL max_allowed_packet = 1073741824; max_allowed_packet의 값을 키워줬다. 10MB로 변경을 하고 돌려보니 제대로 import가..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yxO5T/btrC9mkNoBB/0VrkTZdVFtJNaeqfvA8hBK/img.png)
# 사용자 확인하기 $ USE mysql; $ SELECT * FROM user; // user 테이블 전체 내용 $ SELECT user, host FROM user; // user, host 보기 # 사용자(User) 생성 $ CREATE USER 'jihyun'@'%' IDENTIFIED BY '{password}'; // '%' : 모든 곳에서 사용 // 'localhost' : 로컬에서만 사용 # 사용자(User) 삭제 $ DROP USER jihyun@'%'; # 사용자(User) 권한 추가 $ GRANT ALL PRIVILEGES ON *.* TO 'jihyun'@'%'; // 전체 DB에 대한 전체 권한 추가 $ GRANT ALL PRIVILEGES ON {DB_NAME}.* TO 'jih..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/TtQ1g/btrx8bIqZmm/qK5SuQfStgW10xG0iB9QZk/img.png)
# 배경 회사에서 데이터 관련 작업을 진행하는데 update문을 작성하는 중 workbench에서 다음과 같은 에러가 뜨고 실행되지 않는 문제가 발생했다. Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. # 해결 방법 작동하려고 한 코드 update item set quantity=0 where quantity is null; 1) 일시적으로 safe update를 해제시키는 방법 다음 코드..