외부 서버 mysql DB 접속 장애 발생시


확인해야 할 상황-


1. mysql 접속하여

mysql -p -u root

mysql비밀번호 입력


2.쿼리가 쌓이고 있는지 확인

mysql> show processlist;

+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+-------+------------------+
| 72 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)

<-- 정상인 상황


mysql> show processlist;
+------+----------------------+-----------------------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+----------------------+-----------------------+------+---------+------+-------+------------------+
| 72 | root | localhost | NULL | Query | 0 | NULL | show processlist |
| 3519 | unauthenticated user | 112.*.*.*:53949 | NULL | Connect | NULL | login | NULL |
+------+----------------------+-----------------------+------+---------+------+-------+------------------+
2 rows in set (0.00 sec)


unauthenticated user <-- 이 부분이 많이 쌓일 경우 속도가 늦어짐..


해결책 ->

mysqld 재시작 및

/etc/hosts 설정 파일에 접속 IP와 호스트명을 넣어 주면 해결.





참고 1: http://blog.naver.com/sihal7?Redirect=Log&logNo=110083544250

참고 2: http://gorder.blog.me/39239536

참고 3: http://www.cyworld.com/oracooler/9179996

-->

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

skip_name_resolve 파라메터에 대한 굉장히 큰 오해

임창선 2011-12-06 13:21:52 주소복사
조회 181 스크랩 0

MySQL 파라메터 중 skip_name_resolve

MySQL 레퍼런스를 보면

"skip_name_resolve를 적용하게 되면 MySQL 서버가 클라이언트들의 접속시 DNS LOOKUP 과정을 생략시킨다."

덧붙여서 인터넷에 있는 글들을 본다면 "그러므로 속도가 빠르다" (인터넷 대부분의 글들) ...... 라고 설명이 되어 있다.

오라클은 접근 하려는 스키마의 ID와 패스워드를 알고 있는 상태에서 각 서버간의 네트워크 접근 권한만 허용된다면,

리스너를 통해 마음대로 접속할 수 있다. ( 물론 sqlnet.ora 파일에 접근 제한 설정이 안된 상태)

하지만 그와 다르게 MYSQL은 DB가 자체적으로 ID 와 PASSWORD그리고 IP(HOST)를 체크한다.

위 3가지 조건 중 하나라도 만족을 하지 못한다면, DB에 접근 할 수 없다.

MYSQL의 계정 권한이 저장된 USER 테이블을 조회한다면 이러한 결과값을 볼수 있다.

(또한 hash 함수로 암호화 저장 되어 있는 password를 볼 수 있다.)

mysql> select user, host , password from mysql.user;
+----------+---------------------+-------------------------------------------+
| user | host | password |
+----------+---------------------+-------------------------------------------+
| root | localhost | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
| repl | % | *A424E797037BF97C19A2E88CF7891C5C2038C039 |
| dumpuser | 192.168.100.100 | *56C09388C92050AD66D96D207790DFBA76CD410B |

| testuser | kthcorp | *56C09388C92050AD66D96D207790DFBA76CD410B |
+----------+--------------------+-----------------------------------------------+

해당 계정들을 대상으로 하여서 서버로의 접근 상황을 예로 든다면

일단 해당 ID와 패스워드를 모두 알고 있다고 하여도 모든 계정들의 접근에는 제한이 있다.

왜냐하면 host 컬럼에 등록된 IP 권한들이 모두 다르기 때문이다.

1. root 계정의 경우 localhost 로 등록되어 있어서 로컬에서만 접근이 가능하다.

(보안상 root는 로컬에서만 접근하도록 허용하는 것이 좋다.)

2. repl 계정의 경우 %로 되어 있다.

%는 어디서 접근을 하던지 간에 무조건 id와 패스워드만을 알고 있다면 접근을 허용 해준다.

3. dumpuser의 경우 192.168.100.100이라는 곳에서만 접근을 허용 해준다.

4. testuser의 경우 kthcorp라는 호스트를 가진 클라이언트가 접근 요청시에만 허용 해준다.

위의 1,2,3 의 경우는 모두 MYSQL 서버가 클라이언트 접근 요청시 자체적으로 판단이 가능하다는 것을 알 수 있다.

하지만 4번의 경우 MYSQL이 kthcorp 라는 호스트명을 가진 서버가 어느 서버인지를 알 수가 없다.

그러므로 4번 testuser 계정이 접근을 요청할 경우,

MySQL 서버는 먼저 /etc/hosts 파일에서 kthcorp라는 호스트명을 가진 서버의 ip를 체크하여 접근을 허용해준다.

가상의 시나리오를 한가지 생각하자면,

