Mysql Innodb: InnoDB: ERROR: usia pos pemeriksaan terakhir adalah InnoDB: yang melebihi kapasitas grup log

25

Saya benar-benar membutuhkan beberapa keahlian mysql. Saya seorang pemula untuk mysql dan saya melihat beberapa server crash db saya dalam 1 minggu terakhir.

Saya menggunakan mysql 5.1.36 di Ubuntu. Ini adalah server mysql khusus dengan Dual core dan memori 4GB dan 40GB SSD.

Kesalahan log adalah:

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 adalah seperti di bawah ini.

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

Ada saran apa yang bisa saya ubah.

TheVyom
sumber
Maaf ... beberapa baris pertama terhapus.
TheVyom
Bantulah diri Anda sendiri dan gunakan versi MySQL yang lebih baru, jika Anda bisa. 5.1.38 adalah kuno. Setidaknya tingkatkan ke rilis 5.1 yang lebih baru, jika tidak 5.5 jika Anda bisa.
Aaron Brown

Jawaban:

26

Pada pandangan pertama, saya akan mengatakan bahwa innodb_log_file_size Anda terlalu kecil. Seharusnya lebih besar untuk melakukan dua hal:

  • Mengakomodasi semua bidang Gumpalan atau TEKS besar
  • Memegang transaksi yang lebih besar

Inilah yang harus Anda lakukan untuk saat ini untuk melihat apakah itu membantu:

LANGKAH 01) Ubah yang berikut ini di /etc/my.cnf

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

LANGKAH 02) service mysql stop

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

LANGKAH 04) service mysql start

Ini akan membangun kembali file-file berikut

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

Cobalah !!!

UPDATE 2013-07-03 12:37 EDT

Saya telah memperbarui posting saya yang lain tentang ini dan melewatkan yang ini

ButtleButkus baru saja berkomentar di2013-07-03 07:18:56 EDT

Tidakkah disarankan untuk menyalin ib_logfile * ke lokasi lain untuk cadangan sebelum menghapusnya?

Karena mungkin ada data transaksional yang belum selesai di dalam, inilah yang harus dilakukan

LANGKAH 01) Ubah yang berikut ini di /etc/my.cnf

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

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

LANGKAH 03) service mysql stop

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

LANGKAH 05) service mysql start

Saya menambahkan SET GLOBAL innodb_fast_shutdown = 0;. Apa fungsinya? Ini memaksa InnoDB untuk sepenuhnya membersihkan perubahan transaksional dari semua bagian bergerak InnoDB, termasuk log transaksional (ib_logfile0, ib_logfile1). Jadi, tidak perlu membackup ib_logfile0 lama, ib_logfile1. Jika menghapusnya membuat Anda gugup, maka buat Langkah 04

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

untuk memasukkan log lama /var/lib. Jika rekreasi log berhasil dan mysqld mulai, maka Anda dapat menghapus log lama.

Saya telah menggunakan fitur ini selama satu tahun sekarang. Saya telah memperbarui posting saya yang lain untuk mencerminkan ...

Jika ada posting lama saya yang lain di mana saya tidak menyebutkan innodb_fast_shutdown , beri tahu saya agar saya dapat memperbaruinya. Terima kasih lagi, ButtleButkus .

RolandoMySQLDBA
sumber
Menambah file log ke 256M dan mengurangi buffer_pool_size ke 2G tampaknya melakukan trik.
TheVyom
Apakah jawaban saya membantu ???
RolandoMySQLDBA
Maaf lupa memperbarui ini. Ini sangat membantu dan server kami telah aktif tanpa masalah sejak 1 bulan terakhir.
TheVyom
Tidakkah sebaiknya menyalin ib_logfile * ke lokasi lain untuk cadangan sebelum menghapusnya?
Buttle Butkus
1
768MB cukup besar Per Percona Baron Schwartz percona.com/blog/2008/11/21/…
greenlitmysql