คำถามติดแท็ก innodb

InnoDB เป็น Storage Engine หลักที่สอดคล้องกับ ACID ที่ใช้ใน MySQL

1
InnoDB: ข้อผิดพลาด: ไฟล์บันทึก. / ib_logfile0 มีขนาดต่างกัน
ฉันเพิ่งเพิ่มบรรทัดต่อไปนี้ใน /etc/mysql/my.cnf หลังจากฉันแปลงหนึ่งฐานข้อมูลเพื่อใช้เครื่องมือ InnoDB innodb_buffer_pool_size = 2560M innodb_log_file_size = 256M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 2 innodb_thread_concurrency = 16 innodb_flush_method = O_DIRECT แต่มันยก "ข้อผิดพลาด 2013 (HY000) ที่บรรทัดที่ 2: การเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ในระหว่างการค้นหาหายไป" ข้อผิดพลาดในการรีสตาร์ท mysqld และบันทึกข้อผิดพลาด mysql แสดงดังต่อไปนี้ InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes InnoDB: than …
106 mysql  log-files  innodb 

6
เอ็นจินหน่วยเก็บข้อมูลที่ไม่รู้จัก / ไม่รองรับ: InnoDB | MySQL อูบุนตู
ฉันเพิ่งอัพเกรดจาก LTS Ubuntu ไปเป็น Precise และตอนนี้ mysql ปฏิเสธที่จะเริ่ม มันบ่นของต่อไปนี้เมื่อฉันพยายามที่จะเริ่มต้น: ╰$ sudo service mysql restart stop: Unknown instance: start: Job failed to start และสิ่งนี้แสดงใน "/var/log/mysql/error.log": 120415 23:01:09 [Note] Plugin 'InnoDB' is disabled. 120415 23:01:09 [Note] Plugin 'FEDERATED' is disabled. 120415 23:01:09 [ERROR] Unknown/unsupported storage engine: InnoDB 120415 23:01:09 [ERROR] Aborting 120415 …
45 ubuntu  mysql  innodb 

6
MySQL InnoDB - innodb_file_per_table ข้อเสีย?
โดยค่าเริ่มต้น MySQL InnoDB จะจัดเก็บตารางของฐานข้อมูลทั้งหมดในไฟล์ส่วนกลาง คุณสามารถเปลี่ยนแปลงสิ่งนี้ได้โดยการตั้งค่า innodb_file_per_table ใน config ซึ่งจะสร้างไฟล์ข้อมูลหนึ่งไฟล์สำหรับแต่ละตาราง ฉันสงสัยว่าทำไมinnodb_file_per_tableไม่เปิดใช้งานโดยค่าเริ่มต้น มีข้อเสียในการใช้หรือไม่
32 mysql  innodb 

2
สุดยอดการตั้งค่าแคชของ MySQL สำหรับเซิร์ฟเวอร์ MySQL เฉพาะ 8gb RAM โดยใช้เพียง InnoDB (ฐานข้อมูล 5gb)
ฉันเป็น noob ที่ค่อนข้างใหญ่เมื่อพูดถึงการตั้งค่า MySQL เพื่อประสิทธิภาพ และจริงๆแล้วฉันไม่ได้กังวลเกี่ยวกับการปรับจูนเพื่อบีบประสิทธิภาพออกมาเล็กน้อยจาก MySQL แต่ฉันรู้ว่าสิ่งที่สำคัญที่สุดที่ต้องทำคือให้ผลลัพธ์ที่ดีที่สุดคือการตั้งค่าแคช / บัฟเฟอร์อย่างถูกต้อง ฉันพยายามทำให้สิ่งต่าง ๆ เรียบง่ายโดยใช้เพียง InnoDB เป็นเครื่องมือเก็บข้อมูล และฉันมีเซิร์ฟเวอร์เฉพาะสำหรับ MySQL มันมีแรม 8gb ฉันจะจัดสรรมันให้มีประสิทธิภาพได้อย่างไร ฉันต้องการให้พอดีกับฐานข้อมูลทั้งหมดของฉันลงในหน่วยความจำเพื่อประสิทธิภาพที่ดีที่สุด ฐานข้อมูลประมาณ 5gb เป็นไปได้ไหม ฉันควรจัดสรรหน่วยความจำให้กับคิวรีแคชเท่าใด พูลบัฟเฟอร์ InnoDB มีราคาเท่าใด ส่วนที่เหลือของคอมพิวเตอร์ (เช่นกระบวนการที่ไม่เกี่ยวข้องกับ MySQL) มีมากแค่ไหน? เป็นต้น เนื่องจากฉันไม่ได้ใช้ MyISAM ฉันไม่จำเป็นต้องใส่หน่วยความจำจำนวนมากในคีย์แคชให้ถูกต้องหรือไม่

