리눅스 3.0 발표, “파격적인 버전과 꾸준한 진보”

2011.07.26
리눅스 3.0이 발표됐다. 이번에 리누스 토발즈는 기존의 소프트웨어 버전 부여 관행에 반기를 들고, 일반적인 정기 업데이트에 통상적으로 대규모 업그레이드를 의미하는 3.0 버전을 부여했다.
 
토발즈는 리눅스 커널 메일링 리스트에서 “물론, 이번 릴리즈에는 2/3의 일상적인 드라이버 변경이 있었고, 수많은 무작위 수정이 있었지만 중요한 것은 3.0이라는 버전 번호는 단지 숫자를 바꾼 것에 불과하다는 것이다... 이번 버전에는 혁신도 없고, 특별한 신기능도 없으며, 전혀 그런 비슷한 것도 없다”고 밝혔다. 
 
이번에 출시된 새로운 커널은 지난 7월 19일 발표될 예정이었지만, 마지막으로 발견된 사소한 버그와 이에 대한 수정과 테스트로 출시가 약간 지연되었다. 
 
지난 8년 동안 리눅스 개발에 참여해 온 자원봉사 개발자들은 2.6버전 개발에 노력해 왔다. 이번에 출시된 새로운 릴리즈는 리눅스의 탄생 20주년을 맞아 번거로운 마이너 버전 업데이트에서 탈피하여 3.0 버전으로 출시되었다. 리눅스의 이전 안정화 버전 번호는 2.6.39.3이었다. 
 
리눅스 커널 개발자이자 커널 감시 사이트 리눅스 위클리 뉴스(Linux Weekly News)의 편집자이기도 한 조나단 코르벳은 “이번에 출시된 릴리즈는 우리가 2.6버전 개발을 시작한 이후 출시된 단지 다른 버전의 릴리즈에 불과하다”며, “사람들은 버전에 붙은 번호에서 많은 것을 읽으려고 하지만, 이번 버전에서는 그러지 않길 바란다”고 말했다. 
 
그리고 “문제는 번호가 갑자기 너무 크게 증가했다는 것이고, ‘2.6’이라는 접두사는 아무런 의미가 없었다”고 덧붙였다. 개발자들은 2.7버전으로 올라가기 위해서는 수 개월 이상이 걸리는 큰 문제를 해결할 있다는 것에 동의했지만, 그런 문제는 나타나지 않았고 마이너 업데이트로 인해 버전 번호는 번거롭게 계속 길어진다. 
 
이것의 한 예로써, 기존의 버전 부여 체계에 따르면 이번 버전은 2.6.40 버전이고, 그 다음 업데이트는 2.6.40.1버전이어야 한다. 그러나 새로운 체계에서 최초의 버그 수정 업데이트의 버전은 3.0.1이 될 것이다. 기존 체계와 유사성을 갖기 위해, 이번에 출시된 커널의 버전은 3.0이 아닌 3.0.0으로 사용될 것이다.  
 
이번에 출시된 버전에는 일상적인 버그 수정과 성능 개선뿐만 아니라 가상화와 파일 시스템 지원의 개선이 있었다. 
 
4년 만에 번호가 바뀐 이번 커널 버전은 시트릭스 젠 하이퍼바이저 Dom0(도메인 0) 권한을 승인할 수 있는 최초의 버전이다. Dom0 권한을 가짐으로써, 젠 하이퍼바이저는 컴퓨터의 주 계층(혹은 가장 큰 권한이 있는 계층)을 실행할 수 있다. 그러면 그것은 다른 게스트 운영체제에 부분적으로 접근해 이런 게스트의 성능을 높여줄 수 있다. 이전 버전의 젠은 커널 패치를 통해서만 이런 기능을 제공할 수 있었다. 
 
