Aurora 리스트, 스냅샷, 복원 CLI - AWS Aurora MySQL (RDS)
안녕하세요. Johncomputer 입니다.이번에는 아마 최근들어서 더 많은 분들이 이용하고 계신 Aurora MySQL에 대해서 같이 다뤄보려고 합니다.운영을 하다보면 "자동화", "대규모" 작업을 하게 되는 경우가 있는데이럴때는 항상 웹 화면에서 하나씩 다루기는 힘들거든요...그렇다 보니 Lambda 라던가 EC2 아니면 개인 PC에서 CLI로 명령을 할 수 있는 방법이 있는데요한번 같이 보겠습니다. 디테일한 옵션은 아래에 있고 전 주로 사용하는 스크립트 위주로 올려드릴게요https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html describe-db-clusters — AWS CLI 1.38.20 Command Ref..
2025.03.29
no image
AI 빅데이터 분석을 이용한 로또 번호 예측하기 (Ver.2)
안녕하세요. Johncom 입니다.AI 분석 로또 번호 추첨기가 인기있는 글이 되어서 이번에 조금 더 간편한 버전으로 왔습니다.업그레이드 버전에 앞서 내용들을 알고 싶으시다면 아래 링크 2개 참고하시면더욱 이해가 빠릅니다.(상, 하)https://johncom.tistory.com/71 AI 빅데이터 분석을 이용한 로또 번호 예측하기 (상) - GPT와 함께안녕하세요. JohnComputer 입니다.오늘은 한번 GPT를 이용해서 로또 번호 예측 시스템을 만들어 보려고 해요. 아래는 GPT와 빅데이터 분석에 대한 글들이 있어로또 예측기를 바로 만들고 싶은 분들 (johncom.tistory.com https://johncom.tistory.com/72 AI 빅데이터 분석을 이용한 로또 번호 예측 만들기 (..
2024.12.28
no image
MySQL 테이블 DB 사이즈 구하기 - row 개수 / 행 개수
안녕하세요. Johncom 입니다. information Schema의 테이블에는 테이블 관련 정보들이 정의되어 기록되고 있습니다.모든 값들은 byte 단위로 기록되고 있어 간단한 변환이 필요합니다.아래 내용은 "MB" 기준으로 계산 되어 "GB" 계산을 진행하려면 /1024를 추가해야 합니다. DESC information_schema.TABLES;+-----------------+---------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-----------------+---------------------+------+-----+---..
2024.10.23
MySQL 권한 설정 CREATE USER
--  USER 생성-- 서버 설정 CREATE USER 'username'@'host' IDENTIFIED BY 'password';-- 특정 플러그인 지정 (과거사용 5.7 이하)CREATE USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password'; -- 권한-- 모든 권한 + 모든 DB 접근 권한 부여GRANT ALL PRIVILEGES ON *.* TO 'username'@'host';-- 특정 DB 전체 권한 GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';-- 특정 테이블 전체 권한GRANT ALL PRIVILEGES ON database_name.table..
2024.06.13
no image
ERROR 1872 (HY000) : slave failed to initialize relay log info structure from the repository 에러 해결방법
마스터 슬레이브 구성 중 위와 같은 오류가 발생하였고 해당 오류의 경우 slave failed to initialize relay log info structure from the repository 슬레이브 실행 중 릴레이 로그 정보를 초기화 하지 못 했을때 발생하는 오류이다. 기존에 만들었던 Slave가 정상 종료가 안되었거나 Config나 Log에서 꼬일 수 도 있고 여러 이유가 있을 수 있다. 특히, Container 환경에서 처럼 계속 썻다 지웠다 실험하는 경우 해당 오류를 만날 수 있고 이런경우 해결 방법은 매우 간단하다. mysql > STOP SLAVE; mysql > RESET SLAVE; mysql > START SLAVE; 끄고 -> 초기화 하고 -> 다시 실행해주면 된다.
2022.08.25
no image
Ignoring query to other database... 오류 해결
사실 오류 해결이라 하기에도 애매하지만 이글을 검색 해본 분들은 필자 처럼 오타에 주의 해야한다 ㅠㅠ 갑자기 이런 메세지를 띄우며 쿼리가 안된다.. 아! root ??????? 오타입니다. -uroot 로 바꿔주세요
2022.08.25
Pymysql (Python2 -> Python3) 오류 발생
Pymysql을 이용해서 작업을 해야하는데 기존에 인터넷에 뿌려져 있는 Python2 버전으로 만약에 실행한 경우 예상치도 못한 오류가 발생할 수 있다. 예를들어 아래와 같은 positional argument 오류가 발생할 수 있습니다. 1 takes 1 positional argument but 5 positional arguments (and 1 keyword-only argument) were given cs 이런 경우 Python3와 다르기 때문에 아래와 같이 수정해주시면 됩니다. 1 2 3 4 # import 수정 필요 import pymysql.curosors # connection 속성값을 모두 명시해야함. dbconnect = pymysql.connect( host = 호스트값, user..
2022.08.03
PHP CRUD 모듈자료 입력/수정/삭제 모듈 - MSSQL_Version
안녕하세요. John Computer 입니다. 매번 페이지 / 메소드 마다 칼럼명과 데이터를 집어넣어서 만드는 번거러움을 없애기 위해서 동적으로 칼럼의 갯수와 상관없이 삽입 수정 삭제가 가능하게 쿼리문을 작성해 놨습니다. 사용법 또한 간단하니 다운받으셔서 이용하세요 사용법 1. input을 생성하여 insert_col = DB칼럼명 / insert_param = DB에 들어갈 데이터값 을 넣는공간을 만들어주세요. 2. insert_col의 경우 칼럼명을 보여질 필요가 없기 때문에 hidden으로 처리해주시면 됩니다. 3. ajax에 insert_page.php 경로를 url에 설정 해주시고 colunm / insert_param 과 같은 변수명은 그대로 작동하게 두고 TABLE 명만 바꿔 주시면 됩니다...
2021.06.07
반응형