MySQL 서버에 저러한 host명으로 등록된 계정들이 굉장히 빈번하게 접근할 경우,

그 때마다 MYSQL은 일일이 hosts 파일을 체크하며, 접근을 제한하려 하므로 서버에는 부하가 생길 것이다.

그러므로 skip_name_resolve 라는 파라메터를 설정하여 이러한 룩업 과정을 생략함으로,

서버에 접근 부하를 줄일수 있다고 한다면 이 얼마나 좋은 상황인가.....?

하여 직접 테스트를 해보았다.

결론은 skip_name_resolve 파라메터를 적용한다면, 위의 룩업 과정을 생략한다.

그런데 중요한 점은 인증 과정을 생략하고 접근을 허용해주겠다는 의미가 아니라,

이러한 인증 없이 그냥 HOST로 등록된 계정들은 무시하겠다는 의미이다....

그러므로 skip_name_resolve 파라메터를 적용한 순간부터는 HOST명으로 등록된 계정들은 모두 서버에 접근할 수 없다.

(localhost, ip, %로 등록된 계정만 접근할 수 있다)

일반적으로 DBA 조직이 운영하는 서비스 DB에서는

산발적으로 개별 클라이언트들을 모두 MySQL 서버로 붙게 하는 구성은 하지 않을 것이다.

DB 앞단에 존재하는 WAS 서버에서 커넥션을 조절하며, 관리를 하기에

이러한 skip-name-resolve와 관련된 이슈 사항을 접할 일은 사실상 흔치 않을 것이다.

/etc/hosts 파일과 mysql.user 테이블의 상호 연관성 테스트 시나리오

1. MySQL 서버 hosts 파일에 등록된 클라이언트 서버의 host ip 부분을 삭제 한후,

클라이언트에서 host로 등록된 계정 접속을 시도할 경우 접근이 불가능함을 알 수 있다.

단 최초 mysql 서버 오픈 이후 이미 인증한 hosts에 한해서는 hosts 파일을 삭제해도 접근이 가능함을 알 수 있다.

(메모리에 host 정보 기록됨)

2. skip_name_resolve 설정된 MySQL 서버에 /etc/hosts가 등록된 계정으로도 접근 불가능함을 알 수 있다.

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

'운영체제 > MySQL' 카테고리의 다른 글

MySql-Password 변경  (0) 2012.10.30
MySQL 기본 명령어 정리  (0) 2012.10.30
MySQL 사용자 추가 및 데이터베이스 추가 (2009/11/03 수정)  (0) 2012.10.30
MySQL 총정리  (0) 2012.10.30
Mysql Dump 백업,복구  (0) 2012.10.30

출처 :: http://cauca.springnote.com/pages/328015.xhtml


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

1. mysql 실행 중에 비밀번호 변경방법 - update문을 이용하여 변경한다.


mysql > use mysql


mysql DB를 이용한다.


mysql> update user set password=password('new-pw')

> where user='root';


mysql> flush privileges; → 적용



2. mysqladmin 명령어를 이용한 비밀번호 변경방법




3. root 패스워드를 분실한 경우


mysql을 오랫동안 사용하지 않은 경우에는 root 계정의 비밀번호를 잊어버려 당황할 때가 있을 수가 있다. 서버 관리자라면 이런 경우를 대비하여 아래와 같이 새로 설정하는 방법을 숙지 해야 할 것이다.


① 실행중인 mysql 종료

#] ps -ef | grep mysqld

root 9567 1 0 Mar16 ? 00:00:00 sh ./mysqld_safe
root 9576 9567 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld
root 9578 9576 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld
root 9579 9578 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld

#] killall mysqld


② grant-table 미사용모드로 mysql 시작 (권한 테이블을 사용하지 않는 옵션으로 데몬 실행)

#] ./safe_mysqld --skip-grant-tables &

[1] 12084

#] Starting mysqld daemon with databases from /usr/local/mysql/data

#] ./mysql -u root mysql

.......

mysql>

※ mysql_safe 명령어는 mysql 데몬을 실행시키는 명령어임.


③ update 문으로 root 사용자 비밀번호 갱신

mysql> update user set password=password('new-pw')

> where user='root';


④ 실행중인 mysql 종료 (권한 테이블을 사용하지 않는 데몬을 종료)

#] ps -ef | grep mysqld

root 12084 11558 0 20:10 pts/2 00:00:00 sh ./mysqld_safe --skip-grant-ta
root 12090 12084 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12092 12090 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12093 12092 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld

#] killall mysqld

mysqld daemon ended
[1]+ Done ./mysqld_safe --skip-grant-tables


⑤ mysql 데몬 재 실행 후 갱신된 비밀번호로 로그인