코르벳은 젠 업데이트가 제공되기까지는 오랜 기간이 걸렸다. 코르벳은 “젠은 착수 시점부터의 상위 버전 코드를 개발자들이 확보하려 하지 않을 때 일어나는 전통적인 사례이다”라며 젠 개발자들은 메인 커널과 상당한 양의 “상위 코드” 작업에 뒤처졌다고 말했다. 새로운 가상화 하이퍼바이저인 KVM(커널 기반 가상머신)은 젠을 우회하고 최초로 커널에 적용되었다. 
 
Btrfs(B-트리 파일 시스템)를 지원하기 위한 많은 개선 작업도 이루어졌고, 새로운 스토리지 시스템 친화적인 파일 시스템은 아직까지 개발 중이다. 
 
코르벳은 “Btrfs는 적극적인 개발자 커뮤니티에서 선택했고 순조롭게 진행되고 있다. 현재 가장 큰 격차를 보이고 있는 것은 실행 파일 시스템 검사기”라며, 구현이 완벽해야 하고 그렇지 않은 경우 사용자들이 데이터를 잃을 우려가 있기 때문에 파일 시스템은 개발 완료에 많은 기간이 소요된다고 설명했다.  
 
EXT4 파일 시스템과 관련해서도 많은 개선이 있었고, EXT4 파일 시스템은 현재 여러 리눅스 배포판의 기본 파일 시스템으로 사용되고 있다. 
 
이번에 출시된 릴리즈에서는 규격이 모호해 구현이 어려웠던 차세대 BIOS 대체물인 UEFI(Unified Extensible Firmware Interface)와 관련해서도 몇 가지 문제점이 수정되었다. 
 
이번 출시 버전에는 중요한 고급 기능들도 여럿 포함됐다. 네트워크 패킷을 위한 새로운 JIT(just-in-time) 컴파일러를 제공하고, JIT 컴파일러는 애플리케이션이 자신의 실행과 관련한 네트워크 패킷만을 수신할 수 있도록 해준다. 이를 통해 최대 패킷당 50ns를 절약할 수 있다. 그리고 이번 버전에서는 무선 네트워크를 위한 WoWLAN(Wake on Wireless LAN) 기능도 포함됐다.
 
특수한 용도를 위한 기능들도 추가됐다. sendmmsg() 시스템 콜은 금융 교환기와 같은 고율 메시징 애플리케이션의 운영 속도를 높여줄 수 있다. 네임스페이스 파일 디스크립터와 관련해서는 컨테이너가 구현됨으로써 이전에는 솔라리스(Solaris)만 제공했던 부하에 대한 높은 수준의 보안 기능을 제공할 수 있게 됐다.  editor@itworld.co.kr


출처 - http://www.itworld.co.kr/news/71064/%EB%A6%AC%EB%88%85%EC%8A%A4+3.0+%EB%B0%9C%ED%91%9C%2C+%E2%80%9C%ED%8C%8C%EA%B2%A9%EC%A0%81%EC%9D%B8+%EB%B2%84%EC%A0%84%EA%B3%BC+%EA%BE%B8%EC%A4%80%ED%95%9C+%EC%A7%84%EB%B3%B4%E2%80%9D+


Posted by linuxism
,

mysql 외래키 옵션

DB/MySQL 2012. 4. 6. 15:51


 

//==================== 리눅스에서 sql파일 실행 =======================

] # mysql -h  localhost  -u  root  -D  mChart  -p < create_table.sql

 

//========================== DB 한글 깨짐 방지 =========================================

   db접속후 케릭터 셋을 지정해준다.

   <php 예>

   $db = new mysqli('localhost','root','1234','myDB');
   $db->query('set names euckr');

 //=========================== 계정 비밀번호 변경 ==========================================

   update mysql.user set password = password('암호') where user = '계정@localhost';
   flush privileges;

 

 

//==================== 기본 명령 ====================================

mysql> create database dbName;   // db 생성

              예) create databases dbName default character set utf8 ;

mysql> drop database dbName;       //db 삭제

 

