요약하자면
- 대용량 데이터를 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 |
0 댓글