#] ./safe_mysqld &

[1] 12102


#] Starting mysqld daemon with databases from /usr/local/mysql/data


#] ps -ef | grep mysql

root 12102 11558 0 20:13 pts/2 00:00:00 sh ./mysqld_safe
root 12108 12102 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12110 12108 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12111 12110 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld


#] mysql -u root -p

출처 :: http://kwon37xi.egloos.com/1634694


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

MySQL의 기본 명령어와 SQL문 정리. 내가 RDBMS에 완전 문외한이기 때문에 기본 SQL쿼리까지...
Redhat Linux 7.3, MySQL 3.23.58 에서 테스트함.
설치는 Redhat 기본 제공 RPM으로 했다.

데이터베이스 접속

$ mysql -u 사용자명 -p dbname


설치 직후에는 root 사용자에 비밀번호가 없으므로 다음과 같이 접속하여 MySQL을 관리할 수 있다.

$ mysql -u root mysql



비밀번호 변경
MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다.
다음 세가지 방법으로 비밀번호를 변경 할 수 있다.


  • mysqladmin이용
    $ mysqladmin -u root password 새비밀번호

  • update문 이용
    $ mysql -u root mysql

    mysql> UPDATE user SET password=password('새비밀번호') WHERE user='root';
    mysql> FLUSH PRIVILEGES;


  • Set Password 이용
    SET PASSWORD FOR root=password('새비밀번호');


일단 root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.

사용자 추가/삭제

mysql> GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';


username 이라는 사용자를 password라는 비밀번호를 갖도록 하여 추가한다. username은 dbname이라는
데이타베이스에 대해 모든 권한을 가지고 있다.
username 사용자는 로칼 호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면

GRANT ALL PRIVILEGES ON dbname.* TO username@'%' IDENTIFIED BY 'password';


위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
추가 : '%'를 호스트네임으로 지정해도 모든 호스트에서 접속할 수 없었다. 각 호스트별로 다 지정해야 했다.
아래 댓글에서 rukikuki님이 알려주셨습니다.
GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'%' IDENTIFIED BY 'password' ;
처럼 'username' 이런식으로 홑따옴표를 username 에도 붙여야 하더군요..

http://tech.zhenhua.info/2009/01/mysql-error-104528000-access-denied-for.html 에 따르면 '%'란 localhost 를 제외한 모든 호스트를 뜻한다고 한다. 즉, localhost에 대해서는 명시적으로 따로 권한을 지정해야 한다.

불필요한 사용자 삭제는

mysql> DLETE FROM user WHERE user='username';
mysql> FLUSH PRIVILEGES;



데이터베이스 생성/보기


  • 데이터베이스를 생성하고,
    mysql> CREATE DATABASE dbname;

  • 현재 존재하는 데이터베이스 목록을 보여준다.
    mysql> SHOW DATABASES;

  • 특정 데이타베이스를 사용하겠다고 선언한다.
    mysql> USE dbname;

  • 쓸모 없으면 과감히 삭제한다.
    mysql> DROP DATABASE [IF EXISTS] dbname;

    IF EXISTS 옵션은 비록 데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.



테이블 생성/보기


  • 테이블을 생성하고,
    mysql> CREATE TABLE tablename (
    column_name1 INT,
    column_name2 VARCHAR(15),
    column_name3 INT );

  • 현재 데이타베이스의 테이블 목록을 보고
    mysql> SHOW TABLES;

  • 테이블 구조를 살펴본다.
    mysql> EXPLAIN tablesname;
    혹은
    mysql> DESCRIBE tablename;

  • 이름을 잘못 지정했으면 이름을 변경할 수도 있다.
    mysql> RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];

  • 필요 없으면 삭제한다.
    mysql> DROP TABLE [IF EXISTS] tablename;



현재 상태 보기


mysql> status

--------------
mysql Ver 11.18 Distrib 3.23.58, for pc-linux (i686)

Connection id: 26
Current database: study
Current user: study@localhost
Current pager: stdout
Using outfile: ''
Server version: 3.23.58
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: euc_kr
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 2 hours 9 min 59 sec

Threads: 1 Questions: 160 Slow queries: 0 Opens: 28 Flush tables: 1
Open tables: 1 Queries per second avg: 0.021
--------------



INSERT

mysql> INSERT INTO tablename VALUES(값1, 값2, ...);

혹은

mysql> INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);



SELECT

mysql> SELECT col1, col2, ... FROM tablename;


컬럼명을 *로 하면 모든 컬럼 의미.

mysql> SELECT col1 AS '성명', col2 AS '국어점수' FROM grade;


컬럼의 이름을 바꿔서 출력.