mysql> create table tableNae(columns); //table 생성

          예) create table books ( isbn char(13) not null primary key,   //null값을 가질수 없는 기본키

                                           author char(50),

                                           title char(100),

                                           price float(4,2) );                          

          예) create table books ( isbn char(13) not null ,  //기본키가 여러개일때 

                                               author char(50) not null ,

                                               title char(100),

                                              price float(4,2),

                                             primary key(isbn, author ) ); 

                                          price float(4,2) );                          

          예) create table books ( isbn char(13) not null ,  //테이블 collation 변경 

                                              author char(50) not null ,

                                               title char(100) character set utf8 collate utf8_general_ci not null,

                                              price float(4,2),

                                              primary key(isbn, author ) ); 

        예) create  view  cust_user_view  as

                                    select  user.user_id, cust.cust_id,  cust.cust_name,user.user_name

                                   from  cust,user

                                   where cust.cust_id = user.cust_id ;

        

mysql> drop table tableName;       //table 삭제

 

mysql> show databases [ like database ];                 // 모든 사용할 수 있는 db 보여줌

 

mysql> show [ open ] tables [ from database ][ like table ];    // 선택된 DB의 모든 table 보여줌

 

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

 

mysql>  show create table db.table ;               //테이블 생성 구조 보기

 

mysql> describe tableName [column];             //table의 구조를 보여줌

 

mysql> use dbName;                         // DB 사용 선택

 

//====== 사용자 및 권한 부여==================================================================

 

 ※ 모든 호스트  'id'@'%'

 

mysql> grant all                                    //모든권한

      -> on *                                        // 모든 DB

      -> to fred  identified by 'mnb123'     // 비밀번호 mnb123으로 접속하는 fred라는 사용자에게

      -> with grant option;                       // 다른사용자에게 권한을 부여할 수도 있게

 

mysql> grant usage                                 //권한없는

      -> on books.*                                // books DB및 table에 대해서

      -> to sally  identified by 'mnb123' ;    // 비밀번호 'magic123'으로 접속하는 sally라는 사용자에게

 

mysql> grant select, insert, update, delete, index, alter, create, drop    // 해당 명령어 권한 부여

      -> on books.*                                       // books DB및 table에 대해서

      -> to sally ;                                           // sally라는 사용자에게

 

mysql> grant select, insert, update, delete    // 해당 명령어 권한 부여

      -> on books.*                                       // books DB및 table에 대해서

      ->to sally@localhost   identified by 'sally123' ;    // sally@localhost 와 비밀번호로 접속하는 사용자에게

    

mysql> revoke alter, create, drop               //해단 권한을 취소

      -> on books.*                                 // books DB및 table에 대해서

      -> from sally;                                  // sally라는 사용자의

 

mysql> revoke all                                   // 모든 권한을 뺏어 해당 DB에 접근 하지 못하도록 한다.

      -> on books.*

      -> from sally;

 

mysql> use mysql;    //계정 삭제

mysql> drop user  sally@localhost ;

=======================================================================================================

 

 ================== Select 문 ==================

 

select [ options ] items [ into file_details ]

          from tables

          [ where conditions ]

          [ group by group_type ]

          [ having where_definition ]

          [ order by order_type ]

          [ limit limit_criteria ]

          [ procedure proc_name(arguments) ]

          [ lock_options ]

         ;

 예) custtomers 테이블에서 city 값이 seoul인 레코드의 name,city 값을 불러온다 5개만

        select name, city

                 from customers

                 where city='seoul'

                       limit 5 ;

 

 예) 현재 날자와의 차이 구하기 (D-Day)

     select end_date,dateDIFF(end_date, now() ) as dday

              from  date_count

 

================== Insert 문 ==================

 

insert [ into ] tableName [(column1,column2,column3,...)]           //table의 필드에 해당 값을 저장

         values (value1, value2, value3,...) ;

 

 예) insert customer_user

              set customer = 'gmate',

              user_name = 'gmate',

              user_password = sha1('gmate');

 예)  insert customer_user values

              ( 'gmate', 'gmate', sha1('gmate')),

              ('ccr','user', sha1('gmate'))

       ;

