MySQL Innodb : InnoDB : ERROR : 마지막 체크 포인트의 수명이 InnoDB : 로그 그룹 용량을 초과 함


25

나는 정말로 mysql 전문가가 필요하다. 나는 mysql의 초보자이며 지난 1 주 동안 내 서버의 서버 충돌이 발생합니다.

우분투에서 mysql 5.1.36을 사용하고 있습니다. 듀얼 코어 및 4GB 메모리와 40GB SSD를 갖춘 전용 mysql 서버입니다.

로그 오류는 다음과 같습니다.

120413 23:57:15 [Note] Plugin 'FEDERATED' is disabled.
120413 23:57:15 [Warning] option 'innodb-autoextend-increment': unsigned value 2000 adjusted to 1000
120413 23:57:15  InnoDB: Initializing buffer pool, size = 2.9G
120413 23:57:15  InnoDB: Completed initialization of buffer pool
120413 23:57:16  InnoDB: Started; log sequence number 0 44234
120413 23:57:16 [Note] Event Scheduler: Loaded 0 events
120413 23:57:16 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.1.58-1ubuntu1-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)
120414  0:00:25 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=e2-relay-bin' to avoid this problem.
120414  0:00:25 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='', master_port='3306', master_log_file='', master_log_pos='4'. New state master_host='', master_port='3306', master_log_file='mysql-bin.000043', master_log_pos='87039427'.
120414  0:58:37 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='', master_port='3306', master_log_file='mysql-bin.000043', master_log_pos='87039427'. New state master_host='', master_port='3306', master_log_file='mysql-bin.000043', master_log_pos='87846901'.
120414  2:20:34  InnoDB: ERROR: the age of the last checkpoint is 241588252,
InnoDB: which exceeds the log group capacity 241588224.
InnoDB: If you are using big BLOB or TEXT rows, you must set the   
InnoDB: combined size of log files at least 10 times bigger than the
InnoDB: largest such row.

My.cnf는 다음과 같습니다.

default-storage-engine=innodb
default-table-type=innodb
key_buffer              = 384M
max_allowed_packet      = 64M
thread_stack            = 256K
thread_cache_size       = 16
max_heap_table_size     = 64M
myisam_sort_buffer_size = 64M
join_buffer_size        = 8M
read_buffer_size        = 2M
read_rnd_buffer_size    = 8M
sort_buffer_size        = 3M
tmp_table_size          = 64M
# Innodb changes
innodb_additional_mem_pool_size = 16M
innodb_autoextend_increment     = 2000
innodb_buffer_pool_size         = 3000M #As current Db is around 1.2G.
innodb_file_per_table
innodb_data_file_path           = ibdata1:512M;ibdata2:512M:autoextend
innodb_flush_log_at_trx_commit  = 2 #For more reliablity use 1
innodb_flush_method             = O_DIRECT
innodb_log_buffer_size          = 8M
innodb_log_file_size            = 128M #Transaction Log up to 1/4 Buffer Pool
innodb_thread_concurrency       = 16
#innodb_force_recovery          = 2
#innodb_read_io_threads         = 8
#innodb_write_io_threads                = 8
innodb_lock_wait_timeout        = 50
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover         = BACKUP
max_connections        = 400
table_cache            = 1024M
thread_concurrency     = 16

내가 바꿀 수있는 제안.


죄송합니다 ... 처음 몇 줄이 지워졌습니다.
TheVyom

가능하다면 자신에게 유리한 태도를 취하고 최신 버전의 MySQL을 사용하십시오. 5.1.38은 고대입니다. 5.5가 아닌 경우 최신 5.1 릴리스로 업그레이드하십시오.
Aaron Brown

답변:


26

언뜻보기에 innodb_log_file_size가 너무 작습니다. 두 가지 작업을 수행하는 것이 더 커야합니다.

  • 큰 BLOB 또는 TEXT 필드 수용
  • 더 큰 거래 개최

도움이되는지 확인하기 위해 지금해야 할 일은 다음과 같습니다.

1 단계) /etc/my.cnf에서 다음을 변경하십시오.

[mysqld]
innodb_log_buffer_size          = 32M
innodb_buffer_pool_size         = 3G
innodb_log_file_size            = 768M

2 단계) service mysql stop

단계 03) rm -f /var/lib/mysql/ib_logfile*

단계 04) service mysql start

다음 파일을 다시 작성합니다.

  • / var / lib / mysql / ib_logfile0
  • / var / lib / mysql / ib_logfile1

시도 해봐 !!!

업데이트 2013-07-03 12:37 EDT

나는 이것에 대한 다른 게시물을 업데이트하고 이것을 놓쳤다.

ButtleButkus가 방금 언급 한2013-07-03 07:18:56 EDT

ib_logfile *을 삭제하기 전에 백업을 위해 다른 위치로 복사하는 것이 좋지 않습니까?

내부에 완료되지 않은 트랜잭션 데이터가있을 수 있으므로 다음은 수행해야 할 작업입니다.

1 단계) /etc/my.cnf에서 다음을 변경하십시오.

[mysqld]
innodb_log_buffer_size          = 32M
innodb_buffer_pool_size         = 3G
innodb_log_file_size            = 768M

2 단계) mysql -uroot -p -e "SET GLOBAL innodb_fast_shutdown = 0;"

단계 03) service mysql stop

단계 04) rm -f /var/lib/mysql/ib_logfile*

단계 05) service mysql start

추가했습니다 SET GLOBAL innodb_fast_shutdown = 0;. 그게 뭐에요? InnoDB는 트랜잭션 로그 (ib_logfile0, ib_logfile1)를 포함하여 모든 InnoDB 이동 부분에서 트랜잭션 변경 사항을 완전히 제거합니다. 따라서 이전 ib_logfile0, ib_logfile1을 백업 할 필요가 없습니다. 삭제하면 긴장이되며 04 단계

mv /var/lib/mysql/ib_logfile* ..

오래된 통나무를 넣어 /var/lib . 로그 재생이 성공하고 mysqld가 시작되면 이전 로그를 삭제할 수 있습니다.

이 기능을 1 년 동안 사용해 왔습니다. 이것을 반영하기 위해 다른 게시물을 업데이트했습니다 ...

innodb_fast_shutdown을 언급하지 않은 다른 이전 게시물이 있으면 알려 주시면 업데이트 할 수 있습니다. 다시 한 번 감사드립니다, ButtleButkus .


로그 파일을 256M으로 늘리고 buffer_pool_size를 2G로 줄이면 트릭을 수행하는 것처럼 보입니다.
TheVyom

내 대답이 도움이 되었습니까 ???
RolandoMySQLDBA

이 업데이트를 잊어 버렸습니다. 이는 많은 도움이되었으며 지난 1 개월 이후 서버에 아무런 문제가 없었습니다.
TheVyom

삭제하기 전에 ib_logfile *을 백업을 위해 다른 위치에 복사하는 것이 좋지 않습니까?
Buttle Butkus

1
768MB는 상당히 크다 Percona Baron Schwartz percona.com/blog/2008/11/21/…
greenlitmysql
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.