mysql> SELECT * FROM tablename ORDER BY col1 DESC;
mysql> SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;


DESC는 내림차순 ASC는 오름차순.

mysql> SELECT * FROM grade WHERE korean < 90;


조건줘서 SELECT.

mysql> SELECT * FROM grade LIMIT 10;


결과중 처음부터 10개만 가져오기

mysql> SELECT * FROM grade LIMIT 100, 10;


결과중 100번째부터 10개만 가져오기. 첫번째 레코드는 0번 부터 시작한다.

UPDATE

mysql> UPDATE tablename SET col1=새값 WEHER 조건



DELETE

mysql> DELETE FROM tablename WEHRE 조건



mysql에서 쿼리 결과 세로로 보기
-E 옵션을 줘서 실행한다.

$ mysql -E -u root -p mysql



mysql에서 발생한 오류나 경고 다시 보기

mysql> show errors;
mysql> show warnings;








-----------------------------------------------------------------------------------



  • rukikuki 2009/09/03 16:04 # 삭제답글
  • 이 포스팅으로 MySQL 명령어에 많은 도움을 받았던 유저입니다.

    다름이 아니라. GRANT ALL PRIVILEGES 에서 사용자가 속해있는 호스트를 % 로 지정했을 때 속해있는 호스트의 ip 에 관계없이 접속할 수 있어야 하는데 그렇게 해도 접속이 안된다고 하셔서 첨언합니다.

    GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'%' IDENTIFIED BY 'password' ;

    처럼 'username' 이런식으로 홑따옴표를 username 에도 붙여야 하더군요..

    늘 건승하시고 주님안에서 원하시는 바 다 이루시길 기도합니다

  • 호비스 2011/09/19 01:41 # 삭제답글

    IF EXISTS의 명확한 명령어 뜻은
    앞절에 쿼리문을 실행할때 뒷절에 테이블명, 혹은 컬럼명이 존재하는지
    여부를 판단하여 수행하라는 뜻입니다. ^^
  • 권남 2011/09/19 03:45 #

    의미를 명확히 해주셔서 감사합니다.

'운영체제 > MySQL' 카테고리의 다른 글

mysql DB 속도 저하로 연결 안될시  (0) 2012.11.05
MySql-Password 변경  (0) 2012.10.30
MySQL 사용자 추가 및 데이터베이스 추가 (2009/11/03 수정)  (0) 2012.10.30
MySQL 총정리  (0) 2012.10.30
Mysql Dump 백업,복구  (0) 2012.10.30

MySQL 사용자 추가 및 데이터베이스 추가 (2009/11/03 수정)

출처 :: http://www.happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&wr_id=237




mysql> use mysql;
mysql> create database 디비명;


## DB 생성하기
mysql> insert into db (host, db, user, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_priv, grant_priv, references_priv, index_priv, alter_priv) values ('localhost', '디비명', '디비아이디', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

사용하시려는 권한에 따라 해당 기능에 대한 부여권한은 달라질 수 있습니다.
일반적으로 특별한 기능을 필요로 하지 않는 한도 내에서는 아래와 같은 권한만 포함이 되면 됩니다.

자세한 사항은 MySQL 매뉴얼을 참고 (조회 기능 제공)
- http://www.mysqlkorea.co.kr/sub.html?mcode=develop&scode=01&lang=k

- select, insert, update, delete, create, drop, index


## 사용자추가 (방법1)
mysql> insert into user (host, user, password) values ('localhost', '아이디' ,password('비밀번호'));


## 사용자추가 (방법2) 기존 암호형식으로
mysql> insert into user (host, user, password) values ('localhost', '아이디' , password=old_password('비밀번호'));


## mysql 다시 시작
/usr/local/mysql/bin/mysqladmin -uroot -p비밀번호 reload


## 기존 암호형식으로 비밀번호 저장하기
mysql 4.1 이후에는 비밀번호 암호화가 변경되었으므로 아래의 명령어를 한번 실행
mysql> update user set password=old_password('새 비밀번호') WHERE user = 'root';


전체 테이블 보기

--데이터베이스설정 use문
use mysql;--시스템테이블 접근하기위해

--전체테이블보기
show tables;

-- 테이블 구조보기
describe user;--user테이블 구조 보기
grant 테이블

-- user
user테이블에 정리된 권한은 전역값이라서 이 시스템의 모든 데이터베이스에 적용된다.(mysql포함)

-- db
사용자가 어떤 호스트에서 어떤 데이터베이스로 접근할 수 있는지 결정, 이 테이블에 정리된 권한은 특정 행에 올라와 있는 모든 데이터베이스에 적용된다.(DDL,DML,DCL등의 권한)

-- host
user와 db테이블을 보완하는 기능을 한다. 사용자가 여러 호스트에서 데이터베이스에 접속하려면 user나 db테이블에 호스트를 등록하지 않고 그 대신에 host테이블에 각각의 사용자-호스트 조합에 대한 권한을 명시할 수 있다.

-- table_priv, columns_priv 테이블
테이블 수준의 권한과 열 수준의 권한을 지정한다. 이들은 db 테이블과 비슷하게 동작하지만 특정 데이터베이스에 있는 테이블에 대한, 특별 테이블에 있는 열에 대한 권한만을 준다.

-- grant 문으로 권한변경시
flush privileges; 명령어를 실행해야 권한이 변경된 사실을 mysql에 알린다.



show로 정보얻기

--전체테이블보기
show tables;

--사용할수 있는 데이터베이스보기
show database;

--테이블 열 보기(books테이블)
show columns from books;

--해당 계정의 세부적인 권한을 보여준다.
show grants for 계정명;

--지정한 테이블에 속한 인덱스를 나열한다.
show index from 테이블;

--시스템 아이템의 수에 대한 정보를 얻는다.
show status;
ex) show status like variable_name

