Mysql Innodb: InnoDB: ข้อผิดพลาด: อายุของด่านสุดท้ายคือ InnoDB: ซึ่งเกินความจุของกลุ่มบันทึก


25

ฉันต้องการ mysql ที่เชี่ยวชาญจริงๆ ฉันเป็นคนใหม่ให้กับ mysql และฉันเห็นเซิร์ฟเวอร์ขัดข้องบางส่วนของฐานข้อมูลของฉันในช่วง 1 สัปดาห์ที่ผ่านมา

ฉันใช้ mysql 5.1.36 บน Ubuntu นี่คือเซิร์ฟเวอร์ mysql โดยเฉพาะพร้อมหน่วยความจำ Dual core และ 4GB และ 40GB SSD

ข้อผิดพลาดบันทึกคือ:

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.1 ที่ใหม่กว่าหากไม่ใช่ 5.5 หากทำได้
แอรอนบราวน์

คำตอบ:


26

ฉันจะบอกว่า innodb_log_file_size ของคุณเล็กเกินไป มันควรใหญ่กว่าที่จะทำสองสิ่ง:

  • รองรับฟิลด์ 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 -root -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 กำจัดการเปลี่ยนแปลงธุรกรรมทั้งหมดจากชิ้นส่วนที่เคลื่อนไหว InnoDB ทั้งหมดรวมถึงบันทึกธุรกรรม (ib_logfile0, ib_logfile1) ดังนั้นไม่จำเป็นต้องสำรองข้อมูล ib_logfile0 เก่า, ib_logfile1 เก่า หากการลบมันทำให้คุณกังวลแล้วให้ทำตามขั้นตอนที่ 04

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

เพื่อใส่บันทึกเก่า/var/libๆ หากการพักผ่อนหย่อนใจของบันทึกประสบความสำเร็จและเริ่มต้น mysqld คุณสามารถลบบันทึกเก่าได้

ฉันใช้คุณสมบัตินี้มานานหนึ่งปีแล้ว ฉันได้อัปเดตโพสต์อื่นของฉันเพื่อสะท้อนถึงสิ่งนี้ ...

หากมีโพสต์เก่าอื่น ๆ ของฉันที่ฉันไม่ได้พูดถึง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.