안녕하세요. Johncomputer 입니다.

이번에는 아마 최근들어서 더 많은 분들이 이용하고 계신 Aurora MySQL에 대해서 같이 다뤄보려고 합니다.

운영을 하다보면 "자동화", "대규모" 작업을 하게 되는 경우가 있는데

이럴때는 항상 웹 화면에서 하나씩 다루기는 힘들거든요...

그렇다 보니 Lambda 라던가 EC2 아니면 개인 PC에서 CLI로 명령을 할 수 있는 방법이 있는데요

한번 같이 보겠습니다.

 

디테일한 옵션은 아래에 있고 전 주로 사용하는 스크립트 위주로 올려드릴게요

https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html

 

describe-db-clusters — AWS CLI 1.38.20 Command Reference

Note: You are viewing the documentation for an older major version of the AWS CLI (version 1). AWS CLI version 2, the latest major version of AWS CLI, is now stable and recommended for general use. To view this page for the AWS CLI version 2, click here. F

docs.aws.amazon.com

 

 

1. 기본 사용 명렁어

- 가장 중요한 내용 중 하나인데 DB 개념에서 Cluster, Instance 를 구별해서 볼 수 있어야 합니다.

버전은 Cluster 단위, Type 변경은 Instance 단위로 변경 가능합니다.

#!/bin/bash

# 1. Aurora 클러스터 목록 조회
# 현재 운영 중인 모든 Aurora 클러스터 정보를 확인
aws rds describe-db-clusters

# 2. 특정 클러스터의 상세 정보 조회
# 특정 Aurora 클러스터의 설정 및 상태를 확인
aws rds describe-db-clusters --db-cluster-identifier {my-cluster}

# 3. Aurora 인스턴스 목록 조회
# 현재 운영 중인 모든 데이터베이스 인스턴스를 확인
aws rds describe-db-instances

# 4. 특정 Aurora 인스턴스 상태 조회
# 특정 DB 인스턴스의 상세 정보를 가져옴
aws rds describe-db-instances --db-instance-identifier {my-instance}

# 5. Aurora 클러스터 백업 (스냅샷 생성)
# 클러스터의 백업을 생성하여 데이터 보호
aws rds create-db-cluster-snapshot --db-cluster-snapshot-identifier {my-cluster-snapshot} --db-cluster-identifier {my-cluster}

# 6. 스냅샷 목록 조회
# 생성된 모든 클러스터 스냅샷을 확인
aws rds describe-db-cluster-snapshots

# 7. Aurora 클러스터 복원 (스냅샷에서 복구)
# 기존 백업 스냅샷을 사용하여 새로운 Aurora 클러스터 생성
aws rds restore-db-cluster-from-snapshot --db-cluster-identifier {my-new-cluster} --snapshot-identifier {my-cluster-snapshot}

