MySQL 대용량 import 주의 binary log

요약하자면

  • 대용량 데이터를 import 할 때는 binary log 보관 기간을 최소화 하자. 
  • MySQL 기본 설정으로 import 하면, 대략 그만큼의 디스크 용량이 필요하기 때문이다. 
  • import 후에는 binary log 보관 기간을 적절히 변경한다. 

MySQL 버전이다. 

1
2
3
user@dev:~$ mysql version
mysql  Ver 8.0.320ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
user@dev:~$
cs

가상서버호스팅 이전 중 문제 발생

가상서버호스팅 변경하고, 서버 이전을 하고 있다. MySQL 데이터를 import 하다가 실패했다. 원인은 디스크 풀, 용량이 많기는 하지만 꽉 찰 정도는 아니었다.

원인은 MySQL에서 생성하는 binary log 였다. MySQL은 수행 기록을 저장하는데, 기본 설정은 30일간 보관이다. 그러니 import 를 제대로 수행하려면 디스크 용량을 충분히 확보하자. 최소한 복원할 자료의 두배 이상이어야 한다. 여의치 않다면 binary log 보관 기간을 최소화하고, 수행하는 것도 방법이다. 

이렇게 작업했다. 

먼저 기존의 binary log를 삭제했다. 

1
2
3
4
5
6
7
8
9
10
11
12
mysql> purge binary logs before now();
Query OK, 0 rows affected, 1 warning (0.02 sec)
 
mysql> show binary logs;
++++
| Log_name      | File_size | Encrypted |
++++
| binlog.000109 |  31231733 | No        |
++++
1 row in set (0.00 sec)
 
mysql>
cs

binary log 보관 기간을 30분으로 설정했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> show global variables like ‘binlog_expire_logs_seconds’;
+++
| Variable_name              | Value   |
+++
| binlog_expire_logs_seconds | 2592000 |
+++
1 row in set (0.05 sec)
 
mysql> set global binlog_expire_logs_seconds=1800;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show global variables like ‘binlog_expire_logs_seconds’;
+++
| Variable_name              | Value |
+++
| binlog_expire_logs_seconds | 1800  |
+++
1 row in set (0.00 sec)
 
mysql>
cs

MySQL import 를 실행했다. 

1
2
3
4
5
user@dev:~$ nohup mysql uUser pPassword MyDatabase < MysqlDump.sql > MysqlDump.log &
[121046
user@dev:~$ nohup: redirecting stderr to stdout
 
user@dev:~$
cs

잘 끝났다.

1
2
3
user@dev:~$
[1]+  Done                    nohup mysql uUser pPassword MyDatabase < MysqlDump.sql > MysqlDump.log &
user@dev:~$
cs

binary log 보관 기간을 30일로 변경했다.

1
2
3
4
5
6
7
8
9
10
11
12
mysql> set global binlog_expire_logs_seconds=2592000;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show global variables like ‘binlog_expire_logs_seconds’;
+++
| Variable_name              | Value   |
+++
| binlog_expire_logs_seconds | 2592000 |
+++
1 row in set (0.05 sec)
 
mysql>
cs

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