innodb_buffer_pool_size 및 innodb_log_file_size를 증가시킨 후 mysql이 시작되지 않습니다


18

/programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 에서이 솔루션을 따르고 innodb_buffer_pool_size있으며 4G 이상으로 1G (또한 1024M) 로 증가 시키려고 했습니다. 로그 파일 크기 외에도 mysql은 해당 값으로 시작하지 않습니다. 512M으로 되 돌리면 mysql이 정상적으로 시작됩니다.

이 문제를 어떻게 해결할 수 있습니까? 내 서버는 16GB이며 Webmin sysinfo에 따르면 다음과 같습니다.

Real memory 15.62 GB total, 3.13 GB used

그 동안 오류 로그도 발견했습니다.

120529 10:29:32 pid 파일 /var/run/mysqld/mysqld.pid의 mysqld_safe mysqld가 종료되었습니다.

120529 10:29:33 mysqld_safe / var / lib / mysql의 데이터베이스로 mysqld 데몬 시작

120529 10:29:33 [참고] 플러그인 'FEDERATED'가 비활성화되었습니다.

120529 10:29:33 InnoDB : InnoDB 메모리 힙이 비활성화되었습니다

120529 10:29:33 InnoDB : Mutexes 및 rw_locks는 GCC 원자 내장을 사용합니다.

120529 10:29:33 InnoDB : 압축 테이블은 zlib 1.2.3을 사용합니다

120529 10:29:33 InnoDB : Linux 기본 AIO 사용

120529 10:29:33 InnoDB : 버퍼 풀 초기화, 크기 = 1.0G

120529 10:29:33 InnoDB : 버퍼 풀 초기화 완료

InnoDB : 오류 : 로그 파일 ./ib_logfile0의 크기가 다른 크기 0 134217728 바이트

InnoDB : .cnf 파일 0 268435456 바이트에 지정된 것보다!


그것에 대한 오류 로그를 공유해 주
시겠습니까

고마워, 나는 그것을 찾을 수 있었다. 나는 이것이 더 쉬울 것이라고 생각한다. 또한 버퍼 풀의 증가와 일치하도록 로그 파일 크기를 늘렸다는 것을 처음에 추가해야했습니다 (이 정보를 지금 추가했습니다).
giorgio79

좋아 @ giorgio79 ...
압둘 마나프

로그 파일을 삭제하십시오.
dezso

로그 파일 크기를 먼저 삭제 했습니까? 모든 데이터베이스를 먼저 삭제 했습니까? 정확히 무엇을했는지 더 많은 정보를 추가해주세요.
ALH

답변:


19

@RickJames@drogart 의 두 가지 대답 은 본질적으로 치료법입니다. (각각 +1).

표시된 오류 로그에서 마지막 두 줄은 다음과 같이 말합니다.

InnoDB : 오류 : 로그 파일 ./ib_logfile0의 크기가 다른 크기 0 134217728 바이트

InnoDB : .cnf 파일 0 268435456 바이트에 지정된 것보다! `

이때 InnoDB Transaction Logs ( , )가 각각 128M (134217728) 인 동안 innodb_log_file_size 를 256M (268435456)으로 설정 한 것이 분명합니다 . 귀하의 질문 에 내 StackOverflow 답변 에 대한 링크를 다시 살펴보면 다음을 수행해야했습니다.my.cnfib_logfile0ib_logfile1

단계 01) 이것을 다음에 추가하십시오 my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

단계 02) OS에서이 명령을 실행

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

무슨 일이 일어나고 있는지 확신 tail -f하려면 오류 로그에 대해 실행 하십시오. 각 innodb 로그 파일이 작성 될 때 알려주는 메시지가 표시됩니다.


고마워, 그래, 나는 그들을 먼저 삭제하지 않았습니다. mysql의 작동 방식을보고 싶었습니다. 3 단계를 수행 한 후 재시작이 작동했습니다.
giorgio79

1
로그 파일을 삭제하지 말고 다른 곳으로 옮기고 나중에 로그 파일 크기를 성공적으로 변경하면 잠시 삭제해야한다고 생각합니다. 그렇지 않으면을 실행하기 전에 MySQL이 충돌하면 문제가 발생할 수 있습니다 service mysqld stop.
KajMagnus

4

로그의 오류에 따라 다음과 같이 추측합니다.

  • MySQL을 종료
  • innodb 로그 파일 크기를 변경하기 위해 my.cnf를 편집했습니다.
  • mysql을 시작하려고 시도했지만 실패했습니다.

로그 파일 크기를 변경하면 이전 로그 파일을 제거해야합니다. 기존 파일이 구성 파일에서 지정된 크기와 일치하지 않으면 Innodb가 성공적으로 시작되지 않습니다. 다른 곳으로 옮기면 innodb는 시작할 때 올바른 크기의 새 트랜잭션 로그 파일을 만듭니다.

서버가 새로운 로그 파일로 작동하고 모든 것이 정상으로 보일 때까지 이전 파일을 삭제하는 대신 다른 디렉토리로 이동하는 것이 좋습니다.


3

InnoDB 만 실행중인 경우 buffer_pool은 사용 가능한 RAM 의 약 70 %로 설정해야합니다 .

로그 크기는별로 중요하지 않습니다. 최적은 (업타임 * innodb_log_file_size / Innodb_os_log_written) 대략 3600 (1 시간) 이되도록 설정하는 것입니다 .

로그 크기를 변경하려면

  1. mysqld를 깨끗하게 종료
  2. my.cnf (my.ini)의 값을 삭제하십시오.
  3. 로그 파일을 삭제
  4. retstart-새 로그 파일이 다시 작성됩니다.

고마워, 네, 이것도 정답입니다. 그래도 하나만 받아 들일 수있었습니다. 이것도 +1했습니다.
giorgio79

1

버퍼 풀 크기에 제공된 값에 문제가있을 수도 있습니다 . 내 사건에서 일어난 것처럼 ...

를 늘리거나 줄이면 innodb_buffer_pool_size작업이 청크로 수행됩니다. 청크 크기는 innodb_buffer_pool_chunk_size구성 옵션에 의해 정의되며 기본값은 128M입니다. 자세한 내용은 InnoDB 버퍼 풀 청크 크기 구성을 참조하십시오 .

버퍼 풀 크기는 항상의 배수이거나 같아야합니다 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. innodb_buffer_pool_size값을 배수가 아닌 값으로 구성 하면 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances버퍼 풀 크기가 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances지정된 버퍼 풀 크기보다 작 거나 같은 값으로 자동 조정됩니다 .

이 예에서는 innodb_buffer_pool_size8G innodb_buffer_pool_instances로 설정되고 16 innodb_buffer_pool_chunk_size으로 설정됩니다 . 기본값은 128M입니다.

8G는 2의 innodb_buffer_pool_size배수 인 8G이므로 유효한 값 innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.