# 8. Aurora 클러스터 크기 조정 (자동 스케일링 설정 변경)
# Aurora Serverless의 최소 및 최대 용량을 조정
aws rds modify-db-cluster --db-cluster-identifier {my-cluster} --scaling-configuration MinCapacity={2},MaxCapacity={8}

# 9. Aurora 인스턴스 타입 변경 (업그레이드 또는 다운그레이드)
# Aurora 인스턴스의 스펙을 변경 (ex. db.r5.large → db.r6g.large)
aws rds modify-db-instance --db-instance-identifier {my-instance} --db-instance-class {db.r6g.large} --apply-immediately

# 10. Aurora 클러스터 삭제
# 최종 스냅샷 없이 Aurora 클러스터 삭제 (데이터 영구 삭제됨)
aws rds delete-db-cluster --db-cluster-identifier {my-cluster} --skip-final-snapshot

# 11. Aurora 인스턴스 재시작
# 특정 Aurora DB 인스턴스를 재부팅하여 문제 해결
aws rds reboot-db-instance --db-instance-identifier {my-instance}

# 12. Aurora 파라미터 변경
# 특정 파라미터 그룹의 값을 변경하고 적용
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name {my-cluster-param-group} --parameters "ParameterName={max_connections},ParameterValue={500},ApplyMethod=immediate"

# 13. Aurora MySQL 버전 업그레이드
# 기존 Aurora 클러스터의 엔진 버전을 업그레이드 (사전 테스트 필수!)
aws rds modify-db-cluster --db-cluster-identifier {my-cluster} --engine-version {8.0.mysql_aurora.3.04.0} --apply-immediately

 

2. describe 심화 - 특정 인스턴스 목록 뽑기 jq json

- 아래처럼 쿼리를 이용해서 원하는 출력값만 얻을 수 있습니다.

- output style 은 text, json, table등 보기 편하게도 가능해요

aws rds describe-db-clusters --region ap-northeast-3 --query "DBClusters[?contains(DBClusterIdentifier, '필터값')]" --output json
aws rds describe-db-clusters --query "DBClusters[?contains(DBClusterIdentifier, '필터값')].{DBClusterIdentifier:DBClusterIdentifier, Endpoint:Endpoint, ReaderEndpoint:ReaderEndpoint}" --output text
aws rds describe-db-clusters --query "DBClusters[?contains(DBClusterIdentifier, '필터값')].{DBClusterIdentifier:DBClusterIdentifier, Endpoint:Endpoint, ReaderEndpoint:ReaderEndpoint}" --output table

 

3. 기타 사용 명령어 

--region	#실행할 AWS 리전을 지정	--region ap-northeast-2
--output	#출력 형식 지정 (json, table, text, yaml)	--output table
--query	#특정 데이터 필드만 출력	--query "DBClusters[*].DBClusterIdentifier"
--profile	#사용할 AWS 프로필 지정	--profile my-profile
--no-paginate	#페이지 나누기 없이 전체 데이터 출력	--no-paginate

- paginator의 경우 100개가 넘는 리스트를 다룰 때 사용됩니다.

 

반응형
반응형

안녕하세요. Johncom 입니다.

AI 분석 로또 번호 추첨기가 인기있는 글이 되어서 이번에 조금 더 간편한 버전으로 왔습니다.

업그레이드 버전에 앞서 내용들을 알고 싶으시다면 아래 링크 2개 참고하시면

더욱 이해가 빠릅니다.

(상, 하)

https://johncom.tistory.com/71

 

AI 빅데이터 분석을 이용한 로또 번호 예측하기 (상) - GPT와 함께

