내보내기 혹은 dump된 sql파일을 mysql을 실행할 디렉토리에 복사해놓습니다.
굳이 실행할 곳에 복사 안해도 상관은 없습니다만 경로 입력할때 풀경로를 다 입력해주어야합니다.
실행할곳에 복사를 해놓는경우 경로가 필요없이 ./스크립트.sql 이런식으로 입력해주면 간단해져요
mysql> source ./경로/스크립트.sql 실행하면 MSSQL에서 쿼리실행기로 실행한것처럼
실행되면서 쿼리가 실행되어진다.
대책을 찾던 중 KLDP에 나온 내용으로 해결.
1. 퍼미션 문제
일반 유저에서
ls -al /var/run/mysqld/mysqld.sock
해서 확인을 해봅니다.
펼쳐두기..
2. 퍼미션을 조정하는 것이 여의치가 않으면, /etc/my.cnf 에
인용:
[mysqld]
socket=/tmp/mysql.sock
[client]
socket=/tmp/mysql.sock
을 넣고 서버와 클라이언트가 /tmp에 만들어지는 mysql.sock 파일을 사용하게 하는 방법으로 돌아갈 수 있습니다.
3. mysql이 설치된 폴더의 권한을 바꿔주세요..
mysql이라는 유저를 생성해서..
chown mysql /path/mysql
이렇게 해주세요
※ 이미 생성된 테이블에 PK 제약조건 추가하기
ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] PRIMARY KEY(컬럼명);
EX) ALTER TABLE product ADD CONSTRAINT product_pdcode_pk PRIMARY KEY(pdcode);
product 라는 테이블에 product_pdcode_pk 라는 이름을 가진 PK 제약조건을 추가한다.
※ 이미 생성된 테이블에 FK 제약조건 추가하기
ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] FOREIGN KEY(컬럼명)
REFERENCES [부모테이블명](PK컬럼명) [ON DELETE CASCADE];
EX)
ALTER TABLE category ADD CONSTRAINT category_pcode_fk FOREIGN KEY(pcode)
REFERENCES product(pdcode) ON DELETE CASCADE;
※ 제약조건의 삭제
ALTER TABLE [테이블명] DROP CONSTRAINT [제약조건이름];
EX) ALTER TABLE product DROP CONSTRAINT product_pcode_fk;
제약조건을 삭제할 경우에는 FK 제약조건부터 먼저 삭제해준다.
※ NOT NULL 제약조건의 추가
ALTER TABLE [테이블명] MODIFY [컬럼명] [데이터타입] CONSTRAINT [제약조건이름]
NOT NULL;
EX) ALTER TABLE product MODIFY pname varchar2(20) CONSTRAINT product_pname_nn
EX) NOT NULL;
MySQL foreign key 예제
a_tbl, b_tbl 두개의 테이블이 있다고 하자
create table a_tbl(
user_id varchar(10) not null default'',
user_name varchar(30) not null default'',
primary key(`user_id`)
) engine=innodb;
create table b_tbl(
user_id varchar(10) not null,
user_tel varchar(15) not null,
primary key(`user_id`),
constraint fk_user_id -- 제약조건명 : fk_user_id
foreign key (`user_id`) -- 테이블의 필드(user_id)가 foreign key
references a_tbl(`user_id`) -- 테이블(a_tbl)의 필드(user_id)를 참조
on delete cascade -- 참조키가 삭제되면 foreign key도 삭제
on update cascade -- 참조키가 업데이트되면 foreign key도 업데이트
) engine=innodb;
CASCADE : 참조키가 삭제되거나 업데이트 되면 동일하게 foreign key도 동일하게 맞춤.
RESTRICT : 참조키 변경(삭제 혹은 업데이트)되는 것을 방지함.
SET NULL : 참조키에 변경(삭제 혹은 업데이트) 되면 foreign key 값을 null 로 저장.
NO ACTION : 참조키에 변경(삭제 혹은 업데이트) 되어도 아무런 동작을 하지 않음.(foreign key의 이미 없음)
각 테이블에 데이터 입력를 입력하자.
insert into a_tbl values('happy','hong gil dong');
insert into a_tbl values('appleman','lee soon shin');
insert into a_tbl values('keeper','lee myoung park');
+----------+-----------------+
| user_id | user_name |
+----------+-----------------+
| appleman | lee soon shin |
| happy | hong gil dong |
| keeper | lee myoung park |
+----------+-----------------+
3 rows in set (0.00 sec)
insert into b_tbl values('happy','010-1234-5678');
insert into b_tbl values('appleman','011-4321-8765');
insert into b_tbl values('keeper','016-9876-5432');
+----------+---------------+
| user_id | user_tel |
+----------+---------------+
| appleman | 011-4321-8765 |
| happy | 010-1234-5678 |
| keeper | 016-9876-5432 |
+----------+---------------+
3 rows in set (0.00 sec)
각 두테이블을 조인하자.
mysql> select a.user_id, b.user_id, a.user_name, b.user_tel from a_tbl a join b_tbl b where a.user_id=b.user_id;
+----------+----------+-----------------+---------------+
| user_id | user_id | user_name | user_tel |
+----------+----------+-----------------+---------------+
| appleman | appleman | lee soon shin | 011-4321-8765 |
| happy | happy | hong gil dong | 010-1234-5678 |
| keeper | keeper | lee myoung park | 016-9876-5432 |
+----------+----------+-----------------+---------------+
참조키를 업데이트한 후에 확인하자.
mysql> update a_tbl set user_id='sadman' where user_id='happy';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select a.user_id, b.user_id, a.user_name, b.user_tel from a_tbl a join b_tbl b where a.user_id=b.user_id;
+----------+----------+-----------------+---------------+
| user_id | user_id | user_name | user_tel |
+----------+----------+-----------------+---------------+
| appleman | appleman | lee soon shin | 011-4321-8765 |
| keeper | keeper | lee myoung park | 016-9876-5432 |
| sadman | sadman | hong gil dong | 010-1234-5678 |
+----------+----------+-----------------+---------------+
3 rows in set (0.00 sec)
운영자 : 김두형(www.sunmysql.co.kr)
email : beansoft@nate.com
업데이트 : 20080923
alter table 테이블명 add 컬럼명 type명 after 위치할컬럼명;
이렇게 하면 위치할컬럼명 밑에 컬럼명이 위치됩니다
alter table 테이블명 modify 컬럼명 type명 after 위치할컬럼명;
이것은 기존 컬럼명 위치를 수정할때 쓰는 방식..
1. mysql root 패스워드를 변경해보자(리눅스)
<우선 mysql start 하기>
mysql설치루트/bin>./mysqld_safe &
<mysql 접속하기>
mysql설치루트/bin>./mysql -u root mysql
<password 변경하기>
mysql> use mysql;
mysql> update user set password=password('new-passwd') where user = ('root');
mysql> flush privileges;
(참고 : update문을 사용하여 암호가 바뀌었을땐 flush privileges를 이용하여 사용자 관련 테이블에 알려야 함)
마지막으로 서버 재실행
2. 패스워드 분실시
패스워드 분실시 빠르게 root 패스워드를 변경 해보자
우선 mysql를 stop 한 환경에서 작업을 해야 한다.
<권한 테이블을 사용하지 않겠다고 선언하면서 서버 start>
mysql설치루트/bin> ./mysqld_safe --skip-grant-tables &
<mysql 데이터베이스로 바로 접속>
mysql설치루트/bin>./mysql -u root mysql
<update문으로 패스워드 변경>
mysql>update user set password=password('new-passwd') where user = 'root';
<mysql 접속 종료>
mysql>quit
<mysql stop하기>
mysql설치루트/bin>./mysqladmin -u root -p shutdown
<mysql 재시작>
mysql설치루트/bin>./mysqld_safe &
<mysql 접속하기>
mysql설치루트/bin>./mysql -u root -p
password:
mysql>
우선 사용자를 생성하기 위해서 Root 권한으로 Mysql에 접속을 합니다.
#> Mysql -u root -p
Enter Password : ######
mis13 이란 유저가 Mis13이란 DB의 권한을 가지게 해보겠습니다. (암호는 mis1313)
mysql> GRANT ALL PRIVILEGES ON Mis13.* to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;
mysql> flush privileges;
작성해주시면 끝... mis13으로 접속을 하시면 Mis13이란 DB만 보이실겁니다.
2. 그 밖에 외부에서도 접속하기, 모든 DB권한 주기
어떤 DB도 접속 가능하게 권한을 주는것은
mysql> GRANT ALL PRIVILEGES on *.* to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;
mysql> flush privileges;
슈퍼유저로 (즉 root 권한으로) 권한을 주는것은
mysql> GRANT ALL PRIVILEGES on *.* to mis13@"%" IDENTIFIED BY 'mis1313' WITH GRANT OPTION;
mysql > flush privileges;
GRANT 명령어 말고 Mysql DB 안에 User, DB 테이블에 넣는 법도 있지만 초보분이 사용하시기엔
이 방법이 편하실겁니다.
3. 모든 권한이 아닌 부분별 골라서 주기
예) mis13 이라는 계정이 전체 데이터베이스에 대해서 select, insert, delete, update 권한만 주고 싶을 경우
mysql>GRANT select, insert, delete, update on *.* to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;
mysql> flush privileges;
예) mis13 이라는 계정이 Mis13 이라는 데이터베이스에 대해서 select, insert, update 권한만 주고 싶을 경우
mysql>GRANT select, insert, update on Mis13.* to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;
mysql>flush privileges;
[출처] odbc mysql-asp 연동하기|작성자 야로