================== delete 문 ==================

 

delete [ low_priority ] [ quick ] [ ignore ] from tableName            //table의 레코드 삭제

          [ where conditions ]

          [ order by order_cols ]

          [ limit number ]

 

예) delete from customer_user

             where customer =  'gmate' ;

 ================== update 문 ==================

 

update [ low_priority ] [ ignore ] tableName                    //table의 레코드 수정

           set column1=expression1, column2=expression2,...

           [ where conditions ]

           [ order by order_criteria ]

           [ limit number ]

  예) update customer

              set customer_name='성재욱'

              where customer_id ='aaa';

 

================== alter table문 ==================

alter table  tableName    add fieldName varchar(10) not null ;

 

예) alter table  myTable add name varchar(30) not null;

 

//-----필드 삭제

alter table  tableName  drop fieldName ;l

//-----엔진타입 변경

 alter table tableName ENGINE = innoDB ;

 alter table tableName ENGINE = MYISAM ;

 

 

============= 외래키(foreign key) 생성 ====================================================

# 테이블 타입이 innoDB 이어야 적용된다(부모자식 테이블 모두).

 

create table board_10001 (

     postid int(10) unsigned not null auto_increment primary key,

    sub_code char(4) not null  ,

    title varchar(40) not null,

   contents text not null,

   date timestamp ,

   writer char(10) not null ,

  foreign key(sub_code) references  board_sub_list(sub_code),

  foreign key(writer) references  user(user_id)

)type=innodb , character set = utf8;

 

 

============= 테이블에 외래키 추가수정 ===========================================

alter  table  board_10002

 add  constraint  foreign  key(sub_code)  references  board_sub_list(sub_code);

 

=================== 외래키 옵션 ===========================================================

CASCADE
참 조되는 측 관계 변수의 행이 삭제 되었을 경우에는 참조하는 측 관계 병수와 대응되는 모든 행들이 삭제 됩니다 . 참조되는 측 관계 변수의 행이 갱신 되었을 경우에는 참조하는 측 관계 변수의 외래 키 값은 같은 값으로 갱신됩니다.
 예) 

   foreign key(id) references  customer_info(id) ON  DELETE  CASCADE ON  UPDATE  CASCADE

RESTRICT
참조하는 측 관계 변수의 행이 남아 있는 경우에는 참조되는 측의행을 갱신하거나 삭제 할 수 없습니다. 이 경우에는 데이터 변경이 이루어 지지 않습니다.

NO ACTION
참조되는 측 관계변수에 대해 UPDATE, DELETE 가 실행됩니다. DBMS에서 SQL문장의 실행 종료시에 참조 정합성을 만족하는지 검사합니다. RESTRICT와 차이점은 트리거 또는 SQL문장의 시멘틱스 자체가 외래키의 제약을 채울것이라는 데에 있습니다. 이때는 SQL 문장 실행이 성공합니다. 외래 키의 제약이 만족되지 않은 경우에는 SQL문장이 실패한다.

SET NULL
참 조되는 측 관계 변수에 대해 행이 갱신 또는 삭제 되었을 경우 , 참조하는 측 관계 변수의 행에 대한 외래키 값은 NULL로 설정이 됩니다. 이 옵션은 참조하는 측 관계 변수의 외래 키에 NULL 을 설정할 수 있는 경우에만 가능합니다. NULL 의 시멘틱스에 의해 참조하는 측 관계 변수에 대해 NULL이 있는 행은 , 참조 되는 측 관계 변수의 행을 필요로 하지 않습니다.

SET DEFAULT
SET NULL 과 비슷하지만 참조되는 측 관계 변수의 행이 갱신 또는 삭제 되었을 경우 참조하는 측 관계 변수의 외래키 값은 속성의 기본값으로 설정됩니다.