안녕하세요. JohnComputer 입니다.오늘은 한번 GPT를 이용해서 로또 번호 예측 시스템을 만들어 보려고 해요. 아래는 GPT와 빅데이터 분석에 대한 글들이 있어로또 예측기를 바로 만들고 싶은 분들 (

johncom.tistory.com

 

https://johncom.tistory.com/72

 

AI 빅데이터 분석을 이용한 로또 번호 예측 만들기 (하) - GPT와 함께

(상)편에 이어서Python을 이용하여 실제 번호 예측을 진행해 보겠습니다.#로또번호예측기 코드는 블로그 최하단에 넣어 둘게요.csv파일은 https://johncom.tistory.com/71 AI 빅데이터 분석을 이용한 로또

johncom.tistory.com

 

앞서 Python 설치는 블로그 내에서 확인이 가능합니다. (아래 URL)

https://johncom.tistory.com/49

 

python3 설치 부터 경로 설정까지 (pip, python, 환경 변수, path)

안녕하세요. JohnCom 입니다. 오늘은 제 로컬 PC에 Python3 를 설치를 진행하는데 설치하는 방법을 정리해두면 처음 시작하는 분들에게 도움이 될 것 같아서 이렇게 따로 정리해둘려고 글을 씁니다. "

johncom.tistory.com

 

본격적으로 로또 본허 생성기 (추첨기) 제작을 진행하겠습니다.

 

1. 패키지 설치

pip install numpy
pip install pandas
pip install scikit-learn
pip install tensorflow

- 패키지 설치가 되지 않을 경우 오류를 유발할 수 있습니다.

 

2. 역대 로또 번호 CSV 파일 준비

위 상단 URL 참고하여 Lotto csv 파일 준비

- `lotto.csv` 파일이 필요합니다 (과거 로또 당첨 번호 데이터)
- CSV 파일 형식: 각 행에 회차별 6개의 당첨번호가 포함되어야 합니다

 

3.코드 구성

## 3. 코드 구성 요소 설명

### 데이터 처리 부분
```python
# 데이터 로드 및 전처리
data = pd.read_csv('lotto.csv')
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data)
```
- CSV 파일에서 데이터를 읽어옵니다
- MinMaxScaler를 사용하여 데이터를 0~1 사이의 값으로 정규화합니다

### 시계열 데이터 준비
```python
def create_dataset(data, time_steps=1):
    X, y = [], []
    for i in range(len(data) - time_steps):
        X.append(data[i:(i + time_steps)])
        y.append(data[i + time_steps])
    return np.array(X), np.array(y)
```
- 이전 35회차의 데이터를 사용하여 다음 회차를 예측하기 위한 데이터셋을 만듭니다

### LSTM 모델 구성
```python
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X.shape[1], X.shape[2])))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(6))
```
- LSTM 레이어 2개와 Dense 레이어 1개로 구성된 딥러닝 모델을 만듭니다
- 최종적으로 6개의 숫자를 출력합니다

### 예측 및 번호 생성
```python
def generate_multiple_predictions(predictions, num_sets=5):
    # 중복되지 않는 6개의 숫자를 5세트 생성
    # 예측값을 기반으로 확률을 계산하여 번호 선택
```
- 학습된 모델의 예측값을 기반으로 5세트의 로또 번호를 생성합니다
- 각 세트는 1~45 사이의 중복되지 않는 6개 숫자로 구성됩니다
- 생성된 번호는 오름차순으로 정렬됩니다

 

4. 번호 추첨 및 소스코드

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# CSV 파일 로드
data = pd.read_csv('lotto.csv')

# 데이터 스케일링
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data)

# 시계열 데이터 준비
def create_dataset(data, time_steps=1):
    X, y = [], []
    for i in range(len(data) - time_steps):
        X.append(data[i:(i + time_steps)])
        y.append(data[i + time_steps])
    return np.array(X), np.array(y)

time_steps = 35
X, y = create_dataset(data_scaled, time_steps)
X = X.reshape(X.shape[0], X.shape[1], X.shape[2])

# LSTM 모델 구성
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X.shape[1], X.shape[2])))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(6))
model.compile(optimizer='adam', loss='mean_squared_error')

# 모델 학습
model.fit(X, y, epochs=100, batch_size=32, validation_split=0.2)

# 예측
predictions = model.predict(X)

# 원래 스케일로 역변환
predictions_scaled_back = scaler.inverse_transform(predictions)

def generate_multiple_predictions(predictions, num_sets=5):
    all_predictions = []
    
    # 수정된 부분: 확률 배열 생성
    numbers = np.arange(1, 46)  # 1부터 45까지의 숫자
    probabilities = np.ones(45) / 45  # 균등한 확률 분포 사용
    
    for _ in range(num_sets):
        # 중복되지 않는 6개의 숫자 선택
        selected_numbers = np.random.choice(
            numbers,
            size=6,
            replace=False,
            p=probabilities
        )
        # 오름차순 정렬
        sorted_numbers = np.sort(selected_numbers)
        all_predictions.append(sorted_numbers)
    
    return np.array(all_predictions)

# 5세트의 예측 번호 생성
predicted_sets = generate_multiple_predictions(predictions_scaled_back, num_sets=5)

