mysql จะไม่เริ่มต้นหลังจากเพิ่ม innodb_buffer_pool_size และ innodb_log_file_size


18

ฉันกำลังติดตามโซลูชันนี้ที่นี่/programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 ในinnodb_buffer_pool_sizeภายหลังและพยายามเพิ่มเป็น 4G และ 1G ในภายหลัง (เช่น 1024M) นอกจากขนาดไฟล์บันทึกแล้ว แต่ mysql จะไม่ขึ้นต้นด้วยค่าเหล่านั้น ถ้าฉันใส่กลับไปที่ 512M mysql เริ่มต้นได้ดี

ฉันจะแก้ปัญหานี้ได้อย่างไร เซิร์ฟเวอร์ของฉันเป็นรุ่น 16GB และเป็นไปตาม Webmin sysinfo:

Real memory 15.62 GB total, 3.13 GB used

ในขณะเดียวกันฉันก็พบบันทึกข้อผิดพลาดเช่นกัน:

120529 10:29:32 mysqld_safe mysqld จากไฟล์ pid /var/run/mysqld/mysqld.pid สิ้นสุดวันที่

120529 10:29:33 mysqld_safe การเริ่มต้น mysqld daemon ด้วยฐานข้อมูลจาก / var / lib / mysql

120529 10:29:33 [หมายเหตุ] ปลั๊กอิน 'FEDERATED' ถูกปิดใช้งาน

120529 10:29:33 InnoDB: ฮีปหน่วยความจำ InnoDB ถูกปิดใช้งาน

120529 10:29:33 InnoDB: Mutexes และ rw_locks ใช้ GCC atomic builtins

120529 10:29:33 InnoDB: ตารางที่บีบอัดใช้ zlib 1.2.3

120529 10:29:33 InnoDB: การใช้ Linux พื้นเมือง AIO

120529 10:29:33 InnoDB: การเตรียมใช้งานบัฟเฟอร์พูลขนาด = 1.0G

120529 10:29:33 InnoDB: การเริ่มต้นของบัฟเฟอร์พูลเสร็จสมบูรณ์

InnoDB: ข้อผิดพลาด: ล็อกไฟล์. / ib_logfile0 มีขนาดแตกต่างกัน 0 134217728 ไบต์

InnoDB: มากกว่าที่ระบุในไฟล์. cnf 0 268435456 ไบต์!


คุณช่วยแบ่งปันบันทึกข้อผิดพลาดสำหรับสิ่งนั้นได้ไหม ...
อับดุลมานาฟ

ขอบคุณฉันหามันเจอแล้ว ฉันคิดว่ามันจะง่ายขึ้น ฉันควรจะเพิ่มในตอนแรกด้วยว่าฉันเพิ่มขนาดไฟล์บันทึกเช่นกันเพื่อให้ตรงกับการเพิ่มขึ้นของพูลบัฟเฟอร์ (ฉันเพิ่มข้อมูลนี้ทันที)
giorgio79

Ok @ giorgio79 ...
Abdul Manaf

ลองลบไฟล์บันทึก
dezso

คุณลบขนาดไฟล์บันทึกก่อนหรือไม่ คุณทิ้งฐานข้อมูลทั้งหมดก่อนหรือไม่ โปรดเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณทำอย่างแน่นอน?
ALH

คำตอบ:


19

คำตอบสองคำตอบที่ได้รับจาก@RickJamesและ@drogartเป็นวิธีการเยียวยา (+1 สำหรับแต่ละรายการ)

จากบันทึกข้อผิดพลาดที่คุณนำเสนอสองบรรทัดสุดท้ายพูดว่า:

InnoDB: ข้อผิดพลาด: ล็อกไฟล์. / ib_logfile0 มีขนาดแตกต่างกัน 0 134217728 ไบต์