위와 같은 5개의 참조 조작이 SQL:2003에 규정되어 있습니다.

MySQL 에서는 InnoDB 에서 지원을 합니다. 지원하는 참조 조작은 RESTRICT, CASCADE, SET NULL, NO ACTION 을 지원합니다

 

====================== 뷰(view) 테이블 생성 ============================================

 

 

create  view  cust_user_view  as

   select  user.user_id, customer.customer_id,  customer.customer_name,user.user_name

   from  customer,user

   where customer.customer_id = user.customer_id ;

   


출처 - http://okwizard.blog.me/70100376686

'DB > MySQL' 카테고리의 다른 글

mysql에서 limit 사용  (0) 2012.05.02
MySQL 로그 파일 관리 2 - 로그 파일 남기기  (0) 2012.05.02
my.cnf 설정  (0) 2012.04.05
character_set_server 설정  (0) 2012.04.05
MySQL 로그 파일 관리 1  (0) 2012.04.04
Posted by linuxism
,

ssh와 rsync를 이용한 백업

리눅스 시스템 사이에서 백업을 해야 할일이 생겨서 이것저것 찾아 보다가..
rsync를 사용하기로 했습니다.

우선 ssh를 통해서 rsync 백업을 할려고 하면, password를 묻습니다.
한번씩 할 때는 패스워드를 치면 상관없지만, crontab을 사용해서 주기적으로 할려고 하면 문제가 발생합니다.

해결하는 방법을 이것저것 찾았는데 2가지 정도가 나오네요.

첫번째는 ssh-keygen을 통해서 패스워드를 묻지 않게 하는 방법 입니다.

ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): <ENTER>
Enter passphrase (empty for no passphrase): <ENTER>
Enter same passphrase again:  <ENTER>
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
58:bd:ef:fd:3b:62:79:2e:ea:de:c4:73:2d:7d:11:2b root@web-tl
The key's randomart image is:
+--[ DSA 1024]----+
|                 |
|         .       |
|        . .    . |
|       o   .    o|
|      . S .  E o |
|           .. ..o|
|            .+o.+|
|           .o*o+.|
|          o++.*++|
+-----------------+
cat ~/.ssh/id_dsa.pub | ssh [
원격ID]@[원격HOST] "cat >> .ssh/authorized_keys"
password:
암호입력<ENTER>
# _


이렇게 설정을 해 두면, 해당 원격 서버에 접속할때 암호를 전혀 묻지 않게 됩니다.

# rsync -avzP -e ssh [원격HOST]:/home/source /home/target



이런식으로 백업 하시면 됩니다.

하지만, 뭔가 찝찔하죠..
누구나 이 자리에 앉으면 패스워드를 몰라도 원격 호스트에 접근을 할 수 있게 되죠...


두번째는 sshpass를 사용해서 접근하는 방법니다.
CentOS나 fedora에서는 기본 yum해서는 들어 있지 않습니다.
아래와 같이 epel을 통해서 받습니다.

# sudo su -
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
# yum update
# yum -y install sshpass


이렇게 설치해 주시면 됩니다. 
Ubuntu를 쓰시는 분들은 apt-get으로 받으세요.

# sudo apt-get install sshpass


sshpass을 사용법을 알아보면..  아래와 같습니다.

sshpass -p '[
암호]' ssh [원격ID]@[원격HOST]

# sshpass -p 'myPassword' ssh username@server.example.com


이런식이죠...

그러면, 이걸로 rsync를 해 봐야 겠죠?

# rsync --rsh="sshpass -p myPassword ssh -l username" server.example.com:/var/www/html/ /backup/


이렇게 하시면 됩니다.

쉽죠?

여기서 주기적으로 백업을 하고 싶다면..

# crontab -e


이렇게 뛰우시고 내용을 수정하시면 됩니다.

*/5 * * * * rsync --rsh="sshpass -p myPassword ssh -l username" server.example.com:/var/www/html/ /backup/