# 결과 출력
print("\n=== 예측된 5세트의 로또 번호 (오름차순) ===")
for i, numbers in enumerate(predicted_sets, 1):
    formatted_numbers = ' '.join(f"{int(num):02d}" for num in numbers)
    print(f"세트 {i}: {formatted_numbers}")

 

- 위 소스코드를 실행하면 원하는 출력값을 얻을 수 있습니다.

 

 

반응형
반응형

안녕하세요. Johncom 입니다.

 

information Schema의 테이블에는 테이블 관련 정보들이 정의되어 기록되고 있습니다.

모든 값들은 byte 단위로 기록되고 있어 간단한 변환이 필요합니다.

아래 내용은 "MB" 기준으로 계산 되어 "GB" 계산을 진행하려면 /1024를 추가해야 합니다.

 

DESC information_schema.TABLES;

< information_shema.TABLES 구조 >

+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(512)        | NO   |     |         |       |
| TABLE_SCHEMA    | varchar(64)         | NO   |     |         |       |
| TABLE_NAME      | varchar(64)         | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)         | NO   |     |         |       |
| ENGINE          | varchar(64)         | YES  |     | NULL    |       |
| VERSION         | bigint(21) unsigned | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)         | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21) unsigned | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21) unsigned | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21) unsigned | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_TIME     | datetime            | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime            | YES  |     | NULL    |       |
| CHECK_TIME      | datetime            | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(32)         | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)        | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(2048)       | NO   |     |         |       |
+-----------------+---------------------+------+-----+---------+-------+

 

TABLE 정보

