블로그 이미지
괴스트

예진이와 고고씽!!

Rss feed Tistory
Dev/php 2010/01/25 16:19

ssh2_connect 함수를 사용해 원격서버에 파일올리기

크리에이티브 커먼즈 라이선스
Creative Commons License
<?
# 설정
$host = 222.222.222.222";
$connect_id = "ididid";
$connect_pw = "pwpwpw";


class SFTPConnection
{
    private $connection;
    private $sftp;

    public function __construct($host, $port=22)
    {
        $this->connection = @ssh2_connect($host, $port);
        if (! $this->connection)
            throw new Exception("Could not connect to $host on port $port.");
    }

    public function login($username, $password)
    {
        if (! @ssh2_auth_password($this->connection, $username, $password))
            throw new Exception("Could not authenticate with username $username " .
                                "and password $password.");

        $this->sftp = @ssh2_sftp($this->connection);
        if (! $this->sftp)
            throw new Exception("Could not initialize SFTP subsystem.");
    }

    public function uploadFile($local_file, $remote_file)
    {
        $sftp = $this->sftp;
        $stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w');

        if (! $stream)
            throw new Exception("Could not open file: $remote_file");

        $data_to_send = @file_get_contents($local_file);
        if ($data_to_send === false)
            throw new Exception("Could not open local file: $local_file.");

        if (@fwrite($stream, $data_to_send) === false)
            throw new Exception("Could not send data from file: $local_file.");

        @fclose($stream);
    }
}


    $sftp = new SFTPConnection($host, 22);
    $sftp->login($connect_id, $connect_pw);
   //$sftp->uploadFile("/tmp/to_be_sent", "/tmp/to_be_received");

  
    $sftp->uploadFile($tmp_file , $randumid);

?>

원격지 서버의 ftp 프로그램이 secure ftp(22번포트사용) 일 경우에는 ftp_connect () 함수를 이용할 수 없다.

따라서 ssh2_connect() 함수를 이용해야 하는데 이 함수를 사용하기 위해서는 openssl(lib), libssh2, php_ssh2 를 아파치에 설치해야 한다.



저작자 표시
Dev/php 2010/01/25 10:06

mysqldump 사용하여 백업 및 복구

크리에이티브 커먼즈 라이선스
Creative Commons License
1. 덤프뜨기

$> mysqldump -u[사용자아이디] -p 데이터베이스명 [테이블명] > 저장될 파일명

예) mysqldump -ukamkami -p mydatabase > kamkami.pe.kr.sql

이렇게 하면 디비(mydatabase)를 몽땅 덤프를 뜨게된다.

테이블만 덤프를 뜨고 싶다면

예) mysqldump -ukamkami -p mydatabase member_table > kamkami.pe.kr.member_table.sql

이렇게 하면 테이블만 덤프를 뜰 수 있다.

2. 복구하기

덤프 파일을 가지고 복구를 하는 방법도 간단하다.
$> mysql -u[사용자아이디] -p [디비명] < 덤프파일명

예) mysql -ukamkami -p < kamkami.pe.kr.sql
예) mysql -ukamkami -p mydatabase < kamkami.pe.kr.member_table.sql



1.특정 db의 특정 table에서 원하는 값만 덤프받기

>> edu라는 디비에 a,b,c라는 테이블이 있다. 여기서 a라는 테이블에서 no가 7번이상이고 10번
이하인 값만 덤프를 받고자 한다. 어떻게 하겠는가?
여기서 사용되는 옵션은 -w 이다.그럼 위 질문의 sql문은 아래와 같다

mysqldump -u mysql_admin -p edu a -w'no=>7 and no=<10' > edu_a_cond.sql

위와같이 하면 no가 7~10번까지가 덤프될것이다.
위에서 조건문은 -w 다음에 싱글쿼테이션으로 묶어준다. sql에서 사용하는 조건문이 다 될듯싶

다. 모두 테스트를 해보진 않았다.

2.디비 스키마(Schema)만 백업받기

>>초기에 작성해 놓은 테이블 스키마가 없을때 어떻게 하겠는가?
만약 하나의 테이블이라면 desc 해서 일일이 다 삽질을 하면 되것지만 만약 테이블이 100개라

면 ..크억...이럴때 사용하는 mysqldump옵션이 있습니다.
-d 입니다.

!.edu라는 디비의 모든 테이블 스키마를 백업받으려면

mysqldump -u mysql_admin -p -d edu > edu_db.sql

!.edu라는 디비의 a라는 테이블 스키마를 백업받으려면
저작자 표시
TOTAL 114,290 TODAY 48