--시스템 변수 보기(mysql 버전같은것을 알수있다.)
show global variables;
show session variables;

--db에 접속한 세션 리스트
show processlist

--각 테이블에 대한 정보 보여주기
show table status

--user가 가진 권한을 설정하기 위한 grant 문을 보여준다.
show grants for user

--서버가 지원하는 다른 권한을 보여준다.
show privileges

--데이터베이스를 생성할수 있는 create database문을 보여준다.
show create database db

--테이블을 생성할수 있는 create table 문을 보여준다.
show create table 테이블명

--사용할수있는 테이블형을 보여주고 어떤것이 기본값인지 알려준다.
show engines;

--innodb저장엔진의 현재 상황에 대한 데이터를 보여준다.
show innodb status

--bdb 저장 엔진에 대한 로그 파일에 대한 정보를 보여준다.
show logs

--마지막 쿼리가 실행되었을때 생긴 에러,경고,주의를 보여준다.
show warnings

--마지막 쿼리가 실행되었을때 생긴 에러를 보여준다.
show errors

실행계획보기
쿼리문 앞에 EXPLAIN을 붙인다.




MySQL ver. 5.0.21 윈도우즈 셋업 파일용.

$Mysql_home/bin/mysql -u root -p
enter the password : *******
Mysql>

# 데이터베이스 생성
Mysql> use mysql;
Mysql> create database databeseName;

# 사용자 계정 추가
Mysql> Grant ALL ON <DATABASE 명 혹은 테이블명> TO <사용자명>@<호스트명> IDENTIFIED BY '비밀번호';

# 데이터베이스 권한 설정

Mysql> insert into db values('%','디비이름','UserName',
->'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
--> desc db; 하여 컬럼의 갯수 확인 후 'Y'옵션 지정 함...ㅡㅡㅋ

Mysql> INSERT INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections)
VALUES('localhost', 'zzong', PASSWORD('****'),
'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0);

Mysql> flush privileges;



<< 자료인용 >>
http://blog.naver.com/netfron/140034841987
http://blog.naver.com/miojj04?Redirect=Log&logNo=100034315177




 

'운영체제 > MySQL' 카테고리의 다른 글

MySql-Password 변경  (0) 2012.10.30
MySQL 기본 명령어 정리  (0) 2012.10.30
MySQL 총정리  (0) 2012.10.30
Mysql Dump 백업,복구  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30

출처 및 더 자세한 사항은


http://radiocom.kunsan.ac.kr/lecture/start.html


--------------------------------------------------------------------------------------------------------------------



비밀번호 변경


데이터베이스에 접속하기 위해서는 반드시 비밀번호가 필요하며, 데이터베이스의 안전을 위해서는 비밀번호를 변경할 필요도 존재한다. MySQL에서 비밀번호의 문자 길이에 제약이 없다.

사용자 접속에서 client 업그레이드 오류가 나오면 old_password를 실행하여 해결한다.

mysql에서 root의 비밀번호를 잊었을 때 새로 지정하는 방법이 있다.

【방법1】 mysql_setpermission을 이용하여 비밀번호를 변경
【방법2】 set 문을 이용하여 비밀번호를 변경

다음은 사용자 'kim'의 비밀번호를 'kim_pass'으로 변경한 예이다. 

주의:
  password() 함수를 사용하지 않아도 되는 비밀번호가 암호화 되는 경우
     1) GRANT...IDENTIFIED BY 
     2) mysqladmin password문을 사용한 비밀번호 변경

  password() 함수를 사용해야만 비밀번호가 암호화 되는 경우
     1) SET PASSWORD
     2) INSERT 
     3) UPDATE 문을 사용하여 비밀번호를 변경할 때


