반응형
백업
MySQL 데이터를 백업하는 방법은 크게 물리적 백업과 논리적 백업이 있다. 

1. 물리적 백업
 - 물리적 백업은 MySQL DB의 물리 파일을 백업하는 것이다.
 - 장점
  + 물리적 백업은 속도가 빠르며 작업이 단순하다.
 - 단점
  + InnoDB의 물리적 파일은 상응하는 논리 백업에 비해 상당히 크다.
  + 데이터 복구시에 문제가 발생할 소지가 있으면 문제발생시 원인파악 및 해결이 어렵다.

2. 논리적 백업
 - 논리적 백업은 mysqldump 혹은 기타 툴을 이용해서 SQL문을 갖는 텍스트 파일을 생성하는 것이다.
 - 장점
  + 논리적 백업은 데이터를 검토할 수 있다.
  + 복원작업이 수월하며, 물리적 백업에 비해 복원시 데이터 손상을 막아주며, 문제 발생시 원인 파악및 해결하기가 수월하다. 
 - 단점
  + 백업/복원시 시스템 리소스를 더 많이 소모한다. (물리적 백업은 파일 copy만 하면 되니까!!!)
  + 부동 소수점 데이터의 백업&복원시 데이터 정확성을 잃게 될 수 있다.

3. mysqldump 사용법
 $ mysqldump -u[userId] -p[password] --all-databases > dump.sql  // 서버에 있는 모든 것의 논리 백업 생성
 $ mysqldump -u[userId] -p[password] --databases [DB명] > dump.sql // 특정 데이터베이스만의 논리 백업 생성
 $ mysqldump -u[userId] -p[password] [DB명] [테이블명]

 
- 기타 옵션
   -A, --all-databases : 모든 DB 덤프
   -B, --databases : 특정 DB를 덤프

   --opt : 버퍼링을 비확성화 하고, 많은 데이터를 덤프에 있는 소량의 SQL구문에 기록해 더효율적으로 동작하다록 한다.
   --allow-keywords, --quote-names : 예약어를 사용하는 테이블을 덤프하고 복원할 수 있게 한다.
   --lock-alltables : 전역적으로 일관된 백업을 만들도록 "FLUSH TABLES WITH READ LOCK"을 사용한다. 
   --tab : "SELECT INTO OUTFILE"로 파일을 덤프하여, 덤프 및 복원 속도가 매우 빠르다.
   -d, --no-data :  데이터는 제외하고 스키마만 덤프
   -t, --no-create-info : 스키마는 제외하고 

4. dump 파일 복원 방법
 - mysql -u [userId] -p [password] [DB명] < dump.sql
 - mysql 접속한 후 아래의 명령 실행
     mysql> source dump.sql

 

출처 : http://dimdim.tistory.com/entry/MySQL-%EB%B0%B1%EC%97%85-%EB%B0%8F-%EB%B3%B5%EA%B5%AC 


 

반응형
반응형

php에서는 copy함수를 이용하여 간단하게 파일을 복사하거나 unlink(또는 delete)함수로 파일을 삭제할 수 있습니다. 이 두 함수는 복사, 삭제에 성공할 경우 true를, 실패하면 오류 코드 메시지를 표시하므로 함수 앞에 @를 붙여 보안 유효성을 높여 주도록 합니다.

bool copy ( string $source , string $dest [, resource $context ] ) (PHP 4, PHP 5)

 copy(원본 파일명, 복사 파일명);
 unlink(삭제 파일명);

대상 파일이 이미 존재하면 덮어 쓰는 점에 주의가 필요합니다. 다음은 파일 복사 예제입니다.