3
Mysql ล้มเหลวและจะไม่เริ่มทำงาน
เซิร์ฟเวอร์ mysql ที่ใช้ในการผลิตของเราเพิ่งพังและจะไม่กลับมาทำงานอีก มันให้ข้อผิดพลาด segfault ฉันลองรีบูตเครื่องแล้วก็ไม่รู้ว่าจะลองอะไรอีก นี่คือ stacktrace: 140502 14:13:05 [หมายเหตุ] ปลั๊กอิน 'FEDERATED' ถูกปิดใช้งาน InnoDB: การสแกนเข้าสู่ระบบดำเนินการผ่านจุดตรวจสอบ 108 1057948207 140502 14:13:06 InnoDB: ฐานข้อมูลไม่ได้ปิดตัวลงตามปกติ! InnoDB: เริ่มการกู้คืนความผิดพลาด InnoDB: กำลังอ่านข้อมูลพื้นที่ตารางจากไฟล์. ibd ... InnoDB: การกู้คืนหน้าข้อมูลครึ่งเขียนที่เป็นไปได้จาก doublewrite InnoDB: บัฟเฟอร์ ... InnoDB: ทำการกู้คืน: สแกนเพื่อบันทึกหมายเลขลำดับ 108 1058059648 InnoDB: 1 ธุรกรรมที่ต้องย้อนกลับหรือลบล้าง InnoDB: ยกเลิกการดำเนินการทั้งหมด 15 แถว InnoDB: ตัวนับ Trx id …
19 mysql  innodb  crash 

5
การปรับเปลี่ยนคอลัมน์ของตาราง mysql ที่มีขนาดใหญ่มากซึ่งมีการหยุดทำงานเพียงเล็กน้อยหรือไม่มีเลย
ฉันจำเป็นต้องทำการเปลี่ยนแปลงตารางเป็นระยะใน mysql 5.1 ส่วนใหญ่เป็นการเพิ่มคอลัมน์ ง่ายมากด้วยคำสั่งแก้ไขตาราง แต่ตอนนี้ตารางของฉันมีมากถึง 40 ล้านแถวและพวกมันกำลังเติบโตอย่างรวดเร็ว ... ดังนั้นคำสั่งเปลี่ยนตารางเหล่านั้นใช้เวลาหลายชั่วโมง ในอีกสองสามเดือนพวกเขาจะใช้เวลาหลายวันที่ฉันคาดเดา เนื่องจากฉันใช้ amazon RDS ฉันไม่สามารถมีเซิร์ฟเวอร์ทาสให้เล่นแล้วเลื่อนระดับเป็นโทได้ ดังนั้นคำถามของฉันคือถ้ามีวิธีการทำเช่นนี้ด้วยการหยุดทำงานน้อยที่สุด? ฉันไม่รังเกียจการดำเนินการที่ใช้เวลาเป็นชั่วโมงหรือเป็นวันถ้าผู้ใช้ยังคงสามารถใช้ฐานข้อมูลได้ ... อย่างน้อยพวกเขาสามารถอ่านได้ในขณะที่กำลังเพิ่มคอลัมน์หรือไม่? จะเกิดอะไรขึ้นถ้าแอพของฉันพยายามเขียน แทรกหรืออัปเดต ถ้ามันล้มเหลวทันทีนั่นก็ไม่เลวจริง ๆ ถ้ามันแค่แฮงค์และทำให้เกิดปัญหากับเซิร์ฟเวอร์ db นั่นเป็นปัญหาใหญ่ .. นี่ต้องเป็นปัญหาเกี่ยวกับการปรับสเกลทั่วไปทุกคนต้องเพิ่มคอลัมน์ .. โดยทั่วไปแล้วฐานข้อมูลการผลิตจะทำอย่างไร Slave -> การย้ายข้อมูลหลักหรือไม่ อัปเดต - ฉันลืมที่จะพูดถึงฉันใช้เครื่องมือจัดเก็บข้อมูล Innodb

5
InnoDB และ MyISAM แตกต่างกันอย่างไร
ฉันใช้ MySQL เป็นฐานข้อมูลของฉันสำหรับโครงการเว็บปัจจุบันของฉัน ฉันใหม่กับ MySQL โปรดอธิบายความแตกต่างระหว่าง InnoDB กับ MyISAM ให้ฉันทราบ
17 mysql  innodb  myisam 

5
คุณจะเลือกเอ็นจินฐานข้อมูล MySQL ได้อย่างไร
โดยเฉพาะอย่างยิ่งคุณจะเลือกระหว่าง MyISAM และ InnoDB อย่างไรเมื่อไม่มีคุณสมบัติที่จำเป็นขาดหายไป (เช่นคุณไม่ต้องการคีย์ต่างประเทศ) มันลงมาเพื่อลองทั้งสองอย่างและวัดได้หรือไม่? หรือมีกฎง่ายๆเกี่ยวกับจำนวนและความถี่ของการอ่านเปรียบเทียบกับการเขียนและมาตรการอื่น ๆ เช่นนั้น? ขนาดของตารางมีผลกับตัวเลือกทั่วไปหรือไม่?
16 mysql  innodb  myisam 