TABLE_CATALOG 테이블이 속한 카탈로그 (대부분은 고정된 값일 수 있음)
TABLE_SCHEMA 테이블이 속한 스키마 (데이터베이스 이름)
TABLE_NAME 테이블 이름
TABLE_TYPE 테이블의 유형 (예
ENGINE 테이블이 사용하는 스토리지 엔진 (예
VERSION 테이블의 버전 (내부적인 관리 버전 정보)
ROW_FORMAT 테이블의 행 저장 형식 (예
TABLE_ROWS 테이블에 저장된 행의 개수
AVG_ROW_LENGTH 평균 행 길이 (바이트 단위)
DATA_LENGTH 테이블의 실제 데이터 크기 (바이트 단위)
MAX_DATA_LENGTH 테이블이 수용할 수 있는 최대 데이터 크기
INDEX_LENGTH 인덱스에 사용된 공간 크기
DATA_FREE 테이블에서 사용하지 않는 (비어 있는) 공간 크기
AUTO_INCREMENT 자동 증가(AUTO_INCREMENT) 값
CREATE_TIME 테이블이 생성된 시간
UPDATE_TIME 테이블이 마지막으로 업데이트된 시간
CHECK_TIME 테이블이 마지막으로 검사된 시간
TABLE_COLLATION 테이블에서 사용하는 정렬 규칙 (콜레이션)
CHECKSUM 테이블의 체크섬 값 (데이터의 무결성 검사용)
CREATE_OPTIONS 테이블 생성 시 사용된 추가 옵션
TABLE_COMMENT 테이블에 대한 설명 또는 주석
TABLE_SCHEMAL DB명
TABLE_NAME TABLE명

 

Query

1. 간단한 DB 사이즈 TOTAL SIZE 조회 ( 데이터 + 인덱스 )

SELECT table_schema "DATABASE",
ROUND(SUM(data_length+index_length)/1024/1024,1) "DATA(MB)"
FROM information_schema.TABLES
GROUP BY table_schema;

 

 

2. DB 사이즈 중 DATA와 INDEX 나눠서 보기

SELECT
table_schema "DATABASE",
ROUND(SUM(data_length)/(1024/1024),2) as 'DATA(MB)',
ROUND(SUM(index_length)/(1024/1024),2) as 'INDEX(MB)'
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY 2 DESC;

 

3.특정 DB내 테이블 정보 가져오기

SELECT
table_schema "DATABASE",
table_name "TABLE",
table_rows "TABLE_COUNT",
ROUND(data_length/(1024/1024),2) as 'DATA(MB)',
ROUND(index_length/(1024/1024),2) as 'INDEX(MB)'
FROM information_schema.TABLES
WHERE table_schema = 'test'
ORDER BY 3 DESC;

 

4.DB-TABLE 별 COUNT와 DATABASE SIZE 확인하기

SELECT
table_schema "DATABASE",
table_name "TABLE",
table_rows "TABLE_COUNT",
ROUND(data_length/(1024/1024),2) as 'DATA(MB)',
ROUND(index_length/(1024/1024),2) as 'INDEX(MB)'
FROM information_schema.TABLES;

 

자주 내가 날리는 쿼리

SELECT
table_schema "DATABASE",
table_name "TABLE",
table_rows "TABLE_COUNT",
ROUND(data_length/(1024/1024),2) as 'DATA(MB)',
ROUND(index_length/(1024/1024),2) as 'INDEX(MB)'
FROM information_schema.TABLES
WHERE table_schema NOT IN ('sys','mysql','information_schema','performance_schema')
ORDER BY data_length DESC;
반응형
반응형

--  USER 생성

-- 서버 설정 
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

-- 특정 플러그인 지정 (과거사용 5.7 이하)
CREATE USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';

 

-- 권한

-- 모든 권한 + 모든 DB 접근 권한 부여
GRANT ALL PRIVILEGES ON *.* TO 'username'@'host';

-- 특정 DB 전체 권한 
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';

-- 특정 테이블 전체 권한
GRANT ALL PRIVILEGES ON database_name.table_name TO 'username'@'host';

-- 특정 테이블 SELECT 권한
GRANT SELECT ON database_name.table_name TO 'username'@'host';

-- 특정 테이블 SELECT, INSERT 권한
GRANT SELECT, INSERT ON database_name.table_name TO 'username'@'host';

-- 특정 프로시저 실행 권한
GRANT EXECUTE ON PROCEDURE database_name.procedure_name TO 'username'@'host';


-- 특정 유저 권한 확인
SHOW GRANTS FOR 'username'@'host';

-- 특정 권한 취소
REVOKE privilege_type ON database_name.table_name FROM 'username'@'host';
REVOKE SELECT ON mydatabase.mytable FROM 'testuser'@'localhost';


-- 마지막에는 까먹지 말고 꼭!
FLUSH PRIVILEGES;

 

-- 유저 조회

-- USER와 HOST를 조회
SELECT host, user FROM mysql.user;
반응형
반응형

마스터 슬레이브 구성 중 위와 같은 오류가 발생하였고 해당 오류의 경우 

slave failed to initialize relay log info structure from the repository

슬레이브 실행 중 릴레이 로그 정보를 초기화 하지 못 했을때 발생하는 오류이다.

 

기존에 만들었던 Slave가 정상 종료가 안되었거나

Config나 Log에서 꼬일 수 도 있고 여러 이유가 있을 수 있다.

 

특히, Container 환경에서 처럼 계속 썻다 지웠다 실험하는 경우 해당 오류를 만날 수 있고 이런경우 해결 방법은 매우 간단하다.

 

mysql > STOP SLAVE;

mysql > RESET SLAVE;

mysql > START SLAVE;

 

끄고 -> 초기화 하고 -> 다시 실행해주면 된다.

반응형
반응형

사실 오류 해결이라 하기에도 애매하지만 이글을 검색 해본 분들은

필자 처럼 오타에 주의 해야한다 ㅠㅠ

 

갑자기 이런 메세지를 띄우며 쿼리가 안된다..

아! root ???????

오타입니다.

 

-uroot 로 바꿔주세요

반응형
반응형

Pymysql을 이용해서 작업을 해야하는데

기존에 인터넷에 뿌려져 있는 Python2 버전으로 만약에 실행한 경우 예상치도 못한 오류가 발생할 수 있다.

 

예를들어 아래와 같은 positional argument 오류가 발생할 수 있습니다.

1
takes 1 positional argument but 5 positional arguments (and 1 keyword-only argument) were given
cs

이런 경우

Python3와 다르기 때문에 아래와 같이 수정해주시면 됩니다.

 

 

1
2
3
4
# import 수정 필요
import pymysql.curosors
# connection 속성값을 모두 명시해야함.
dbconnect = pymysql.connect( host =  호스트값, user = DBID, password = 패스워드, database = "mysql", charset = "utf8mb4" )
cs

 

반응형
반응형

module_CRUD.zip
0.04MB

안녕하세요. John Computer 입니다.

매번 페이지 / 메소드 마다 칼럼명과 데이터를 집어넣어서 만드는 번거러움을 없애기 위해서

동적으로 칼럼의 갯수와 상관없이 삽입 수정 삭제가 가능하게 쿼리문을 작성해 놨습니다.

사용법 또한 간단하니 다운받으셔서 이용하세요

 

사용법

1.  input을 생성하여 insert_col = DB칼럼명 / insert_param = DB에 들어갈 데이터값 을 넣는공간을 만들어주세요.

2.  insert_col의 경우 칼럼명을 보여질 필요가 없기 때문에 hidden으로 처리해주시면 됩니다.

3.  ajax에 insert_page.php 경로를 url에 설정 해주시고 colunm / insert_param 과 같은 변수명은 그대로 작동하게 두고 TABLE 명만 바꿔 주시면 됩니다.

 

## 한 화면에 여러 FORM이 존재 할 경우 FORM을 지정하는 선택자를 넣어주세요.

## 테이블명 이외에 바꿀내용은 없습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!DOCTYPE html>
<html lang="en">
 
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
 
<body>
 
  사번 : <input type="text" id="inputemp" class="form-control" name="insert_param">
  <input type="hidden" name="insert_col" value="emp_num" />
 
  이름 : <input type="text" id="inputname" class="form-control" name="insert_param">
  <input type="hidden" name="insert_col" value="name" />
 
  <input type="button" name="" value="등록" onclick="insert_event()" />
  <script src="./jquery.min.js"></script>
 
  <script>
    //입력 클릭시 insert해주는 php 로 데이터 전송하는 함수
    function insert_event() {
      var column_array = $("input[name=insert_col]").length//hidden 되어있는 input 갯수
      //배열 생성
      var column = new Array(column_array); //컬럼 배열선언
      //배열에 값 주입
      for (var i = 0; i < column_array; i++) {
        column[i] = $("input[name=insert_col]").eq(i).val();
      }
      var insert_param_array = $("input[name=insert_param]").length//input type text 개수.
      //배열 생성
      var insert_param = new Array(insert_param_array); //파라미터 배열선언
      //배열에 값 삽입
      for (var i = 0; i < insert_param_array; i++) {
        insert_param[i] = $("input[name=insert_param]").eq(i).val();
      }
      $.ajax({
        type: 'post',
        url: './forms/insert_page.php',
        async: false// 전역변수 설정 변수
        data: {
          url: url,
          column: column, //컬럼
          param: insert_param, //params
          TABLENAME: 'dbo.employee'//테이블명
        },
        success: function(data) {
          alert("입력되었습니다.");
          location.reload();
        },
        error: function(request, status, error) {}
      });
    }
  </script>
</body>
</html>
 
cs

insert Page 입니다. 여기소스를 참고하여 직접 input을 만들어 주세요.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!--
===============================================================================
          insert 모듈
          // INSERT into xxx => SQL
          // VALUES ( yyy )        => SQL2
          // sum_sql = SQL + SQL2
-->
<?php
  include "데이터베이스 설정 경로";
  // DB를 입력하실 분은 DB Con 등 여러 설정을 넣어주세요.
 
  $TABLENAME = $_POST["TABLENAME"]; // 테이블명 가져오기
  $column = $_POST["column"]; // 칼럼명 가져오기
  $param = $_POST["param"]; // 파람값 가져오기
 
  $select_obj_length = count($column);    //컬럼수
  $a_length = count($param);    //value 수
 
  $sql = "INSERT into $TABLENAME";
  $sql2 = " VALUES (";
  $params = array();
  $sql .= "(";
 
  for ($i=0$i < $select_obj_length ; $i++) {
    if($i == $select_obj_length-1){
     $sql .= $column[$i];
     $sql2 .="?";
     break;
    }
    $sql .= $column[$i].",";
    $sql2 .="?,";
  }
 
  for ($j=0$j < $a_length$j++) {
    array_push($params,$param[$j]);
  }
 
  $sql .= ")";
  $sql2 .= ")";
 
  print_r($sql.$sql2);
  print_r($column);
  $sum_sql = $sql.$sql2;
 
  // $params = array(&$column[0], &$column[1], &$column[2]);
  print_r($param);
  sqlsrv_query($con$sum_sql$params);  // $sql 에 저장된 명령 실행
  sqlsrv_close($con);
?>
 
cs

 

insert_page를 이용하여 자동으로 쿼리문을 생성하여 줍니다.

 

나머지 수정 삭제도 첨부파일로 올리니 ajax -> data의 내용을 읽어보시고 본인 프로그램에 맞게 이용해 주시면 됩니다.

반응형