천객만래 [千客萬來] (It has an interminable succession of visitors)

[개발/MySQL] LOCK, 파일 제어 권한주기 





LOCK TABLES : 데이터베이스를 백업하거나 데이블의 스키마 구조를 변경하거나
기타 중요한 작업을 진행할 때 다른 사람이 해당 테이블에 작업을
하지 못하도록 막기 위해 locking을 함

   ex) mysql>create table locktest (no tinyint,name char(6));
mysql>insert into locktest values (1,'virus');
mysql>lock tables locktest read; => 읽기만 가능하고 쓰기는 금지

   *mysql>lock tables locktest read local; => local 사용자는 읽기만 가능, 다른사용자는 모두 가능
     (가상 콘솔 2번모드에서 insert 명령어로 데이터를 추가하면 추가가 되는것을 확인할수있다.)

   *mysql>lock tables locktest write; => 현재 사용자만 쓰고, 읽을수 있다
     (가상 콘솔 2번모드에서 insert 명령어로 데이터를 추가하면 아무런 반응이 없다
      unlock을 사용하여 locking을 풀어야 읽거나 쓸수있다.)

   *모든 테이블에 read 락을 걸려면 : mysql>flush tables with read lock;

mysql>insert into locktest values (2,'yuri');
mysql>select * from locktest;
mysql>unlock tables; => locking 해제

LOAD DATA INFILE 문법 : load data infile '파일명' into table 테이블명;

*load data infile 문을 사용하기 위해서는 file privilege(파일 제어 권한)이 있어야 한다. (jung라는 사용자와 jung2
    라는 사용자를 생성하고 jung2에게만 File privilege권한을 줘보자)

    mysql>create database jung;
mysql>use mysql;
mysql>insert into user (host,user,password) values ('localhost','jung',password('1234'));
mysql>insert into db values ('localhost','jung','jung','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

mysql>create database jung2;
mysql>insert into user (host,user,password,File_priv) values ('localhost','jung',password('1234'),'Y');
mysql>insert into db values ('localhost','jung','jung','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql>flush privileges;

mysql>use jung;
mysql>create table filepriv (no tinyint,name char(6));
mysql>use jung2;
mysql>create table filepriv (no tinyint,name char(6));
mysql>quit

shell>cd /usr/local/mysql
shell>vi file.txt
1 aaa
2 bbb
3 ccc            //공백은 탭키 사용
shell>mysql -u jung -p jung
mysql>load data infile '/usr/local/mysql/file.txt' into table filepriv;   =>접근권한이 없다는 에러가뜬다.
mysql>quit
shell>mysql -u jung2 -p jung2
mysql>load data infile '/usr/local/mysql/file.txt' into table filepriv;   =>데이터 입력이 성공

Posted by SB패밀리