6
จะปรับปรุง MySQL INSERT และ UPDATE ได้อย่างไร?
คำถามนี้อาจถูกถามใน StackOverflow ด้วยเช่นกัน แต่ฉันจะลองที่นี่ก่อน ... ประสิทธิภาพของคำสั่ง INSERT และ UPDATE ในฐานข้อมูลของเราดูเหมือนจะลดระดับลงและทำให้ประสิทธิภาพในการทำงานของเว็บแอพของเราต่ำลง ตารางเป็น InnoDB และแอปพลิเคชันใช้ธุรกรรม มีการปรับแต่งง่าย ๆ ที่ฉันสามารถทำให้เร่งความเร็วได้หรือไม่? ฉันคิดว่าเราอาจเห็นปัญหาการล็อคฉันจะทราบได้อย่างไร

4
วิธีที่ง่ายกว่าในการแปลงตารางทั้งหมดจาก InnoDB เป็น MyISAM
ก่อนหน้านี้ฉันใช้สิ่งนี้: USE dbname; ALTER TABLE tablename ENGINE=MYISAM; ฉันกำลังมองหาวิธีที่ง่ายกว่าในการแปลงตารางทั้งหมดในฐานข้อมูลแทนที่จะเขียนชื่อตารางทุกตัวทีละตัว
13 mysql  innodb  myisam 

4
จะรู้กลไกจัดเก็บข้อมูลที่ใช้กับฐานข้อมูลได้อย่างไร?
ก่อนหน้านี้ฉันใช้: ทุกฐานข้อมูลที่สร้าง: mysql -u root -p CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_bin; GRANT ALL ON dbname.* TO 'dbuser'@'localhost'; จากนั้นใช้ฐานข้อมูลโดยไม่คิดถึง MyISAM หรือ InnoDB จะรู้กลไกจัดเก็บข้อมูลที่ใช้กับฐานข้อมูลได้อย่างไร?

5
การสำรองฐานข้อมูล MySQL ผ่านทาง ZFS snapshot
ฉันพบเว็บไซต์จำนวนหนึ่งที่พูดถึงเรื่องนี้ แต่ฉันก็ยังขาดรายละเอียดที่สำคัญบางประการ ขั้นตอนทั่วไปคือ วิ่ง FLUSH TABLES WITH READ LOCK ใช้สแน็ปช็อต ZFS วิ่ง UNLOCK TABLES แหล่งต่าง ๆ รายงานว่า InnoDB FLUSHซึ่งผมใช้ไม่ได้จริงเกียรติ คู่มือผู้ใช้ MySQL บันทึกว่ามีFLUSH TABLES...FOR EXPORTตัวแปรสำหรับใช้กับ InnoDB แต่ต้องระบุแต่ละตารางแยกต่างหากแทนที่จะสำรองฐานข้อมูลทั้งหมด ฉันต้องการหลีกเลี่ยงการระบุแต่ละตารางเป็นรายบุคคลเนื่องจากมีโอกาสดีที่รายการของตารางจะไม่ซิงค์กับตารางที่มีอยู่จริง ปัญหาอื่น ๆ mysql -h"$HOST" -u"$USERNAME" -p"$PASSWORD" --execute="FLUSH TABLES WITH READ LOCK"ที่ผมมีคือผมวางแผนที่จะทำสิ่งที่ชอบ อย่างไรก็ตามการทำเช่นนี้จะปลดล็อกทันทีหลังจากออกจากเซสชัน มันสมเหตุสมผล แต่ก็ค่อนข้างน่ารำคาญเพราะฉันต้องกดปุ่มล็อกการอ่านเมื่อฉันถ่ายรูป แนวคิดอื่น ๆ ของฉันคือใช้แบ็คอัพที่ร้อนแรงโดยใช้เครื่องมืออย่าง Percona XtraBackup และการสแน็ปช็อตการสำรองข้อมูล แต่ฉันไม่ต้องการจ่ายค่าใช้จ่ายในการเขียนข้อมูลทั้งหมดของฉันไปยังตำแหน่งที่สองเพื่อถ่ายภาพ
12 mysql  backup  freebsd  zfs  innodb 

