Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- hackthissite
- Scala
- 경제
- Python
- mysql
- backend
- 딥러닝
- deep learning
- Shellcode
- BOF
- webhacking
- ChatGPT
- hackerschool
- 챗GPT
- Web
- 리눅스
- Javascript
- c++
- 파이썬
- flask
- php
- 인공지능
- 러닝 스칼라
- 웹해킹
- BOF 원정대
- 러닝스칼라
- hacking
- Linux
- 백엔드
- c
Archives
- Today
- Total
jam 블로그
[명령어] mysql 사용법 본문
728x90
데이터베이스 접속
$ 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';
위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
추가 : '%'를 호스트네임으로 지정해도 모든 호스트에서 접속할 수 없었다. 각 호스트별로 다 지정해야 했다.
불필요한 사용자 삭제는
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
=============================================
1. Mysql 기본 사용법
->Mysql 데이터베이스 접속하기
# mysql -u root mysql
-> mysql 관리자 root 패스워드 설정하기
# mysql -u root mysql
mysql> update user set password = password('shcm0816') where user = ' root';
-> 빠져나간후 데이터베이스를 재시작
# mysqladmin -u root reload
->패스워드 입력
# mysql -u root -p mysql
< 여러가지 관련 명령어 >
->데이터베이스 확인
mysql> show databases;
->테이블 확인
msyql> show databases;
msyql> desc user =>동일한 결과
2. 데이터베이스 생성 및 삭제
->데이터베이스 생성
① 첫번째 방법
# mysql -u root -p mysqlll
msyql> create database TESTDB;
msyql> show databases;
② 두번째 방법
# ./mysqladmin -u root -p create testdb2
Enter password:
# ./mysql -u root -p mysql
Enter passwor
cd /
msyql> show databases;
msyql> exit
Bye
#
->데이타 베이스 삭제
# ./mysqladmin -u root -p drop testdb2
Enter password:
mysql> drop database testdb2
# ./mysql -u root -p mysql
msyql> show databases;
3. 새로 생성한 데이터베이스 등록하기
-> 데이터베이스를 새로 생성한 후에는 mysql 이라는 관리용 데이터베이스에 등록
->mysql 이라는 데이터베이스의 db라는 테이블에 TESTDB를 등록한 것
msyql> insert into db values('%','TESTDB','root','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
msyql> select host, db, user from db
4. Mysql 사용자등록(데이터베이스 소유자)
->mysql 을 사용할 사용자는 반드시 user 라는 테이블에 등록을 해줘야함
msyql> insert into user (host, user, password) values('localhost', 'sspark', password('shcm0816'));
->정상적인 등록여부 확인
msyql> select host, user, password from user;
->sspark이라는 사용자로 mysql 데이터베이스로 접속
msyql> mysql -u sspark -p
Enter password:
->새로운 데이터베이스를 생성하거나 새로운 사용자를 생성한 후에는 반드시 reload를 해줘야함
# mysqladmin -u root -p reload
Enter password:
5. 테이블 생성 및 삭제
msyql> create table testtable (
->uid mediumint(4) unsigned DEFAULT '0' NOT NULL auto_increment,
-> name varchar(12) DEFAULT "" NOT NULL,
-> email varchar (20) DEFAULT "" NOT NULL,
-> PRIMARY KEY (uid)
-> );
Query OK, 0 rows affected (0.00 sec)
msyql>show tables;
-> 필드 구조가 정의한 필드구조로 생성되었는지 확인
msyql> desc testtable;
-> 삭제
msyql> drop table testtable;
mysql> show tables;
6. 테이블속성 및 구조변경법
ALTER TABLE 테이블명 CHANGE[COLUMN] 필드명 필드타입
-> 기존 테이블에 필드 추가하기
mysql> er table testtable add column homepage varchar(30);
mysql> desc testtable;
-> 기존에 필드 속성 변경하기
ALTER TABLE 테이블명 CHANGE[COLUMN] 기존필드명 새필드명 필드타입
mysql> er table testtable change column homepage home varchar(50);
-> 기존에 필드 삭제
ALTER TABLE 테이블명 DROP [COLUMN] 필드명
mysql> er table testtable drop column home;
mysql> desc testtable;
-> 기존의 테이블삭제하기
mysql> create table sampletable
mysql> show tables;
mysql> drop table sampletable;
mysql> show tables;
7. 데이터 입력하기
mysql> insert into testtable (uid, name, email) values (', 'parksungsoo', sspark09@soback.kornet.net'" target=_blank>'sspark09@soback.kornet.net');
-> 주의: uid라는 필드는 auto_increment 라는 속성으로 생성했기 때문에 이 속성을 가진 필드들은 실제로 데이터값을 주지 않아도 자동적으로 1씩 증가.
->삽입할 필드는 생략가능
mysql> insert into testtable values(','sontaesoo','shutterbug@orgio.net');
->특정 필드에만 데이터를 입력할 경우에는 입력할 필드이름만을 나열 그에 해당하는 데이터 입력
mysql> insert into testtable (uid,name) values(','junwooki');
->정상적으로 입력되었는지 확인
mysql> select * from testtable;
8. 데이터 검색
SELECT(데이터검색하기)
->데이터검색의 일반적인 방법
-> 테이블의 모든 테이터를 검색
mysql> select * from testtable;
-> uid와 name 필드만을 조회
mysql> select uid, name from testtable;
->where문을 사용하여 특정 조건에 맞는 데이터만을 검색
mysql> select * from testtable where name = "sontaesoo";
->출력 결과 레코드의 중복제거하기(DISTINCT)
SELECT DISTINCT sex FROM testtable
->다양한 검색 방법
->'soo'라는 문자가 포함된 데이터를 모두 검색
->SELECT name FROM testtable WHERE name LIKE '%soo%'
mysql> select name from testtable where name LIKE '%soo%';
->특정한 한 문자로 시작하는 데이터만을 출력할 때에 사용하는 조회형식
SELECT name FROM testable WHERE name LIKE 'park%'
mysql> select name from testtable where name LIKE 'park%';
->특정 필드에 데이터가 NULL 인 경우를 조회한것
SELECT uid, name FROM testtable WHERE age IS NULL
mysql>select uid, name from testtable where age IS NULL;
-> 특정 필드의 데이터가 NULL이 아닌 경우
SELECT uid, name FROM testtable WHERE age IS NULL
mysql>select uid, name from testtable where age IS NOT NULL;
-> SELECT name, uid, email FROM testtable WHERE savem > 5000 AND sex='M'
-> SELECT name, uid, savem FROM testtable WHERE savem >= 5000 ORDER BY savem
DESC
-> SELECT count(*) FROM testtable WHERE sex='M'
-> SELECT avg(savem) FROM testtable WHERE sex='M'
9. 데이터 수정하기
->UPDATE 테이블명 SET 필드명=필드값 또는 산술식 {, 필드명 = 필드값 또는 산술식}*[WHERE
검색조건]
mysql> select * from testtable;
->uid 4 번의 데이터에 name 값과 email을 입력해 봄
mysql> update testtable set name = 'junyangmi' where age = 23;
mysql> update testtable set email = jym@superuser.co.kr'" target=_blank>'jym@superuser.co.kr' where age = 23;
mysql> select * from testtable;
-> uid 1 인 사람 (parksungsoo)의 나이를 25살로 수정
mysql> update testtable set age= 25 where uid =1;
->uid 2인 사람의 나이를 30살로 수정
mysql> update testtable set age = 30 where uid =2;
mysql> update testtable set age = 41 where uid=3;
-> 한해가 지났으므로 모든 사람의 나이를 한 살씩 증가
mysql> update testtable set age = age + 1;
mysql> select * from testtable;
10. 데이터 삭제하기(delete)
->Delete FROM 테이블명 [WHERE 검색조건]
mysql> select * from testtable;
mysql> delete from testtable where uid = 3;
11. 새로운 사용자 등록
-> Mysql 에 root로 접속
./mysql -u root -p
->Mysql DB 선택
mysql> use mysql;
mysql> show tables;
->새로운 DB 생성
mysql> create database xlare;
-> user 테이블에 입력 (user 라는 테이블에 새로운 사용자의 계정이름과 권한설정을 할 차례)
-> 호스팅사용자에 대한 설정 user테이블에 현재 사용장0ㅔ 대한 권한들을 모두 'N'로 설정
mysql> insert into user valuses('localhost', 'xlare', password('123'),'Y','Y','Y','Y','Y','N','N','N','N','N','N','N','N','N');
->user 테이블에 입력확인
mysql> select * from user where user = 'xlare' ;
-> db 테이블에 입력
mysql> insert into db values('localhost', 'xlare', 'xlare', 'Y','Y','Y','Y','Y','N','N','N','N','N',);
-> db 테이블에 입력 확인
mysql> select * from db where db = 'xlare';
-> 새로운 설정을 바로 적용키위해 mysqladmin 이라는 관리자명령어로 mysql 을 재시작
->reload를 해주지 않으면 생성했던 것들이 적용이 되지 않음
# ./mysqladmin -u root -p reload;
12. 일반사용자 권한설정(보안사항)
#./mysql -u root -p mysql
Enter password:
mysql> show tables;
--------------------
tables in mysql
--------------------
columns_priv
db
func
host
tables_priv
user
----------------------
->columns_priv 테이블
* 모든 특정 DB 의 특정 User 에 대한 특정 테이블의 각 컬럼에 대한 select, insert, update,
reference 권한을 설정
mysql> desc columns_priv;
->db 테이블
* db라는 테이블에는 특정 DB에 대한 user들의 여러가지 권한들을 설정하는 테이블
mysql> desc db;
-> kebia 라는 데이터베이스의 소유자와 그 권한에 대해서 알아보고자 함.
-> kebia라는 데이터베이스의 소유자는 hyung 이라는 mysqkl 사용자이며 이 hyung 이라는 사용자
는 이 kebia 라는 데이터베이스에 대한 각종 권한을 볼수 있음.
mysql> select * from db where db = 'kebia';
| localhost | kebia | hyung | Y | - - - - - ...........
------------------------
->tables_priv테이블
* columns_priv 테이블처럼 각 데이터베이스와 사용자 및 그 테이블에 대한 권한 설정
mysql > desc tables_priv;
---------------------
->user 테이블 : 새로운 사용자를 생성할때 이 테이블에 등록
-> 특정 사용자에 대한 Mysql에 존재하는 모든 데이터베이스에 대한 권한설정
-> 특정 사용자의 어떤권한에 대한 사항은 특정 데이터베이스가 아니라 Mysql에 존재하는 모든 데
이터베이스에 권한이 주어짐.
-> host와 user, password 항목을 제외한 나머지 권한들은 모두 'N"로 설정
->특정한 사용자에 대한 특정한 데이터베이스에 대한 권한을 주려면 위에서 보았던 db라는 테이블
에서 그 권한설정을 하는것이 안전함
13 .Mysql root 암호 변경하기
-> 방법 1: mysqladmin 이라는 명령어 사용
# ./mysqladmin -u root -p password 12345
->방법 2: mysql의 set 이란 명령어로 root 암호 변경
# ./mysql -u root -p mysql
mysql> set password for root=passwd('12345678');
-> 방법 3: mysql 데이터베이스로 접속하여 update문을 사용하는 방법
# ./mysql -u root -p mysql
mysql> update user set password=password('12345' where user = 'root';
mysql> flush privileges;
->flush-privileges: 권한 테이블을 재시작한다. 권한 설정을 변경했을경우 반드시 재시작
mysql> flush privileges;
14. root 패스워드를 잊어버렸을 때는 어떻게?
->단계 1: 실행중인 mysql 종료
# ps -ef | grep mysqld
# killall mysqld
->단계 2: grant-table 미사용모드로 mysql시작 및 root로 접속
# .safe_mysqld --skip-grant-tables&
-> 단계 3: update문으로 root사용자 패스워드 변경
mysql> update user set password=password('12345') where user = 'root';
mysql> flush privileges;
-> 단계 4: 실행중인 mysql 다시 종료
# ps -ef | grep mysqld
# killall mysqld
-> 단계 5: 일반모드로 Mysql 재시작
# ./safe_mysqld&
# ps -ef | grep mysql
15. 특정 테이블의 구조보기(show columns from 테이블)
-> 특정테이블의 필드명 type, 설정값들을 보기 위한 것
-> 특정한 테이블의 칼럼(필드)구조를 보려면 "show columns from 테이블명"
-> 좀더 편리하여 많이 사용되는 명령문 " desc 테이블명"으로 확인
mysql> show columns form user;
->특정 테이블의 인덱스 보기
mysql> show index from user;
-> 데이타베이스의 설정상태 보기(show status)
mysql> show status;
# ./mysqladmin -u root -p status
-> 데이터베이스의 설정환경변수와 값보기(show variables)
mysql> show variables;
# ./mysqladmin -u root -p variables
-> 현재 데이터베이스에 연결된 프로세스들 보기(show processlist)
# ./mysqladmin -u root -p processlist
끝으로 원격에서 접근할려면 아래 내용을 참조하면 됩니다.
mysql 원격접속 권한 설정
>use mysql
>grant all privileges on *.* to 'oops'@'192.168.5.14'
>identified by 'passwd' with grant option;
ip대신 % 를 주면 모든 호스트허용!
oops 라는 유저가 모든 권한을 부여받을 수있다 . 단 해당 아이피의 호스트 에서만.
이와 같은 설정은 select host,user from user; 로 확인해볼수 있다.
'개발 및 관련 자료 > DB' 카테고리의 다른 글
[mysql] transcation 사용 시 주의점. (0) | 2013.03.27 |
---|---|
[DB] mysql query log 설정. (0) | 2013.03.26 |
[mysql] 백업 및 복구 (0) | 2010.07.16 |
[명령어] mysql root 암호 잃어버렸을 경우 (0) | 2010.05.26 |
[명령어] mysql 복구 방법 (0) | 2010.05.26 |
Comments