SET PASSWORD FOR user= PASSWORD()를 사용한 경우 user로 특별하게 지목한 사용자의 비밀번호를 변경함
(root가 다른 사용자의 비밀번호를 수정할 경우에 주로 사용함)
SET PASSWORD=PASSWORD()를 사용한 경우 현재 로그인한 자신의 비밀번호 수정

mysql의 root 계정 비밀번호 설정

【예제】
shell> mysql -u root ☜ 처음에는 root의 비밀번호가 아직 지정돼 있지 않음
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');
mysql>

또는 다음과 같은 방법으로 지정해도 된다.
shell> mysqladmin -u root password "newpwd"
shell> mysqladmin -u root -h host_name password "newpwd"

또는 다음과 같은 방법으로 지정해도 된다.
shell> mysql -u root
mysql> UPDATE mysql.user SET PASSWORD=password('newpwd')

-> WHERE user='root';
mysql> FLUSH PRIVILEGES;
【예제】
# pgrep mysqld
1025
1003
# mysql -u root -p
Enter password: kunsan1234 

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('arirang1234');
mysql> SET PASSWORD FOR 'root'@'jijoe' = PASSWORD('arirang1234');
mysql> select current_user;
 
mysql> exit
Bye
# mysql -u root -p
Enter password: arirang1234 
 
mysql>



【예제】 % mysql --user=root -p mysql password : *********** mysql> GRANT USAGE -> ON *.* -> TO kim@'%' -> IDENTIFIED BY 'kim_pass'; mysql> FLUSH PRIVILEGES; 【예제】 # mysqladmin -u kim password kim_pass 현재 로그인한 자신의 비밀번호는 다음과 같이 변경할 수 있다. 【예제】 % mysql -u joe -pkim1234 mysql> SET password=password('joe_pass'); Query OK, 0 rows affected (0.00 sec) mysql> exit % mysql -u joe -pjoe_pass mysql> mysql의 root password 재설정 SET에 의한 일반 사용자의 비밀번호 변경 mysqladmin password

'운영체제 > MySQL' 카테고리의 다른 글

MySQL 기본 명령어 정리  (0) 2012.10.30
MySQL 사용자 추가 및 데이터베이스 추가 (2009/11/03 수정)  (0) 2012.10.30
Mysql Dump 백업,복구  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30

출처 :: http://ucnn.tistory.com/39



--------------------------------------------------------------------------

Dump

Databases 전체 덤프

mysqldump -u[아이디] -p[패스워드] --all-databases > 저장될 파일명

ex) mysqldump -uroot -ppass --all-databases > test.sql

Database만 덤프

mysqldump -u[아이디] -p[패스워드] [디비명] > 저장될 파일명

ex) mysqldump -uroot -ppass test > test.sql

테이블만 덤프

mysqldump -u[아이디] -p[패스워드] [디비명] [테이블명] > 저장될 파일명

ex) mysqldump -uroot -ppass test student > test.sql

테이블구조만 덤프

mysqldump -u[아이디] -p[패스워드] --no-data [디비명] [테이블명] > 저장될 파일명

ex) mysqldump -uroot -ppass --no-data test student > test.sql

테이블구조를 제외한 데이터만 덤프

mysqldump -u[아이디] -p[패스워드] --no-create [디비명] [테이블명] > 저장될 파일명

ex) mysqldump -uroot -ppass --no-create test student > test.sql

복구

덤프파일을 이용한 복구

mysql -u[아이디]-p[패스워드] [디비명]< 파일명


'운영체제 > MySQL' 카테고리의 다른 글

MySQL 사용자 추가 및 데이터베이스 추가 (2009/11/03 수정)  (0) 2012.10.30
MySQL 총정리  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30
Source 사용시 한글 깨짐 현상  (0) 2012.10.30

출처 :: http://ucnn.tistory.com/38


-------------------------------------------------------------------------------


컬럼 추가
mysql> alter table 테이블명 add 컬럼명 varchar(50);

컬럼 삭제
mysql> alter table 테이블명 drop 컬럼명;

컬럼명,타입 변경
mysql> alter table 테이블명 change 컬럼명 컬럼명1 varchar(12);

컬럼 타입 수정
mysql> alter table 테이블명 modify 컬럼명 varchar(14);

테이블명 수정
mysql> alter table 테이블명 rename 테이블명1;

 

'운영체제 > MySQL' 카테고리의 다른 글

