[Project :: Server] MariaDB 백업설정 및 데이터 이관 2017-09-27

데이터베이스를 주기적으로 파일로 백업하기 위한 과정을 정리해본다.

Step 1. 쉘스크립트 파일을 작성한다.

vi [쉘파일저장경로]backup.sh
#!/bin/bash
today=`date +%Y%m%d`
deleteDay=`date +%Y%m%d -d '-[백업파일보존일수]days'`
backupDirectory="[파일저장경로]"
dbList='[데이터베이스1] [데이터베이스2]'

### create Folder ###
echo "createDay : "$today
/bin/mkdir -p ${backupDirectory}/${today}_all
cd ${backupDirectory}/${today}_all
echo "OK"

### backup Project ###
for db in $dbList; do
   echo "backupDB : "$db
   /bin/mkdir -p ${backupDirectory}/${today}_all/$db
   mysqldump -u [아이디] -p'[비밀번호]' --skip-add-drop-table --no-create-info --complete-insert --ignore-table=[제외시킬테이블] $db > ${backupDirectory}/${today}/$db/$db.sql
done

Step 2. 스크립트 파일이 주기적으로 실행되도록 스케쥴러에 등록한다.

crontab -e
# 새벽 5시에 백업
00    05    *    *    *    [쉘파일저장경로]backup.sh

[참고] 백업 받은 파일을 또다른 서버(개발 또는 스테이징)에 복사한 후 다음 명령으로 데이터를 IMPORT할 수 있다.
* 백업파일 IMPORT (리눅스)

[MYSQL경로]/mysql -u [아이디] -p [데이터베이스1] < [백업파일저장경로][데이터베이스1].sql
[MYSQL경로]/mysql -u [아이디] -p [데이터베이스2] < [백업파일저장경로][데이터베이스2].sql

* 백업파일 IMPORT (윈도우)

[MYSQL경로]\mysql.exe -u [아이디] -p"[비밀번호]" [데이터베이스1] < "[백업파일저장경로][데이터베이스1].sql"
[MYSQL경로]\mysql.exe -u [아이디] -p"[비밀번호]" [데이터베이스2] < "[백업파일저장경로][데이터베이스2].sql"

[문제해결] Can’t create/write to file ‘/mysql/tmp/ibSAi4kh’ (Errcode: 28 – No space left on device) 2016-07-04

1. 문제상황

> 여러 사이트를 운영중인 서버에서 mysql이 stop 되어 start를 시도 하였으나 다음과 같은 에러가 발생하며 시작되지 않았다.

제목 없음

Can't create/write to file '--/mysql/tmp/ibSAi4kh' (Errcode: 28 - No space left on device)
InnoDB: Error: unable to create temporary file; errno: 28
InnoDB: Assertion failure in thread 140119057037088 in file lock0lock.cc line 620

2. 문제확인

> 임시파일을 생성할 수 없다는 에러 문구로 보아 디스크 용량 부족을 체크하였다.

> df
Filesystem           1K-blocks     Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      15971272  8504680   6648624  57% /
tmpfs                   508116        0    508116   0% /dev/shm
/dev/xvda1              487652    48917    413135  11% /boot
/dev/xvdb             82438832 22826180  55418348  30% /data

디스크 용량은 문제가 없어보인다.
> Inodes 를 체크하였다.

> df -i
Filesystem            Inodes  IUsed   IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root
                     1024000 1023999  1   100% /
tmpfs                 127029      1  127028    1% /dev/shm
/dev/xvda1            128016     44  127972    1% /boot
/dev/xvdb            5242880    257 5242623    1% /data

IUse% 가 100%가 되어 “No space left on device”에러가 발생한 것으로 보인다.
inode는 파일마다 하나씩 부여되는데 가득차서 더이상 파일을 생성할 수 없게 된다. 그렇다면 1024000라는 크기만큼 파일이 생성된듯 하다.

시스템에서 이정도로 많은 파일을 생성하지는 않을 듯하여 서비스 중인 폴더를 체크하였다.

> for i in /*; do echo $i; find $i |wc -l; done
/bin
92
/boot
35
/data
248
/dev
564
/etc
1353
/home
899792
/lib
6235
/lib64
490
/lost+found
1
/media
1
/mnt
1
/opt
3925
/proc
35597
/root
27
/sbin
232
/selinux
1
/_Service
268
/srv
1
/sys
4257
/tmp
775
/usr
50693
/var
4580

home폴더의 파일갯수가 무려 899792 나 된다.
하위 폴더를 검색하자

> for i in /home/*; do echo $i; find $i |wc -l; done
...

대체적으로 간단한 홈페이지를 만들기위해 사용된 그누보드에서 파일갯수가 많다. 아마도 세션파일이나 캐싱 파일로 짐작된다.
하위 폴더에서 확인결과 그누보드의 /data/session폴더에 파일 갯수가 엄청났다.


3. 문제해결

> 세션파일의 경우 현재 필요한 세션이 아닌것이 대부분이다. 주기적인 삭제가 필요하다. 일단 mysql 서비스를 실행하기 위해 rm 명령으로 삭제하자.

> rm -rf --/session/*

제목 없음2
> -bash: /bin/rm: Argument list too long 라는 에러가 발생한다. 파일 갯수가 너무많아 한번에 삭제가 불가능한 것이다.

> rm -rf --/session/sess_0*
> rm -rf --/session/sess_1*
> rm -rf --/session/sess_2*
> rm -rf --/session/sess_3*
...

> ls로 파일명을 확인하여 패턴에 따라 삭제하였다.
> 파일을 삭제하니 정상적으로 mysql이 구동되었다.

제목 없음3

> 세션 파일을 주기적으로 삭제하기 위해 스크립트 파일을 만들어 cron에 등록하도록 하자.

[문제해결] MSSQL 설치 후 80포트가 열리지 않음 2015-11-02

1. 문제상황

> MSSQL 2008 을 설치 후 웹서버가 실행되지 않았다
mssql


2. 문제확인

80포트가 이미 사용중으로 보인다. 검색해보니 MSSQL 설치시 SQL Server Reporting Services(MSSQLSERVER)가 기본적으로 80포트를 사용한다.


3. 문제해결

웹서버가 80포트를 사용토록 하기 위해서 SQL Server Reporting Services 설정을 변경해본다

시작 > Microsoft SQL Server 2008 R2 > 구성 도구 > Reporting Services 구성관리자

mssql_reporting

mssql_reporting_set

mssql_reporting_adm

mssql_reporting_adm2

웹서비스 URL & 보고서 관리자 URL 항목에서 80포트를 사용하지 않을 포트로 변경하면 웹서버에서 80포트 사용이 가능하다.