Mysql Innodb:InnoDB:エラー:最後のチェックポイントの経過時間はInnoDB:ロググループの容量を超えています


25

mysqlの専門知識が本当に必要です。私はmysqlの初心者であり、過去1週間にdbのサーバークラッシュが発生しています。

Ubuntuで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リリースにアップグレードしてください。
アーロンブラウン

回答:


26

一見、innodb_log_file_sizeが小さすぎると思います。次の2つのことを行うには大きくする必要があります。

  • 大きなBLOBまたはTEXTフィールドに対応
  • より大きなトランザクションを保持する

これが役立つかどうかを確認するために、今のところすべきことは次のとおりです。

ステップ01)/etc/my.cnfで以下を変更します

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

ステップ02) 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 *を削除する前に、バックアップのために別の場所にコピーすることをお勧めしませんか?

内部に未完成のトランザクションデータが存在する可能性があるため、ここで行うべきことは

ステップ01)/etc/my.cnfで以下を変更します

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

ステップ02)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 *を削除する前に、バックアップのために別の場所にコピーすることをお勧めしませんか?
バトルブトクス

1
768メガバイトは非常に大きくパーPerconaバロン・シュワルツのある percona.com/blog/2008/11/21/...
greenlitmysql
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.