blog
  • 2022.12.06 04:33:55
  • kimhi65@0c7d

[PHP유지보수][워드프레스] 웹호스팅에서 Shell 명령어로 데이터와 DB 백업과 복원하기

안녕하세요 ?
국내 유일의 무료 워드프레스 쇼핑몰 "우커머스 교실"에서 사용하고 있는, 워드프레스 shell 커맨트 모드에서 워드프레스 Cli(Command Line Interface) 전용으로 개발된 my-cli 인 shell script에 대해서 알아보도록 하겠습니다.
일반적으로 워드프레스하면 속도가 느리다는 평가가 많습니다. 아무래도 기능이 많고 어려가지 변수를 많이 고려하다 보니 굳이 쓸모 없는 기능을 까지 넣어서 하드웨어 용량이나 메모리 용량이 커지는 경우가 많습니다. 이런 워드프레스 웹사이트를 단순한 FTP로만 관리하다 보면 많은 시간을 소모하게 되는데요. 그것을 위하여 특별하게 다보리에서 제작한 shell script를 이용하면 그 작업 시간을 1/10이하로 단축할 수 있습니다. 다보리에서는 아마존 웹서비스이 가상 서버로 로그인하여 Root의 강력한 권한으로 모든 작업을 진행할 수 있도록 많은 shell script를 이미 개발해놓은 상태입니다.
다보리의 아마존 웹 서비스에서 사용하는 ssh-key 인증 방식으로 좀 더 개선하여 강력한 보안과 아울러 로그인시 비밀번호가 필요없는 인증키 로그인 방식을 채택하고 있습니다.

그러면 SSH Key란 서버에 접속 할 때 비밀번호 대신 key를 제출하는 방식입니다. SSH Key를 사용하는 이유는
(1)비밀번호 보다 높은 수준의 보안을 필요로 할 때
(2)로그인 없이 자동으로 서버에 접속 할 때
입니다.
SSH Key가 동작하는 방식을 간단하게 설명하면 SSH Key는 공개키(public key)와 비공개 키(private key)로 이루어지는데 이 두개의 관계를 이해하는 것이 SSH Key를 이해해야 합니다. 이키를 생성하면 공개키와 비공개키가 만들어지는데 이 중에 비공개키는 자신의 PC에 위치해야 하고, 공개키는 서버에 위치해야 합니다. 다보리에서는 서버 설치시 미리 공개키를 서버에 보안이 될 수 있도록 미리 심어서 제공합니다.
이 때 SSH 접속을 시도하면 SSH Client가 로컬 머신의 비공개키와 원격 머신의 비공개키를 비교해서 둘이 일치하는지를 확인합니다. Windows에서도 사용하는 putty 같은 툴이 있습니다만 ssh 인증키 방식으로 로그인 하는 것은 많이 복잡합니다. 그래서 git bash라는 linux 용 커맨트 에뮬레이트를 이용하여 리눅스 서버에 SSH 인증키 방식으로 로그인 합니다. 이후 일반적으로 로그인시 보안을 위해 일반 계정으로 로그인한 후 sudo -i와 같은 명령어로 root로 권한 상승을 하여 커맨트 모드로 사용을 시작하게 됩니다.
Windows git bash를 설치하려면 https://git-scm.com/downloads 로 설치하시면 되며 설치시의 메뉴얼은 http://library1008.tistory.com/51 를 참조하시기 바랍니다. 그리고 원래 이 툴은 개발자들이 소스관리를 위한 git 용도로 개발되었으나 우리는 해당 기능은 필요없으므로 shell의 ssh 기능만 필요하므로 읽지 마시고 Skip하시면 됩니다.
Git Bash를 실행한 후 이미 이메일로 보내진 ssh-key 인증 접속 zip 화일을 설치한 상태에서
[cc lang="js" lines="100"]
# ./mssh [서버코드] <<1>>
Last login: Wed Feb 1 13:26:53 2017 from [내부 ip]
[사용자계정명@ip-172-31-6-112 ~]$ sudo -i <<2>>
[root@서버명:1 ~]#
[/cc]


linux 기본 폴더 이동 명령어는 cd 이고 현재폴더 확인은 pwd 입니다. 자세한 사항은
cd 와 pwd 명령어 사용법 : http://webdir.tistory.com/144
리눅스 기본 명령어 : http://m.blog.naver.com/occidere/220816747961
(주의1)명령어를 쓰기 전에 항상 현재 폴더가 중요하기 때문에 pwd로 확인하는 것이 중요합니다.
(주의2)폴더는 가급적 /home/[사용자계정명]을 벋어나지 않고 쓰시는 것을 권장합니다.
잘못해서 중요한 화일을 지우면 서버가 부팅이 안되는 경우도 있기 때문입니다.