이렇게 두면 5 주기로 백업이 진행 됩니다.

 

출처 - http://gyuha.tistory.com/445







 

Linux 에서는 rsync 라는 훌륭한 명령어가 있다.

 

rsync 는 UNIX 에서 파일 전송에 사용하는 명령어이다.  rsync 는 "rsync" 라는 알고리즘을 사용하여 아주 빠른 속도로 원격에 있는 파일을 가져와서 동기화 시킨다. rsync 는 파일들의 다른 부분만 전송을 하여 이러한 일을 수행한다.

 

회사에서 혹은 집에서 Linux Server 가 있다면, rsync 를 이용하여 자신의 중요한 자료를 백업할 수 있다.

 

백업서버에 설치되어야 할 프로그램은 rsync, ssh server 이다.

 

백업서버를 위한 운영체제는 Ubuntu 혹은  Debian 이라고 가정한다.

여기서 Debian 을 중심으로 설명을 하겠다. :) (Ubuntu 에서는 sudo 혹은 root 권한을 획득하여 프로그램을 설치 하도록 한다.)

 

백업서버를 설정하는 방법은 총 3단계로 나눌 수 있다.

  1. openssh 설치, ssh 로 접속시 암호를 묻지 않고 접속하기 위한 authorized_keys 등록
  2. rsync 설치, rsync daemon 설정
  3. 백업 script 작성

 

1. openssh 설치

 

● 백업서버에 openssh 를 설치한다.

 root@outland:/home/starbloood/# apt-get install ssh

 

● 백업서버에 백업할 사용자의 홈 디렉토리에 .ssh 디렉토리를 생성한다.

 starblood@outland:~$ mkdir .ssh

 

● 클라이언트 PC 에서 아래와 같은 명령어로 public key 를 발급받는다.

 starblood@northrend:~$ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/starblood/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/starblood/.ssh/id_rsa.
Your public key has been saved in /home/starblood/.ssh/id_rsa.pub.
The key fingerprint is:
cb:17:d8:17:b3:ff:9f:b5:a1:c6<wbr style="font-family: Verdana; line-height: normal; background-color: rgb(255, 255, 255); font-size:10pt; " />:1c:cb:4f:ba:5e:7f starblood@northrend

 

● 클라이언트의 public key 를 백업 서버로 전송한다. (public key 파일을 authorized_keys 파일로 이름을 바꾼다.)

 starblood@northrend:~$ scp .ssh/id_rsa.pub starblood@outland:~/.ssh/authorized_keys

 

2. rsync 설치, rsync daemon 설정

 

● rsync 설치

 root@outland:/home/starblood# apt-get install rsync

 

● rsync daemon 설정

 root@outland:/home/starblood# vi /etc/default/rsync

 

 # defaults file for rsync daemon mode

 

# start rsync in daemon mode from init.d script?

#  only allowed values are "true", "false", and "inetd"

#  Use "inetd" if you want to start the rsyncd from inetd,

#  all this does is prevent the init.d script from printing a message

#  about not starting rsyncd (you still need to modify inetd's config yourself).

RSYNC_ENABLE=false <= 이부분을 true 로 바꾸어 준다.

 

# which file should be used as the configuration file for rsync.

# This file is used instead of the default /etc/rsyncd.conf

# Warning: This option has no effect if the daemon is accessed

#          using a remote shell. When using a different file for

#          rsync you might want to symlink /etc/rsyncd.conf to

#          that file.

# RSYNC_CONFIG_FILE=

 

:wq (저장하고 빠져 나온다)

 

● rsync daemon 을 재시작한다.

 root@outland:/home/starblood# /etc/init.d/rsync restart

 

 

3. 백업 script 작성

 

● 에디터로 아래와 같은 스크립트를 작성한다.

 starblood@northrend:~$ vi backup.sh

 

 #!/bin/bash

# Backup my precious documents my Backup Server(Debian)

# Backup documents

