요약하자면
- 대용량 데이터를 import 할 때는 binary log 보관 기간을 최소화 하자.
- MySQL 기본 설정으로 import 하면, 대략 그만큼의 디스크 용량이 필요하기 때문이다.
- import 후에는 binary log 보관 기간을 적절히 변경한다.
MySQL 버전이다.
1
2
3
|
user@dev:~$ mysql ––version
mysql Ver 8.0.32–0ubuntu0.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 &
[1] 21046
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 |