레이블이 mysql인 게시물을 표시합니다. 모든 게시물 표시
레이블이 mysql인 게시물을 표시합니다. 모든 게시물 표시

2017년 10월 25일 수요일

mysql binary logs 삭제하기

지정된 바이너리 미만 파일 삭제
#] mysql -uroot -p
#mysql] show binary logs;
#mysql] purge master logs to 'mysql-bin.000010';
#mysql] exit;


바이너리 로그 저장기간 설정(my.cnf)
#] vi /etc/my.cnf
=> expire_logs_days = 3;


바이너리 로그 저장기간 설정(콘솔)
#mysql] set global expire_logs_days=3;
#exit;

2015년 3월 30일 월요일

mysql bin파일(binary-log) 관리

mysql 설치 후 기본설정으로 장기간 사용하다 보면, 지속적으로 쌓인 bin 파일때문에 디스크가 부족해 지는 경우를 경험하게 된다.

물론 삭제 하는 방법도 있지만 설정만으로 간단하게 해결이 가능하다.
/etc/my.cnf 파일에 'expire_logs_day =  7' 이런식으로 로그 저장기간을 정하면 된다.

기본설정은 0 으로 되어 있어 삭제를 하지 않게 되어 있다. 적당한 기간(일)을 입력해서 무한적으로 늘어나는 바이너리 로그를 삭제가 가능하다.

참고로 이설정은 mysql 5.0.3 부터 지원 한다.

2015년 3월 10일 화요일

WARNING: The host '{domain}' could not be looked up with resolveip.

mysql 설치 완료후 mysql_install_db 실행시 아래와 같은 경고문구가 나오면서 실행되지 않는 경우가 있다.

#] mysql_install_db
WARNING: The host '{domain}' could not be looked up with resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !


해결방법
#] cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=domain

#] cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 domain
::1 localhost.localdomain localhost6 localhost6.localdomain6

network의 HOSTNAME이 hosts 파일에 빠져있다면 127.0.0.1 마지막에 넣어주자.

2014년 12월 19일 금요일

MYSQL replication 에서 master 서버 비정상 종료/재부팅 처리방법

[master 서버가 다운되어 재부팅 후 slave의 replication 문제 발생했을 경우]

1. 원인
mysql이 재시작되면서 log 파일명의 일련번호가 바뀌면서 생기는 것으로 추정(1증가)

2. 조치
  1) slave의 mysql 에러 로그에서 master서버의 로그명 및 위치 확인 후 

  2) master 서버에서
      mysql> SHOW BINLOG EVENTS [IN '로그명'] [FROM 위치] [LIMIT [옵셋,] 줄수]
      명령을 통해 master 로그의 해당 위치 이후에 실행된 내용들이 있는지 확인한다.
      ※ 아무 내용이 없다면 slave의 mysql을 중지시키고 master.info와 relay-log.info 파일을  수정한다.
      ※ 혹시라도 master 로그의 해당 위치 이후에 쿼리가 있다면 먼저 조치를 해줘야겠죠...
      ※ 중복되는 쿼리가 있어 skip하고 싶을 경우
           mysql> STOP SLAVE;
           mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = N;
                      ※ 일반적으로 하나의 쿼리를 skip할 경우 N=1로 하면되지만  auto increment 등이 포함된 경우 N=2로 해야겠죠.
          mysql> START SLAVE;

    3) master.info 파일 첫번째줄의 master로그명 수정(1증가), 2번째줄의 위치는 4로 수정

    4) relay-log.info 파일 3번째줄의 master로그명 수정(1증가), 4번째줄의 위치는 4로 수정
    ※ 어떤 경우 5번째 줄에 숫자가 있는 경우가 있는데 삭제 요망 (버그로 추정됨)

    5) slave의 mysql을 구동시킨다.

    6) show processlist 또는 show slave status 명령으로 정상동작여부 확인

※MYSQL replication 마스터-슬레이브 상황에서 마스터서버의 비정상적인 리부팅 현상으로 Peplication이 해제가 되어 위방법으로 복구
※ 마스터가 비정상적으로 재부팅되면서 로그.bin 파일의 일련번호가 1증가 되고 슬레이브는 이전 로그파일을 바라보는 현상 발생


출처 :http://www.lovelinux.net/xe/index.php?dummy=nnuvaujm&mid=linux&sort_index=readed_count&order_type=asc&page=4&document_srl=306

2014년 12월 14일 일요일

MYSQL을 활용한 순번 출력

PHP에서 게시판 리스트 출력 및 순번을 필요로 한경우 변수에 count를 1씩 증가하기 위해 아래와 같은 코드를 사용한다.

$a = 0;
foreach($array as $value) {
   $a++;
   ...
}


간단하게 MYSQL에서 아래와 같이 처리할 수 있다.
$query = "SET @NUM := 0";
$sth     = $DB->exec($query);
$query = "SELECT
                  @NUM := @NUM+1 AS CNT
          FROM ....";
$sth = $DB->prepare($query);
$sth->execute();

2014년 11월 3일 월요일

PHP PDO_MYSQL 시작하기

PHP 5.5.0 부터 mysql_query,mysql_fetch_array 등등 mysql* 확장함수가 폐지되어 MYSQLi 또는 PDO_MYSQL로 변경되어야 한다.

무작정 PHP버전을 5.5 이상으로 끌어올리면 난감한 상황이 발생하게 된다.

처음 PDO를 접하는 개발자에게 도움이 될만한 튜토리얼이다.

http://prash.me/php-pdo-and-prepared-statements/

간단한 예로 fetch() 와 fetchAll의 차이점 / query, prepare 적용 시점 / 예외처리 등

2014년 10월 17일 금요일

mysql 데이터가 존재하는 테이블에 auto_increment 속성 추가하기


처음 테이블 생성시 정상적으로 auto_increment 작업이 진행 된 경우에는 상관없지만, 데이터가 이미 추가된 테이블에 auto_increment 칼럼 추가시 오류가 발생한다.

아래와 같은 명령어로 처리 가능하다.

ALTER TABLE 테이블명 ADD COLUMN 컬럼명 INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

※ 이미 기본인덱스(PRIMARY KEY)가 설정되어 있다면 해제 후 위 명령 실행.
※ 실행 후 자동으로 일련번호 까지 생성됨