rsync -a -e ssh --delete documents/ starblood@outland:~/backup/Users/starblood/documents/

 

● 스크립트 파일에 실행 권한을 준다.

 starblood@northrend:~$ chmod +x backup.sh

 

 

마지막으로 백업을 수행한다.

 starblood@northrend:~$ ./backup.sh

 

백업 스크립트는 자신의 환경에 맞게 알맞게 수정하여 사용하면 된다. :)

 

출처 - http://blog.naver.com/johnforstar?Redirect=Log&logNo=30129627928

 





 

rsync3 고속으로 diff 백업

rsync --link-dest --rsync-path

<cite style="font-weight: bold; font-style: normal; ">hkataoka 대충쓴 일기</cite>

 

결국 이렇게 되었다(현 단계에서 메모)

CMD=/usr/local/bin/rsync

STRAGE=/var/backup

OLDEST=`date --date '7 days ago' +%Y%m%d`
											

LATEST=`date --date '1 days ago' +%Y%m%d`
											

 

for HOST in
								`ls $STRAGE`;
												

do
					


					if
							[
									-f
											$STRAGE/$HOST
															]
																	;
																			then
																				


					continue
						


					fi
						

 


					HOSTNAME=`cat $STRAGE/$HOST/hostname.txt`
								


					echo
							"backup start : $HOSTNAME"
											

 


					if
							[
									-d
											$STRAGE/$HOST/$OLDEST
																	]
																			;
																					then
																						


					rm -fr $STRAGE/$HOST/$OLDEST
												


					fi
						

 


					if
							[
									-d
											$STRAGE/$HOST/current ]
																	;
																			then
																				


					mv
							$STRAGE/$HOST/current $STRAGE/$HOST/$LATEST
																


					fi
						

 


					$CMD -az --delete \

  --link-dest="../$LATEST/" \

  --rsync-path="sudo $CMD" \

  --exclude-from=$STRAGE/$HOST/excludes.txt \

  backup@$HOST:/ $STRAGE/$HOST/current/

 

done;
					

로칼IP 동일한 명칭으로 디렉토리를 작성하면 백업 대상으로소 등록 되는 구조

아래는 초기설정, 타겟마다 설정

#-------------------------
					

# 초기설정
					

#-------------------------
					

scp backup.sh root@192.168.1.177:

ssh root@192.168.1.177
												

ssh-keygen -t rsa

useradd -G wheel backup

passwd backup

 

# rsync3 인스톨
					

cd /usr/local/src/

wget http://rsync.samba.org/ftp/rsync/rsync-3.0.7.tar.gz

tar xzfv rsync-3.0.7.tar.gz 

cd rsync-3.0.7
											

./configure

make

make install
						

 

#-------------------------
					

# 타겟마다 설정
					

#-------------------------
					

ssh work@192.168.1.172
												

su -

 

# rsync3 인스톨
					

cd /usr/local/src/

wget http://rsync.samba.org/ftp/rsync/rsync-3.0.7.tar.gz

tar xzfv rsync-3.0.7.tar.gz 

cd rsync-3.0.7
											

./configure

make

make install
						

 

# 백업유저 추가, sudo설정
					

useradd backup

visudo

backup ALL= NOPASSWD:/usr/local/bin/rsync

 

# 필요에 따라 공개키인증을 유효화 한다
					

vi /etc/ssh/sshd_config

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

 

# 백업 서버로 부터 공개키인증으로 로그인이 가능하도록 한다.
					

su - backup

vi ~backup/.ssh/authorized_keys

 

출처 - http://blog.naver.com/parkjy76?Redirect=Log&logNo=30135329075

 





 


