Mysql Innodb: InnoDB: ERROR: Das Alter des letzten Checkpoints ist InnoDB: Übersteigt die Kapazität der Protokollgruppe

25

Ich brauche wirklich einige MySQL-Expertise. Ich bin ein Neuling in MySQL und sehe einen Serverabsturz meiner Datenbank in den letzten 1 Woche.

Ich benutze MySQL 5.1.36 auf Ubuntu. Dies ist ein dedizierter MySQL-Server mit Dual Core und 4 GB Speicher und 40 GB SSD.

Die Protokollfehler sind:

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 ist wie folgt.

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

Irgendwelche Vorschläge was ich ändern kann.

TheVyom
quelle
Entschuldigung ... die ersten paar Zeilen wurden gelöscht.
TheVyom
Tun Sie sich selbst einen Gefallen und verwenden Sie eine neuere Version von MySQL, wenn Sie können. 5.1.38 ist uralt. Führen Sie zumindest ein Upgrade auf ein neueres 5.1-Release durch, wenn nicht 5.5, wenn Sie können.
Aaron Brown

Antworten:

26

Auf den ersten Blick würde ich sagen, dass Ihre innodb_log_file_size viel zu klein ist. Es sollte größer sein, zwei Dinge zu tun:

  • Platzieren Sie alle großen BLOB- oder TEXT-Felder
  • Halten Sie größere Transaktionen

Hier ist, was Sie jetzt tun sollten, um zu sehen, ob es hilft:

SCHRITT 01) Ändern Sie Folgendes in /etc/my.cnf

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

SCHRITT 02) service mysql stop

SCHRITT 03) rm -f /var/lib/mysql/ib_logfile*

SCHRITT 04) service mysql start

Dadurch werden die folgenden Dateien neu erstellt

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

Versuche es !!!

UPDATE 2013-07-03 12:37 EDT

Ich habe meine anderen Beiträge dazu aktualisiert und diesen verpasst

ButtleButkus hat dies nur kommentiert2013-07-03 07:18:56 EDT

Wäre es nicht ratsam, die ib_log-Datei * zum Sichern vor dem Löschen an einen anderen Speicherort zu kopieren?

Da sich im Inneren möglicherweise unvollendete Transaktionsdaten befinden, sollten Sie Folgendes tun

SCHRITT 01) Ändern Sie Folgendes in /etc/my.cnf

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

SCHRITT 02) mysql -uroot -p -e "SET GLOBAL innodb_fast_shutdown = 0;"

SCHRITT 03) service mysql stop

SCHRITT 04) rm -f /var/lib/mysql/ib_logfile*

SCHRITT 05) service mysql start

Fügte ich hinzu SET GLOBAL innodb_fast_shutdown = 0;. Was macht das InnoDB wird gezwungen, Transaktionsänderungen von allen beweglichen Teilen von InnoDB, einschließlich der Transaktionsprotokolle (ib_logfile0, ib_logfile1), vollständig zu entfernen. Daher muss die alte Datei ib_logfile0, ib_logfile1 nicht gesichert werden. Wenn Sie nervös werden, wenn Sie sie löschen, führen Sie Schritt 04 aus

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

um die alten logs einzulegen /var/lib. Wenn die Neuerstellung der Protokolle erfolgreich ist und mysqld startet, können Sie die alten Protokolle löschen.

Ich benutze diese Funktion jetzt seit einem Jahr. Ich habe meine anderen Beiträge aktualisiert, um dies widerzuspiegeln ...

Wenn es andere ältere Posts von mir gibt, in denen ich innodb_fast_shutdown nicht erwähne , lass es mich wissen, damit ich es aktualisieren kann. Nochmals vielen Dank, ButtleButkus .

RolandoMySQLDBA
quelle
Erhöht die Protokolldatei auf 256 MB und reduziert die Größe von buffer_pool_size auf 2 GB.
TheVyom
Hat meine Antwort geholfen ???
RolandoMySQLDBA
Sorry, habe vergessen, dies zu aktualisieren. Dies hat sehr geholfen und unser Server war seit 1 Monat ohne Probleme in Betrieb.
TheVyom
Wäre es nicht ratsam, die ib_log-Datei * zum Sichern vor dem Löschen an einen anderen Speicherort zu kopieren?
Buttle Butkus
1
768MB ist recht groß Per Percona Baron Schwartz percona.com/blog/2008/11/21/...
greenlitmysql