:: Mysql(Mariadb) 한글 깨지는 현상 해결 ::


CentOS에 MariaDB를 설치하고 테스트하던 도중 입력된 한글이 물음표로 보이는 현상이 발생했습니다.

문제는 default character set이 latin1 으로 되어있기 때문인데, 이것을 utf8 인코딩으로 변경해보도록 하겠습니다.



# 1 

mysql 콘솔 창에서 

show variables like 'c%';

을 입력하면 간단하게 character set을 확인.



# 2

vi /etc/my.cnf

centos에서 해당 명령어로 my.cnf 설정 파일을 vi 편집기로 열어줍니다.



# 3

그런 다음 아래 내용을 추가 해줍니다.


[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



# 4

service mysql restart

centos에서 데몬을 재실행 합니다.

(만약 실패한다면, 설정에 오타가 있거나 버전이 위 설정을 지원하지 않는 것)


다시 show variables like 'c%';로

캐릭터 셋이 변경 되었는지 재차 확인합니다.



other problems


만약 database가 여전히 latin1으로 표시된다면 기존에 생성한 database가

latin1으로 설정 되어있기 때문인데, 


drop database DB명;

create database DB명;


해당 database를 날려주고 재생성하면 정상적으로 UTF-8 인코딩으로 적용된 것을 확인할 수 있습니다.



오늘은 MySQL 기본 명령어들을 정리 해보았습니다.

일단 CMD창이나 워크벤치를 열어서 MySQL에 접속 합니다.



  MySQL 기본 명령어들


select version();

MySQL 버전 체크


mysql -u root -p

비밀번호 입력후 엔터 치고,


mysql>CREATE SCHEMA test DEFAULT CHARACTER SET utf8;

스키마 생성 쿼리를 입력하겠습니다. test는 스키마명이고 character set은 utf-8로 설정했습니다. character set을 입력하지 않는다면 기본 설정으로 들어갑니다. 이제 생성된 스키마를 조회 해보겠습니다.


mysql>show databases;

스키마 전체를 보시려면 위와 같이 입력하시면 됩니다.


mysql>SHOW CREATE DATABASE test;

위 와 같은 DML을 입력하면 특정 스키마 이름/생성 DDL을 확인 하실 수 있습니다. 끝에 test는 위에서 생성한 스키마 이름 입니다.


mysql>SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "test";

해당 스키마(test) character set 정보를 조회 합니다.


mysql>ALTER DATABASE test DEFAULT CHARACTER SET utf8;

해당 스키마(test) character set을 변경 합니다.


DROP DATABASE IF EXISTS test;

해당 스키마(test)를 삭제 합니다.



  MySQL 테이블 추가, 삭제


먼저 MySQL Data Type을 간략히 정리 해보았습니다.


▶ Numeric Types

  - 정수(정확한 값) : INTEGER, INT, TINYINT, SMALLINT, TINYINT, MEDIUMINT, BIGINT

  - 고정소수점(정확한 값) : DECIMAL, NUMERIC

  - 부동소수점(근삿값) : FLOAT, DOUBLE

  - 비트값(n) : BIT


▶ String Types

  - CHAR, VARCHAR 

  - BINARY, VARBINARY

  - BLOB, TEXT

  - ENUM

  - SET


▶ Date / Time Types

  - DATE, DATETIME, TIMESTAMP

 

 

CREATE TABLE 테이블명

(   

    no int(8) not null auto_increment primary key,

    name varchar(20) ,

    phone varchar(15) ,

    email varchar(30) ,

    date datetime,

);

테이블을 생성 합니다.


DROP TABLE 테이블명;

테이블을 삭제 합니다.


RENAME TABLE A TO B;

테이블명을 A테이블명에서 B테이블명으로 변경 합니다.


desc 테이블명;

테이블을 정보를 확인 합니다.



  MySQL 컬럼 추가, 수정, 삭제


ALTER TABLE 테이블명 DROP COLUMN 컬럼명;

컬럼을 삭제 합니다.


ALTER TABLE 테이블명 ADD COLUMN 컬럼명 컬럼타입;

생성할 컬럼을 테이블 마지막에 추가 합니다.


ALTER TABLE 테이블명 ADD COLUMN 생성할컬럼명 컬럼타입 AFTER 지정컬럼명 ;

생성할 컬럼을 지정 컬럼 뒤에 추가 합니다.


ALTER TABLE 테이블명 ADD COLUMN 컬럼명 컬럼타입 FIRST;

생성할 컬럼을 테이블 맨 앞에 추가 합니다.


ALTER TABLE 테이블명 CHANGE 기존컬럼명 새컬럼명 컬럼타입 컬럼속성; /* 컬럼명과 타입 속성 변경*/

기존에 있는 컬럼의 이름, 크기, 속성을 변경 합니다.


ALTER TABLE 테이블명 MODIFY 컬럼명 컬럼타입 컬럼속성; /* 컬럼 타입과 속성 변경*/

기존에 있는 컬럼의 크기, 속성을 변경 합니다.







1. 현상


MySQL 5.7.16 버전을 설치하고 root 계정으로 접속, 정상 접속되는 것을 확인했지만 use mysql;을 입력하니 

아래와 같은 문구가 나왔다.


You must reset your password using ALTER USER statement before executing this statement.


비밀번호를 재설정하라는데 일단 시키는데로해야 사용할 수 있을 것 같다.





2. 해결


그냥 MySQL root계정 비밀번호만 바꾸어 주었더니 간단하게 해결되었다.

DDL(Data Definition Language)은 아래와 같다.


ALTER USER 'root'@'localhost' IDENTIFIED BY '새로운 비밀번호';


입력후 테스트..


use mysql;


정상적으로 실행된다.(Workbench 포함)






앞서 MySQL을 설치하였으니 이번엔 Workbench를 설치해보자.

MYSQL Workbench 란 MySQL을 GUI 방식으로 관리하는 도구이다.



Workbench설치과정은 


1. MySQL 다운로드 사이트로 접속 http://www.mysql.com/products/workbench/

    Download Now 버튼 클릭






2. 자신의 운영체제에 맞게 설치한다.







3. 대충 No thanks, just start my download 클릭







4. 다운받은 파일 압축을 풀고 실행 파일을 더블 클릭







5. Workbench 실행화면







6. 기존에 설정되어있는 root 계정으로 들어가면 정상적으로 편집기가 실행된다.








오늘은 Windows 10 환경에서 MYSQL을 설치해보겠습니다.


1. 먼저 MySQL https://dev.mysql.com/downloads/mysql/ 사이트로 가서 Windows (x86, 64-bit), ZIP Archive을 다운받습니다.




▶ No thanks, just start my download를 클릭합니다



2. 다운로드한 파일을 원하는 경로에 압축풀기 (ex C:\dev\mysql-5.7.16-winx64)



3. 시스템 환경변수 설정

윈도우키를 누르고 환경변수 검색하거나 시스템을 검색하여 위 화면처럼 시스템 속성창을 열어줍니다.



환경변수를 클릭하고 새로만들기를 클릭후 MYSQL_HOME을 추가하고, Path를 열어서 %MYSQL_HOME%\bin; 추가 후 확인을 클릭합니다.







 

4MySQL 설정파일 수정

 

 

 

 

 

 - basedir : MySQL 설치 경로

 - datadir : 데이터 저장소 경로

 - port : MySQL이 사용할 Port 번호 (기본적으로 3306 사용)

 

위 내용과 같이 작성하고 파일명과 확장자명을 my.ini 로 수정후 저장합니다.

 

 

▶ 경로를 위와 같이 설정했다면 MYSQL5.7 버전은 data폴더가 없으니 꼭 새로 생성해주도록 합니다.

 

 

5MySQL window 서비스등록

 

 

윈도우키를 누르고 cmd 입력후 관리자 권한으로 실행하기 클릭

 

명령프롬프트창에 sqld --install을 입력하면 성공적으로 서비스가 등록된다.

 

 - MySQL 서비스 등록 : mysqld --install

 - MySQL 서비스 삭제 : mysqld --remove

 

 

 

5MySQL window 서비스 시작

 

 

mysql 서비스시작은 위와 같이 진행해도되고 아래와 같이

 

 - MySQL 서비스 시작 : net start mysql

 - MySQL 서비스 종료 : net stop mysql

 

을 입력해도 됩니다.

 

▶ 만약 서비스가 정상적으로 시작되지않는다면 ?

1. mysqld --remove

2. mysqld --initialize-insecure //insecure 옵션을 주게되면 root 비밀번호가 없고, insecure 옵션을 제거하게되면 랜덤 비밀번호 생성

3. my.ini 경로 점검(특히 data폴더 존재 유무)

4. mysqld --install

5. 재확인

 

 

 

6. MySQL window 연결

 

위 과정이 다 끝났으면 루트 계정으로 접속해봅니다.

근데 cmd창에 mysql -u root -p 을 입력하니까 비밀번호가 틀렸다고 나오네요.

원래는 정상접속이 되어야하는데 mysqld --initialize 명령때문에 비밀번호가 임의로 설정된 것 같습니다.

 

비밀번호를 재설정해도록 하겠습니다.

 

1. net stop mysql 로 실행중인 서비스 종료합니다.

2. my.ini에 skip-grant-tables 추가합니다.

3. net start mysql // 서비스 재실행

4. mysql -u root // mysql (접속시도)

5. UPDATE user SET authentication_string=PASSWORD('비밀번호 입력') WHERE user='root'; (비밀번호변경)

6. flush privileges; (변경사항 적용)

7. my.ini 수정 후 mysql -u root -p 명령어로 비밀번호 적용 확인