MySQL 총정리  (0) 2012.10.30
Mysql Dump 백업,복구  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30
Source 사용시 한글 깨짐 현상  (0) 2012.10.30
MySQL db생성과 사용자 권한 등록  (0) 2012.10.30

출처 :: http://ucnn.tistory.com/38


-------------------------------------------------------------------------------


컬럼 추가
mysql> alter table 테이블명 add 컬럼명 varchar(50);

컬럼 삭제
mysql> alter table 테이블명 drop 컬럼명;

컬럼명,타입 변경
mysql> alter table 테이블명 change 컬럼명 컬럼명1 varchar(12);

컬럼 타입 수정
mysql> alter table 테이블명 modify 컬럼명 varchar(14);

테이블명 수정
mysql> alter table 테이블명 rename 테이블명1;

 

'운영체제 > MySQL' 카테고리의 다른 글

Mysql Dump 백업,복구  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30
Source 사용시 한글 깨짐 현상  (0) 2012.10.30
MySQL db생성과 사용자 권한 등록  (0) 2012.10.30
Mysql 유저추가  (0) 2012.10.30

출처 :: http://ucnn.tistory.com/37

---------------------------------------------------------------------------------------------------


텔넷으로 로컬 접속에서 작업증 한글깨짐에 대한 설명입니다.

mysql> show full columns from zipcode;
+---------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+---------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| NO | int(5) | NULL | | PRI | 0 | | select,insert,update,references | |
| ZIPCODE | varchar(7) | euckr_korean_ci | YES | | NULL | | select,insert,update,references | |
| SIDO | varchar(4) | euckr_korean_ci | YES | | NULL | | select,insert,update,references | |
| GUGUN | varchar(13) | euckr_korean_ci | YES | | NULL | | select,insert,update,references | |
| DONG | varchar(43) | euckr_korean_ci | YES | | NULL | | select,insert,update,references | |
| BUNJI | varchar(17) | euckr_korean_ci | YES | | NULL | | select,insert,update,references | |
+---------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
6 rows in set (0.00 sec)

mysql> source zipcode.sql
mysql> select * from zipcode Limit 3;
+-------+---------+--------+-----------+---------------------+-------+
| NO | ZIPCODE | SIDO | GUGUN | DONG | BUNJI |
+-------+---------+--------+-----------+---------------------+-------+
| 45001 | 325-842 | 충남 | 서천군 | 한산면 동산리 | |
| 45002 | 325-843 | 충남 | 서천군 | 한산면 동지리 | |
| 45003 | 325-842 | 충남 | 서천군 | 한산면 마량리 | |
+-------+---------+--------+-----------+---------------------+-------+
3 rows in set (0.01 sec)

==== 현재 터미널 설정과 불러오는 파일 문자셋이 같지 않으면 글이 깨집니다.
mysql> drop table zipcode.sql

mysql> set names euckr;
mysql> source zipcode.sql

mysql> select * from zipcode Limit 3;
+-------+---------+------+--------+---------------+-------+
| NO | ZIPCODE | SIDO | GUGUN | DONG | BUNJI |
+-------+---------+------+--------+---------------+-------+
| 45001 | 325-842 | 한글 | 한글 | 한글 | |
| 45002 | 325-843 | 한글 | 한글 | 한글 | |
| 45003 | 325-842 | 한글 | 한글 | 한글 | |
+-------+---------+------+--------+---------------+-------+
3 rows in set (0.00 sec)

mysql>

======
업한 글이 깨지는 경우
주로 만든 sql파일 저장 시 문자셋, DB에 집어 넣을때( mysql 콘솔, php 인서트시 ), DB 설정시 문자셋 이 세가지 가 맞지 않으면 깨집니다.


깨지는 예)
만든 sql파일 인서트시 접속 터미널 문자셋과 생성 DB collation이 맞지 안으면 깨짐
만든 sql파일 저장시 설정한 문자셋과 DB collation이 맞지 안으면 깨짐

'운영체제 > MySQL' 카테고리의 다른 글

Mysql Alter  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30
MySQL db생성과 사용자 권한 등록  (0) 2012.10.30
Mysql 유저추가  (0) 2012.10.30
Mysql 기본셋팅  (0) 2012.10.30

출처 : http://ucnn.tistory.com/35

----------------------------------------------------------------------------------

MySQL 실행(mysql -u root -p) 후 show databases; 명령을 내리게 되면


기본적으로 생성되어있는


mysql> show databases;


+-------------+
| Database |
+-------------+
| mysql |
| test |

+-------------+
2 rows in set (0.06 sec)


mysql 과 test 두 녀석이 보인다.


