MySQL에서 바이너리 로그는  쿼리 수행을 로그로 남기는 것이다. 이는 로그 백업으로 사용되어 복구로 쓰일 수 있고 Replication 사용 시 동기화에 사용된다.

my.cnf 파일에 다음과 같이 설정을 하면 바이너리 로그를 사용할 수 있다.

파라미터
의미
log-bin바이너리 로그 경로
binlog_cache_size바이너리 로그 캐시 사이즈
max_binlog_size바이너리 로그 최대 사이즈
expire_logs_days보관 기간
[mysqld]
log-bin=/var/log/mysql/bin.log
binlog_cache_size=2M
max_binlog_size=512M
expire_logs_days=7

cnf 파일 수정 후 MySQL 을 재기동하면 바이너리 로그가 생성되는 것을 볼 수 있다.

shell> cd /var/log/mysql
shell> ls -al
..
-rw-rw----. 1 mysql mysql   626  3월 21 17:09 bin.000001
-rw-rw----. 1 mysql mysql 12325  3월 21 17:24 bin.000002
-rw-rw----. 1 mysql mysql 36087  3월 21 17:43 bin.000003
-rw-rw----. 1 mysql mysql 12217  3월 21 17:45 bin.000004
-rw-rw----. 1 mysql mysql   104  3월 21 17:43 bin.index
..


다음 그림과 같이 A 에서 C를 가기위해서는 ssh 를 사용하여 B에 접속하고 B에서 C로 접속해야만 한다고 가정하자.

매번 C에 접속하기 위해서 B에 접속하고 다시 C에 접속하는 것이 번거롭기 때문에 ssh 터널링을 이용하여 A에서 C를 한 번에 접속할 수 있다.

ssh -L사용할포트:목적지IP주소:포트 서버IP주소

ssh -N -L10022:5.6.7.8:22 username@1.2.3.4

다음 명령어로 A에서 10022 포트를 이용하여 B에게 데이터가 전달이 되고 B에서 C에 전달된 데이터를 포워딩해준다라고 생각하면 되겠다.

-N 옵션은 단지 포워딩만 해주는 것이다. 

그 후 실제로 해당 포트를 이용하여 ssh를 통해 접속을 하면 된다.

ssh -p 10022 username@localhost


shell 을 이용하여 외부에서 DB 머신에 접근하여 CSV 파일로 추출 하려면 다음 명령어를 실행하면 된다.


$ mysql -u root -p -h localhost -e "select * from table_name;" | sed 's/\t/","/g;s/^/"/;s/$/"/;' > result.csv


+ Recent posts