아래는 다보리 서버에서 자주 쓰이는 cd 명령어를 축약해서 만들어 놓은 것이므로 활용하시면 됩니다.
명령어이동위치
cdz [사용자계정]사용자계정의 폴더로 이동
cdv사용자계정 폴더 상태에서 backup 폴더로 이동
cdh사용자계정 폴더 상태에서 DocumentRoot(홈페이지 최상위 계정)로 이동
일반적으로 /home/[사용자계정명]/public_html 폴더임.
cdp사용자계정 폴더 상태에서 실시간 백업 폴더로 이동
일반적으로 /home/[사용자계정명]/backups 폴더임.
l 또는 ll현재 폴더의 화일에 대한 상세내용을 리스트

(주의3) public_html 폴더는 해당 웹호스팅의 주 도메인 계정에 소프트 링크되어 사이 자동 백업이나 복원및 모든 사이트 작업 자동화와 관계가 있습니다. 주 도메인 계정에 soft link 된 publice_html를 삭제하거나 변경하면 정상 백업이 되지 않거나 심한 경우 사이트가 오작동 또는 스스로 삭제하는 상황이 벌어지므로 절대 변경하거나 삭제하지 마십시요.


다보리에서는 워드프레스 웹호스팅 사용자를 위하여 실시간 백업/복원을 명령어를 아래와 같이 지원하고 있습니다. 실시간 백업폴더는 일반적으로 /home/[사용자계정명]/backups 폴더입니다.
명령어내용
mytar [사용자계정]public_html 전체를 [사용자계정]년월일시분.sql로 백업
mydump [사용자계정]사용자계정 DB를 [사용자계정]년월일시분.tar로 백업
dumptar [사용자계정]사용자계정 public_html 전체와 DB 백업
mydrop [사용자계정]_db사용자계정 DB 초기화
myrestore [백업화일] [사용자계정]_db사용자계정 DB 초기화
tar xvf [백업화일]tar 화일을 현재 폴더에서 복원함.
복원시 [사용자계정 홈폴더]에서 복원할 것.
사용자 계정 백업 예제
[cc lang="js" lines="100"]
[초기사용자계정@ip-172-31-6-112 ~]$ sudo -i
[root@Seoul-A:1 ~]# cdz parks <<사용자 계정 홈폴더로 이동>>
[root@Seoul-A:1 parks]# dumptar parks <<사용자계정의 데이터와 DB 백업>>
[root@Seoul-A:1 parks]# cdv << 사용자계정 백업 폴더로 이동>>
[root@Seoul-A:1 backups]# ll <<현재폴더의 백업 화일 내용 확인>>
total 154384
-rw-r--r-- 1 parks apache 2139837 Feb 2 13:15 parks-170202_1315.sql
-rw-r--r-- 1 parks apache 155944960 Feb 2 13:15 parks-170202_1315.tar
[root@Seoul-A:1 backups]#
[/cc]
사용자 계정 초기화 및 복원 예제
[cc lang="js" lines="100"]
[root@Seoul-A:1 backups]# mydrop parks_db <<db초기화>>
[root@Seoul-A:1 backups]# myrestore parks-170202_1315.sql parks_db
<<백업DB 복원>>
[root@Seoul-A:1 backups]# mv parks-170202_1315.tar .. <<상위폴더 화일옮김>>
[root@Seoul-A:1 backups]# cd .. <<사용자계정 홈폴더로 이동>>
[root@Seoul-A:1 parks]# pwd <<현재폴더 확인>>
/home/parks
[root@Seoul-A:1 parks]# rm -rf public_html <<현재 사이트 전체 삭제 !!조심할 것>>
[root@Seoul-A:1 parks]# tar xvf parks-170202_1315.tar <<웹사이트 데이터 복원>>
[/cc]
(주의) rm 명령 쓸때는 조심해야 하며 특히 -rf 옵션시에는 항상 pwd로 먼저 현재 폴더를 확인하시기 바랍니다.



다보리에서는 root가 화일을 복사하거나 변경하였을때를 대비해서 계정 권한을 풀수 있는 있는 모드변경 명령어를 제공합니다. 일반적으로 다른 서버에서 가져온 웹호스팅 계정의 데이터 화일은 사용자 계정명과 화일 권한이 다른 경우가 대부분이므로 반드시 myfreeze나 mymelt로 사용자계정에 맞도록 권한 설정을 다시해주셔야 FTP 프로그램으로 화일의 수정이 가능해집니다.
명령어내용
mystatus각 계정의 잠금 상태를 봅니다.
myfreeze [사용자계정]사용자 계정을 잠구어 해킹 방지의 효과가 발생합니다.
필수화일만 수정 가능합니다.
mymelt [사용자계정]사용자 계정을 풀어줍니다. 모든 화일이 수정 가능합니다.

댓글쓰기