여기서 mysql은 시스템 관리를 위해 설정된 데이터베이스 이다.

이곳 주요 기능은 계정별 password관리 사용자 권한을 설정 해주는 곳이기에


* 절대로 지우면 안된다 *


test는 말 그대로 테스트 디비


자! 본격적으로 디비를 생성하고 비밀번호와 아이디를 부여해보자.

mysql> create database ju;


잘 만들어 졌을까?


mysql> show databases;

+-------------+
| Database |
+-------------+
| mysql |
| test |

| ju |

+-------------+
3 rows in set (0.06 sec)


제대로 생성된거 같으니 ju 디비에 비번을 걸어줘야 하는데

그 전에 해야할게 mysql 에 사용자를 등록해줘야 한다.

사물함 겉면에다 이름을 써넣는 거라고 할까..나..


mysql> use mysql

mysql> insert into user (host,user,password)

-> values ('localhost','zzong','password('1234'));


(호스트명) (사용자명) (비밀번호)


5.0 이전 버전에서는 위와같이 쉽게 사용자 등록이 되었으나


5.0 부터는 다음과 같이 바뀌었다 ...


INSERT INSERT INTO user
(Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv,
Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv,
Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv,
Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type,
ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections)
VALUES('localhost', 'zzong', PASSWORD('****'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y',
'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0);


설명하기도 복잡하니.. VALUES ( ) 요기만 잘 설정해서 등록하도록 하자.

로컬호스트에 쫑 이라는 아이디로 비번을 **** 로 사용자를 추가하겠다는 뜻이다.


자 그럼 제대로 추가됐는지 보자











맨 마지막 부분에 zzong 로 설정되어 있으며 password 는 암호로 관리되어 있다.


miojj 라는 이름표

mio 라는 이름표 를 생성한 디비(ju) 에 가져다 붙이면

각 디비들은 고유의 아이디와 비번을 가지게 되어 보안성을 띠게 된다.


자!이제 디비에 자물쇠를 달아서 혼자만 사용할 수 있도록 하자.


mysql > insert into db

-> values ('localhost','lee','zzong','y','y','y','y','y','y','y','y','y','y','y','y');

(디비명)(사용자명) (설정권한의 갯수를 모두 지정)


'y' 가 열두개 쓰여진 이유?


참고로 보는 책에는 단순히

삽입, 검색, 수정 등 이 권한은 10개로 되어있기 때문에 권한의 사용여부를

'y','n'로 표시한다 라고 쓰여져 있지만 권한의 갯수는 버전별로 틀리다.

현재사용버전은 12개 인줄도 모르고 한 시간이나 네이버를 헤매다니...


* 확인 방법은 아래 사진 참조 *

















Host, Db, User 을 뺀 나머지 ..


자! 자물쇠를 달았으면 ' 디비가 내 것이다' 라고 선포하자.


mysql > flush privileges;

( 설정한 권한의 적용 : 1. 컴퓨터 재부팅

2. flush privileges; )



이제 디비가 제대로 열리는지 확인해보기 위해

mysql 을 다시 시작해보자


mysql > \q

C:> mysql -u zzong -p

Enter password : ****


조금 헷갈렸던 부분인데 C:> mysql -u zzong -p 가운데 zzong 는

디비명을 쓰는 것이 아니라 사용자 아이디를 쓰는 것. root 접속법 때문에 헷갈렸다.


문제가 없다면 웰컴 투 마이에스큐엘 모니터 어쩌구 저쩌구 나오면서

성공적으로 접속이 완료된다.


마지막으로 root 에도 비번을 걸어주자. '보안철저'


mysql> use mysql;
mysql> update user set password=password('123456') where user='root';
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2 Changed: 2 Warnings: 0


mysql> flush privileges; <--- 적용
flush privileges; 를 하지 않으면 mysql에서 빠져나와서 root 로그인이 안된다.

확인

mysql> select host, user, password from user;


+----------------------------------------------------------------+
| Host user password |
+----------------------------------------------------------------+
| localhost root 2e01146f5c065853 |
| localhost.localdomain root 2e01146f5c065853 |
+----------------------------------------------------------------+


이제 다음으로 해야 할 일은 테이블 만들어서 디비에 자료를 저장해보고

자료를 웹페이지에 출력해보자.


간단하게 회원가입 페이지 작성 !

 

'운영체제 > MySQL' 카테고리의 다른 글

Mysql Alter  (0) 2012.10.30
Source 사용시 한글 깨짐 현상  (0) 2012.10.30
Mysql 유저추가  (0) 2012.10.30
Mysql 기본셋팅  (0) 2012.10.30
MySQL 테이블 수정 데이터베이스  (0) 2012.10.30

+ Recent posts