예제 (ex #1

 <?php
 
// test.php파일을 복사본 test.php.bak로 만듭니다.
 
$oldfile 'test.php'
// 원본파일
 
$newfile 'test.php.bak'
// 복사파일

 // 실제 존재하는 파일인지 체크...
 
if(file_exists($oldfile
)) {
      if(!
copy($oldfile$newfile
)) {
            echo 
"파일 복사 실패"
;
      } else if(
file_exists($newfile
)) {
            echo 
"파일 복사 성공"
;
      }
 }
 
?>


다음은 파일 이동 예제입니다.

예제 (ex #2

 <?php
 
// test.php파일을 test.txt로 만듭니다.
 
$oldfile 'test.php'
// 원본파일
 
$newfile 'test.txt'
// 복사파일

 // 실제 존재하는 파일인지 체크...
 
if(file_exists($oldfile
)) {
      if(!
copy($oldfile$newfile
)) {
            echo 
"파일 복사에 실패하였습니다."
;
      } else if(
file_exists($newfile
)) {
            
// 복사에 성공하면 원본 파일을 삭제합니다.
            
if(!@unlink($oldfile
)){
                 if(@
unlink($newfile
)){
                      echo 
"파일이동에 실패하였습니다."
;
                 }
            }
      }
 }
 
?>


단순히 파일이름만 변경 원할 경우 rename함수를 이용하면 됩니다. 이 함수는 파일(또는 폴더)의 이름을 변경합니다. 성공하면 true를, 실패하면 false를 반환합니다.

bool
rename ( string $oldname , string $newname [, resource $context ] ) (PHP 4, PHP 5)

예제 (ex #3

 <?php
 
// dir1 폴더를 dir2폴더로 이름을 변경합니다.
 
if(rename("dir1","dir2"
)){
     echo 
"이름 변경 성공"
;
 }

 
// file1.php을 file2.php로 이름을 변경합니다.
 
if(rename("file1.php","file2.php"
)){
     echo 
"이름 변경 성공"
;
 }
 
?>


단순히 copy, unlink함수를 이용하지 않고, fopen함수로 표현이 가능합니다. 다음이 그 좋은 예입니다.

예제 (ex #4

 <?php
 
// test.php파일을 복사본 test.php.bak로 만듭니다.
 
$oldfile 'test.php'
// 원본파일
 
$newfile 'test.php.bak'
// 복사파일

 
if(file_exists($oldfile
)) {
      
$data file_get_contents($oldfile
);
      
$fp fopen($newfile'w+'
);
      if(
is_resource($fp
)){
            
fputs($fp$data
);
      }
      
fclose($fp
);
 }
 
?>


예제 (ex #5

 <?php
 
// test.php파일을 복사본 test.php.bak로 만듭니다.
 
$oldfile 'test.php'
// 원본파일
 
$newfile 'test.php.bak'
// 복사파일

 
if(file_exists($oldfile
)) {
     
$fold fopen($oldfile,'r'
); 
     if(
is_resource($fold
)){
            
$fnew fopen($newfile,'w+'
); 
            
$len stream_copy_to_stream($fold,$fnew
); 
            
fclose($fold
); 
            
fclose($fnew
); 
     }
 }
 
?>

 

 

출처 : http://blog.habonyphp.com/62#.VS3Qm2ccS70

 

반응형

'웹프로그래밍 > PHP' 카테고리의 다른 글

PHP에서 csv로 저장시 연락처 0 삭제 방지  (0) 2015.10.23
정규식 정리  (0) 2015.06.14
PHP + jQuery AJAX Upload  (0) 2015.04.10
PHP XML CDATA Parsing  (0) 2015.04.10
PHP DOMDocument getting Attribute of Tag  (0) 2015.04.10
반응형
samba 계정 등록 절차는 다음과 같다. 
1. 시스템 사용자 등록(useradd) 및 패스워드 등록 (passwd)
2. 그룹 사용자 등록(gpasswd) 
3. samba 사용자 등록(smbpasswd)


1. 시스템 사용자 등록(useradd) 및 패스워드 등록(passwd)
[root@nmsfile ~]# useradd user01
[root@nmsfile ~]# passwd user01
Changing password for user user01.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

등록 확인 :  /etc/group 파일을 보면 user01 에 대한 내용이 추가된 것을 확인 할 수 있다. 
[root@nmsfile ~]# cat /etc/group
(-생략-)
testuser01:x:545:
user01:x:546:
[root@nmsfile ~]#


2. 그룹 사용자 등록(gpasswd) 
디렉토리에 대한 권한을 개별 사용자 별로 지정해 준다면 sambauser 파일에 등록해서 사용할수 있지만, 
그룹에 대한 설정이 안되서 그룹 사용자에 등록해서 samba 그룹 설정을 해준면 편한다. 
[root@nmsfile ~]# gpasswd -a user01 (등록할 group명)
user01 그룹에 (group명) 사용자 등록중

등록 확인 : 해당 그룹명 끝에 사용자이름(user01)이 추가된 것을 확인 
[root@nmsfile ~]# cat /etc/group
(group명):x:0:root, citylock, user01


3. samba 사용자 등록(smbpasswd)
마지막으로 samba사용자 등록해주면 된다. 여기서는 사용자 계정에 대한 얘기만 하겠다. 
(samba 설정에 대한 이야기는 다른 글을 통해서 확인해 주세요.)

[root@nmsfile samba]# smbpasswd -a user01
New SMB password:
Retype new SMB password:
Added user user01.
[root@nmsfile samba]#

등록 확인 : samba 디렉토리의 smbpasswd 을 열어보면 등록된 사용자 이름을 확인 할수 있다. 
[root@nmsfile samba]# cat /etc/samba/smbpasswd
#
# SMB password file.
#
citylock:502:CA2C4014679EACCEAAD3B435B51404EE:F2AEE55B79859CA8BD95FA8F38880D4B:[U          ]:LCT-47A7A405:
(생략....)
user01:546:32E9BD72F5671469AAD3B435B51404EE:84440338F26BF725BE78C015F7D62C88:[U          ]:LCT-4D2694F5:

 

 

출처 : http://citylock.tistory.com/547

반응형

'서버 등 운영체제(OS) > Linux' 카테고리의 다른 글

find 리눅스에서 파일 찾기  (0) 2015.04.20
innodb_force_recovery  (0) 2015.04.15
MySQL 백업과 복구  (0) 2015.04.15
crontab 설정 방법  (0) 2015.04.15
우분투 Postfix를 이용한 메일서버 구축  (0) 2015.04.09
반응형

[참고할 사이트] http://www.adminschoice.com/docs/crontab.htm

crond 데몬 /etc/rec.d/init.d/crond 스크립트에 의해 시작, 종료,재시작될 수 있다

기본 명령의 위치 :/user/bin/crontab

 =>아무곳에서도 실행 가능 함 등록,수정, 보기



 

사용형식

crontab [ -u 사용자 id] 파일

crontab [-u 사용자 id] { -l | -r | -e}


 

crontab -l : 예약된 작업리스트

crontab -e : 예약된 작업 수정

crontab -r : 예약된 작업 삭제



 

crond 실행 확인

=> ps -ef | grep crond



 

crond 시작

=> /etc/rc.d/init.d/crond start{restart | stop}


 

일반사용자에게 crontab 명령어 사용하도록 설정 허가

=> /etc/cron.allow 여기에 ID 등록


 

일반사용자의 crontab 명령어사용을 제한하고자 한다면

=>/etc/cron.deny  에 ID를 등록

즉,

=> /etc/cron.allow : 허용할 사용자 ID 목록
=> /etc/cron.deny  : 거부할 사용자 ID 목록

cron.allow 파일이 있으면 이 파일에 들어있는 ID만 사용 가능
cron.deny  파일이 있으면 이 파일에 들어있는 ID는 사용 불가

따라서 cron.deny에 truefeel ID를 추가해주면 됩니다.



 

등록 내용 설정

"분,시,일,월,요일, 실행명령" 순으로 설정



 

crontab 파일 형식
------    --------  ---------------------------------------------------
필  드    의  미    범  위
------    --------  ---------------------------------------------------
첫번째    분        0-59
두번째    시        0-23
세번째    일        0-31
네번째    월        1-12
다섯번째  요일      0-7 (0 또는 7=일요일, 1=월, 2=화,...)
여섯번째  명령어    실행할 명령을 한줄로 쓴다.
------    --------  ---------------------------------------------------

- 한 줄당 하나의 명령 (두줄로 나눠서 표시할 수 없음)
- # 으로 시작하는 줄은 실행하지 않는다 (주석)

 

 

crontab -e 을 하면 vi 에디터가 나온다.(환경변수 EDITOR에 따라 다른 에디터를 사용할 수 있다.)


  $ crontab -e
  # /home 디렉토리를 /BACKUP/home 으로 백업해둠
  # 30분, 새벽 4시와 낮 12시, 모든 일, 모든 월, 모든 요일
  30 4,12 * * *  /usr/bin/rsync -avxH --delete /home /BACKUP/home > /dev/null 2>&1

  # 파일/디렉토리 퍼미션 설정
  # 40분, 새벽 1시, 매주 일요일
  40 1    * * 0  /root/bin/perm_set.sh   > /dev/null 2>&1


  # 20분마다 실행

  */20 * * * * /shell/mrtg

 


 

위는 매일 4:30분과 12:30분에 rsync 명령을, 매주 일요일 1:40분에 perm_set.sh를 실행함을 의미한다.

vi 에디터를 통해 설정을 하므로 중요한 몇 가지 에디터 사용법은 익혀야 한다.

----  -----------------------------------------------------------------------------
키    의미
----  -----------------------------------------------------------------------------
i     현재 칸에 글을 넣는다.
o     다음줄에 글을 넣는다.
dd    한줄을 삭제한다.
:wq   저장하고 빠져나온다.
ESC   설정중에 명령어 모드(위의 i, o, dd 등을 사용할 수 있는 상태)로 빠져 나온다.
----  -----------------------------------------------------------------------------


설정 예

시간 설정에서 몇가지 의미있는 것들을 알아보자.

- '*'표시는 해당 필드의 모든 시간을 의미한다.
- 3,5,7 와 같이 콤마(,)로 구분하여 여러 시간대를 지정할 수 있다.
- 2-10와 같이 하이픈(-)으로 시간 범위도 지정할 수 있다.
- 2-10/3와 같이 하이픈(-)으로 시간 범위를 슬래쉬(/)로 시간 간격을 지정할 수 있다.
  (2~10까지 3간격으로. 즉, 3,6,9를 의미함)

=>  > /dev/null  2>&1 이 무슨 뜻입니까?
  지정한 명령어 처리 결과와 발생할지 모르는 에러메시지를 출력하지 않고 모두 버린다는(/dev/null)는
  뜻입니다. 만약 결과와 에러를 파일로 저장하려면 /dev/null 대신 파일명을 적어주면 됩니다.


 

예)

20  2     *  *  6  명령어 => 매주 토요일 새벽 2:20

0  4-6   *  *  *  명령어 => 매일 오후 4,5,6시

5  */2 *  *  * 명령어 => 매일 2시간간격으로 5분대에

15  1   1  *  *  명령어 => 매월 1일 새벽 1:15

30  0   1  1,7  *  명령어 => 1,7월 1일 새벽 0:30


 

10 2 * * * /app11/minsang/APP/ldap/run.sh > /app11/minsang/APP/ldap/cron_error.log
55 13 * * * /run.sh > /mail_cron_error.log
0,30 8-19 * * * /sendAdmin.sh > /cron_admin_error.log

 

 

출처 : http://egloos.zum.com/program/v/802690

반응형
반응형

1. input file tag on event

 

$('#tmp_widget_file').on('change', prepareUpload);
  function prepareUpload(event){files = event.target.files}
  $('#twf').on('submit', uploadFiles);

 

2. uploadFiles function

 

function uploadFiles(event){
 event.stopPropagation();
 event.preventDefault();

 var data = new FormData();
 $.each(files, function(key, value){
  data.append(key, value);
 });

 $.ajax({
  url: './page/getWidgetInfo.php?files',
  type: 'POST',
  data: data,
  cache: false,
  dataType: 'json',
  processData: false,
  contentType: false,
  success: function(data, textStatus, jqXHR){
   if(typeof data.error === 'undefined'){
    console.log(data);
   }else{
    console.log('ERRORS1: ' + data.error);
   }
  },
  error: function(jqXHR, textStatus, errorThrown){
   console.log('ERRORS2: ' + textStatus);
  }
 });
}

 

3. upload exe php

 

$data = array();
if(isset($_GET['files'])){
 $error = false;
 $filevar = "";
 $error_msg = "There was an error uploading your files";

 $uploaddir = '/home/namo/public_html/tmp/';
 foreach($_FILES as $file){
  if(move_uploaded_file($file['tmp_name'], $uploaddir.basename($file['name']))){
   $filevar = $file['name'];
  }else{
   $error = true;
  }
 }
 $data = ($error) ? array('error' => $error_msg) : array('files' => $filevar);

}

반응형

'웹프로그래밍 > PHP' 카테고리의 다른 글

정규식 정리  (0) 2015.06.14
[php] 파일 이동, 복사 함수  (0) 2015.04.15
PHP XML CDATA Parsing  (0) 2015.04.10
PHP DOMDocument getting Attribute of Tag  (0) 2015.04.10
임시로 PHP오류 출력할 때  (0) 2015.04.10
반응형

define(INFO, $path."info.xml");

$infoXML = new DOMDocument();

$infoXML->load(INFO);

$category = getXMLTextContent($infoXML, "group");

 

function getXMLTextContent($xml, $field){
 $vars = $xml->getElementsByTagName($field);
 foreach($vars as $var){
  foreach($var->childNodes as $child) {
   if ($child->nodeType == XML_CDATA_SECTION_NODE) {
    return $child->textContent;
   }
  }
 }
}

 

반응형
반응형

$xmldoc = new DOMDocument();
$xmldoc
->load('api response address');
foreach ($xmldoc->getElementsByTagName('item') as $feeditem) {
    $nodes
= $feeditem->getElementsByTagName('file');
    $linkthumb
= $nodes->item(0)->getAttribute('data');
    echo $linkthumb
;
}

반응형
반응형

일부 호스팅 환경에서는 PHP오류발생시 500에러코드로 분류되며 흰 공백화면으로 띄며 모든 작업이 중단되는 경우가 있다. 이럴 때 php 오류가 어느 라인에서 발생했는지 알수없어 답답하다.

그럴떄 아래와 같은 방법을 쓰면 된다.

 

error_reporting(E_ALL);
ini_set("display_errors", 1);

반응형

+ Recent posts