리눅스 서버는 별도의 건물에 있고, 각종 외장 하드는 책상 주변에 있으니, 윈도우 데스크탑에서 리눅스 서버의 자료를 백업할 방법을 효과적인 방안을 모색해야 한다. ftp로 접속하여 파일을 가져오는 것은 대단히 미련하다. 항상 "전체 백업"만 해야 되기 때문이다. 리눅스쪽의 하드 디스크 드라이브를 samba를 이용하여 윈도우쪽에 연결한 뒤 SyncBack으로 백업하는 방법도 생각해 보았다. 그러나 samba 설정이 생각보다 어렵다. 분명히 대학원 시절에는 성공했었던 것 같은데, 보안 설정이 예전보다 까다로워진 모양일까, 잘 안된다.

   

그러면 반대의 방법으로 윈도우쪽 백업 매체를 공유로 설정한 뒤 리눅스에서 마운트한 다음 rsync로 백업하는 방법도 있다. 최종적으로 성공한 방법은 이것이다. 다음의 절차에 따르도록 한다.

   

  1. 탐색기->폴더옵션->보기->고급 설정에서 "모든 사용자에게 동일한 폴더 공유 권한을 지정(권장)"이 해제되어 있는지 확인한다.
  2. 제어판->관리 도구->컴퓨터 관리->로컬 사용자 및 그룹->사용자에서 오른쪽 마우스 버튼을 눌러 "새 사용자"를 연다. 새 사용자를 등록하되 "다음 로그온할 때 반드시 암호 변경"을 해제하고 "암호 사용 기간 제한 없음"을 설정한다.
  3. 백업 매체가 될 폴더의 공유를 설정한다. 공유 이름(share name)을 잘 기억해 둔다.  사용자 이름에서 Everyone은 제거하고, 새로 추가한 사용자를 넣되 모든 권한을 준다.
  4. 이제 리눅스쪽에서 다음과 같이 입력하여 마운트한다.

mount -t cifs -o username=<user_name>,passwd=<password> //<IP address>/<share_name> <mount할 위치>

   

CIFS(Common Internet File System)는 처음 접하는 파일 시스템 타입이다.

   

마운트가 끝났으면 rsync를 이용하여 작업하면 된다. 마치 리눅스 머신 안에서 파일들을 옮기는 것과 다를 바가 없으므로, rsync 서버의 설정은 필요 없이 오직 client만으로 작동할 수 있다.

   

rsync -avz src/bar    /mnt/win/backup

   

이렇게 하면 목적지인 /mnt/win/backup 아래에 bar라는 디렉토리가 생기면서 옮겨지게 된다.

   

rsync -avz src/bar/ /mnt/win/backup

   

원본 디렉토리 뒤에 슬래쉬를 붙이면 결과가 달라진다. /mnt/win/backup 아래에 bar 디렉토리를 만들지 않고, 대신 bar 디렉토리의 내용물을 옮기게 된다.

   

만일 원본에 더 이상 존재하지 않는 파일을 타겟에서도 제거하려면 다음과 같이 한다. 일종의 동기화인 셈이다.

   

rsync -avz --delete src/bar /mnt/win/backup

   

경험상 원본 파일을 tar로 묶어 버린 뒤 ftp로 옮겨 버리는 것이 가장 쉽고도 빠른 방법이었다. 그러나 이 방법은 원본이 변경된 경우 전체 백업을 새로 해야 하므로 백업 유지가 매우 불리해진다. rsync를 이용하면 파일과 디렉토리 구조에 전혀 신경을 쓰지 않아도 되는 장점이 있으나, 원본과 타겟을 스캔하고 파일 하나씩을 옮기는 데 시간이 좀 걸린다. 특히 phd file과 같이 한 디렉토리 안에 많은 수의 파일이 있을 때에는 스캔과 복사에 상당한 시간이 소요된다.

   

생산된지 오래 되어 잘 쓰지 않게 된 파일은 묶어 두고, 작업 중인 자료들은 폴더 구조를 유지한 채 rsync로 정기적 백업을 하는 것이 가장 적당할 듯.

 

[출처] 리눅스쪽의 자료 백업하기(윈도우 공유 폴더와 rsync 이용)|작성자 따봐

 

 

 

Posted by linuxism
,