6
การตั้งค่าการ จำกัด เวลาสำหรับการทำธุรกรรมใน MySQL / InnoDB
ที่เกิดขึ้นจากคำถามที่เกี่ยวข้องนี้ที่ฉันต้องการทราบวิธีการบังคับให้สองธุรกรรมเกิดขึ้นตามลำดับในกรณีที่ไม่สำคัญ (ซึ่งทั้งสองทำงานในแถวเดียวเท่านั้น) ฉันได้รับคำตอบ - ใช้SELECT ... FOR UPDATEเป็นบรรทัดแรกของธุรกรรมทั้งสอง - แต่สิ่งนี้นำไปสู่ปัญหา: หากการทำธุรกรรมครั้งแรกไม่ได้กระทำหรือย้อนกลับธุรกรรมที่สองจะถูกปิดกั้นอย่างไม่มีกำหนด innodb_lock_wait_timeoutตัวแปรกำหนดจำนวนวินาทีหลังจากที่ลูกค้าพยายามที่จะทำให้การทำธุรกรรมที่สองจะได้รับการบอกว่า "ขออภัยลองอีกครั้ง" ... แต่เท่าที่ผมสามารถบอกพวกเขาต้องการจะพยายามอีกครั้งจนกว่ารีบูตเซิร์ฟเวอร์ถัดไป ดังนั้น: แน่นอนว่าจะต้องมีวิธีการบังคับROLLBACKถ้าธุรกรรมใช้เวลานาน? ฉันต้องหันไปใช้ daemon เพื่อฆ่าธุรกรรมดังกล่าวหรือไม่และถ้าใช่ daemon นั้นจะมีลักษณะอย่างไร หากการเชื่อมต่อถูกฆ่าตายโดยwait_timeoutหรือinteractive_timeoutmid-transaction ธุรกรรมจะถูกย้อนกลับหรือไม่? มีวิธีทดสอบสิ่งนี้จากคอนโซลหรือไม่? Clarification : innodb_lock_wait_timeoutตั้งค่าจำนวนวินาทีที่ธุรกรรมจะรอการปลดล็อคก่อนที่จะยอมแพ้ สิ่งที่ฉันต้องการคือวิธีการบังคับให้ล็อคเพื่อปลดล็อค อัปเดต 1 : ต่อไปนี้เป็นตัวอย่างง่ายๆที่แสดงให้เห็นว่าเหตุใดจึงinnodb_lock_wait_timeoutไม่เพียงพอเพื่อให้แน่ใจว่าการทำธุรกรรมครั้งที่สองไม่ได้ถูกบล็อกโดยรายการแรก: START TRANSACTION; SELECT SLEEP(55); COMMIT; ด้วยการตั้งค่าเริ่มต้นของinnodb_lock_wait_timeout = 50ธุรกรรมนี้เสร็จสมบูรณ์โดยไม่มีข้อผิดพลาดหลังจาก 55 วินาที และถ้าคุณเพิ่มUPDATEก่อนSLEEPบรรทัดให้เริ่มต้นธุรกรรมครั้งที่สองจากลูกค้ารายอื่นที่พยายามSELECT ... FOR UPDATEแถวเดียวกันนั่นเป็นธุรกรรมที่สองที่หมดเวลาไม่ใช่รายการที่หลับไป สิ่งที่ฉันกำลังมองหาคือวิธีที่จะยุติการนอนหลับพักผ่อนของธุรกรรมนี้ อัปเดต 2 …
11 mysql  innodb 


4
เพิ่มขนาดบัฟเฟอร์พูล InnoDB
ฉันมีปัญหาในการตั้งค่าขนาดบัฟเฟอร์พูลและขนาดไฟล์บันทึกสำหรับ MySql InnoDB ฉันอยู่ไกลจากผู้เชี่ยวชาญ MySql แต่ได้อ่านไปแล้วและดูเหมือนว่าการเปลี่ยนแปลงนี้ฉันเพิ่งเพิ่มบรรทัดเหล่านี้ไปยัง /etc/mysql/my.cnf ของฉัน # Set buffer pool size to 50-80% of your computer's memory innodb_buffer_pool_size=2048M innodb_additional_mem_pool_size=512M # # Set the log file size to about 25% of the buffer pool size innodb_log_file_size=256M innodb_log_buffer_size=128M เซิร์ฟเวอร์มีหน่วยความจำประมาณ 7GB และใช้งานเว็บเซิร์ฟเวอร์ด้วยดังนั้นฉันคิดว่าตัวเลขเหล่านี้ควรเป็นจุดเริ่มต้นที่ใช้ได้ หลังจากบันทึกและรีสตาร์ทเซิร์ฟเวอร์อย่างไรก็ตามดูเหมือนว่าการเปลี่ยนแปลงจะมีผล ฉันลองใช้ Mysqltuner ซึ่งรายงานว่าบัฟเฟอร์พูลยังคงอยู่ที่ 16.0M มีความคิดอะไรที่ฉันกำลังทำผิดหรือเปล่า? แจ้งให้เราทราบหากคุณต้องการดูไฟล์กำหนดค่าเพิ่มเติม ขอบคุณ!
11 mysql  innodb 

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