InnoDB: มากกว่าที่ระบุในไฟล์. cnf 0 268435456 ไบต์! `

ณ จุดนั้นเห็นได้ชัดว่าคุณตั้งinnodb_log_file_sizeเป็น 256M (268435456) ในmy.cnfขณะที่บันทึกธุรกรรมของ InnoDB ( ib_logfile0, ib_logfile1) อยู่ที่ 128M (134217728) ตามลำดับ เมื่อมองกลับไปที่ลิงก์ไปยังคำตอบ StackOverflow ของฉันในคำถามของคุณคุณต้องทำสิ่งต่อไปนี้:

ขั้นตอนที่ 01) เพิ่มลงในmy.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

ขั้นตอนที่ 02) เรียกใช้คำสั่งเหล่านี้ในระบบปฏิบัติการ

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

เพื่อให้มีความมั่นใจในสิ่งที่เกิดขึ้นให้เรียกใช้tail -fกับบันทึกข้อผิดพลาด คุณจะเห็นข้อความแจ้งให้คุณทราบเมื่อมีการสร้างไฟล์บันทึกของ Innodb


ขอบคุณอ๋อฉันไม่ได้ลบออกก่อน แค่อยากเห็นว่า mysql ทำงานอย่างไร หลังจากดำเนินการขั้นตอนที่ 3 การรีสตาร์ททำงาน
giorgio79

1
ฉันคิดว่าไม่ควรลบไฟล์บันทึก แต่ควรย้ายไปไว้ที่อื่นและลบทิ้งในภายหลังเมื่อคุณเปลี่ยนขนาดไฟล์บันทึกได้สำเร็จ มิฉะนั้นคุณจะมีปัญหาถ้า MySQL service mysqld stopชนก่อนที่คุณจะวิ่ง
KajMagnus

4

จากข้อผิดพลาดในบันทึกฉันคิดว่าคุณทำสิ่งนี้:

  • ปิด mysql
  • แก้ไข my.cnf เพื่อเปลี่ยนขนาดไฟล์บันทึกของ Innodb
  • พยายามที่จะเริ่ม mysql (จากนั้นมันล้มเหลว)

หากคุณเปลี่ยนขนาดไฟล์บันทึกคุณจะต้องลบไฟล์บันทึกเก่า Innodb จะเริ่มต้นไม่สำเร็จหากไฟล์ที่มีอยู่ไม่ตรงกับขนาดที่ระบุในไฟล์ปรับแต่ง หากคุณย้ายไฟล์ไปที่อื่น innodb จะสร้างไฟล์บันทึกธุรกรรมใหม่ในขนาดที่ถูกต้องเมื่อเริ่มทำงาน

ฉันขอแนะนำให้ย้ายไฟล์เก่าไปยังไดเรกทอรีอื่นแทนที่จะลบทิ้งจนกว่าเซิร์ฟเวอร์จะเริ่มต้นและทำงานกับไฟล์บันทึกใหม่และทุกอย่างดูโอเค


3

ควรกำหนด buffer_pool เป็น 70% ของRAM ที่มีอยู่หากคุณใช้งาน InnoDB เท่านั้น

ขนาดบันทึกไม่สำคัญมาก ที่ดีที่สุดคือการตั้งค่าเพื่อให้ (uptime * innodb_log_file_size / Innodb_os_log_written) อยู่ที่ประมาณ 3600 (1 ชั่วโมง)

ในการเปลี่ยนขนาดบันทึกต้องมีหนึ่งรายการ

  1. ปิด mysqld เรียบร้อย
  2. ลบค่าใน my.cnf (my.ini)
  3. ลบไฟล์บันทึก
  4. retstart - ไฟล์บันทึกใหม่จะถูกสร้างใหม่

ขอบคุณใช่นี่เป็นคำตอบที่ถูกต้องเช่นกัน ฉันยอมรับได้เพียงอย่างเดียว +1 สิ่งนี้ด้วย
giorgio79

1

นอกจากนี้ยังสามารถจะมีปัญหาบางอย่างในค่าของคุณให้สำหรับขนาดบัฟเฟอร์ เหมือนที่มันเกิดขึ้นในกรณีของฉัน ...

เมื่อเพิ่มขึ้นหรือลดลงinnodb_buffer_pool_sizeการดำเนินการจะดำเนินการเป็นกลุ่ม ขนาดก้อนถูกกำหนดโดยinnodb_buffer_pool_chunk_sizeตัวเลือกการกำหนดค่าซึ่งมีค่าเริ่มต้นของ 128M สำหรับข้อมูลเพิ่มเติมโปรดดูที่การกำหนดค่า InnoDB บัฟเฟอร์สระว่ายน้ำขนาดก้อน

innodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesบัฟเฟอร์ขนาดสระว่ายน้ำจะต้องเท่ากับหรือหลาย หากคุณกำหนดค่าinnodb_buffer_pool_sizeเป็นค่าที่ไม่เท่ากับหรือหลายค่าinnodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesขนาดบัฟเฟอร์พูลจะถูกปรับเป็นค่าที่เท่ากับหรือหลายอย่างโดยอัตโนมัติinnodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesไม่น้อยกว่าขนาดบัฟเฟอร์พูลที่ระบุ

ในตัวอย่างinnodb_buffer_pool_sizeตั้งค่าเป็น 8G และinnodb_buffer_pool_instancesตั้งค่าเป็น 16 innodb_buffer_pool_chunk_sizeคือ 128M ซึ่งเป็นค่าเริ่มต้น

8G เป็นinnodb_buffer_pool_sizeค่าที่ถูกต้องเพราะ 8G เป็นหลายตัวinnodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128Mซึ่งก็คือ 2G

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.