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

InnoDB: เครื่องมือจัดเก็บ ACID ที่สอดคล้องกับ MySQL

2
มี gotchas เลยด้วยการแปลงจาก MyISAM เป็น InnoDB?
ฉันพร้อมที่จะย้ายจาก MyISAM ไปยัง InnoDB แล้ว แต่ต้องการทราบว่ามีรายการสิ่งที่ต้องค้นหามากมายหรือไม่ ตัวอย่างเช่นผมไม่ได้เห็นกล่าวถึงรายการใด ๆ ที่ทำงานDISABLE KEYSบนตาราง InnoDB ALTER TABLEจะโยนเตือนยกเว้นหน้าคู่มือสำหรับ มันเป็นสิ่งที่ฉันต้องรู้ก่อนที่จะเปลี่ยนใจ ฉันคิดว่าฉันสบายดีกับคำสั่งของฉัน แต่ดูเหมือนจะไม่
11 mysql  innodb  myisam 

5
mysqldump ไม่สมบูรณ์
ฉันพยายามเรียกใช้ mysqldump เพื่อสร้างสแนปชอตของฐานข้อมูลและฉันพบว่ามันจะหยุดกลางคันแบบสุ่มโดยไม่ต้องรายงานข้อผิดพลาดใด ๆ ฐานข้อมูลของฉันมีขนาดค่อนข้างเล็ก (ประมาณ 100MB) และใช้งาน InnoDB ฉันใช้มันเหมือน: mysqldump --force --single-transaction --quick --user myuser --password=mypass -h mydatabasehost mydb > /tmp/snapshot.sql การตรวจสอบรหัสออกรายงาน 0 รุ่นของฉันคือ: mysqldump Ver 10.13 Distrib 5.1.52 สำหรับ redhat-linux-gnu (i386) ฉันเคยเห็นโพสต์ที่คล้ายกันและแม้กระทั่งรายงานข้อผิดพลาดอย่างเป็นทางการแต่ดูเหมือนว่าจะไม่มีวิธีแก้ปัญหา ฉันจะใช้ mysqldump เพื่อถ่ายภาพฐานข้อมูลที่สมบูรณ์ได้อย่างไร แก้ไข: ฐานข้อมูลของฉันอยู่ใน RDS ของ Amazon ในปัจจุบัน

2
InnoDB สร้างข้อผิดพลาดของตาราง:“ ขนาดแถวใหญ่เกินไป”
เรามีวิศวกรบางคนที่แผ่โครงสร้างฐานข้อมูลให้เป็นมาตรฐานในตารางชั่วคราวเพื่อวัตถุประสงค์ในการสร้างรายงาน คอลัมน์มีการระบุไว้เป็นTEXT NOT NULL(ฉันรู้ว่า "ทำไมพวกเขาถึงทำอย่างนั้น?" ขอแค่สมมติว่าเรากำลังพูดถึงเรื่องนี้) เราใช้ MySQL 5.1.48 Community RHEL5 กับปลั๊กอิน InnoDB 1.0.9 บน Linux เมื่อใช้ MyISAM เราไม่เคยพบข้อ จำกัด ขนาดตารางของคอลัมน์สูงสุดหรือความยาวแถวสูงสุด (ในระหว่างการตรวจสอบเราได้ จำกัด จำนวนคอลัมน์สูงสุดที่ 2598 (2599 ข้อผิดพลาดทำให้เกิดข้อผิดพลาด 1117) ด้วย InnoDB เรากำลังขีด จำกัด ขีด จำกัด เหล่านี้ ตาราง (ไม่มีการแทรกข้อมูล) เป็น: ข้อผิดพลาด 1118 (42000) ที่บรรทัด 1: ขนาดแถวใหญ่เกินไป ขนาดแถวสูงสุดสำหรับประเภทตารางที่ใช้ไม่นับ BLOB คือ 8126 คุณต้องเปลี่ยนบางคอลัมน์เป็น TEXT …
11 mysql  innodb 

3
ข้อผิดพลาด - ฟังก์ชัน 'innodb' มีอยู่แล้ว
ฉันต้องการเริ่มแปลง MyISAM บางตารางเป็น INNODB ใช้ Ubuntu 14.04 เซิร์ฟเวอร์พร้อม MySQL 5.6 (apt-get อัพเกรดจาก 5.5), 32G ram บนซีพียู 4 คอร์ / 8 เธรด เริ่มแรกมีปัญหากับ ... could not open single-table tablespace file .\mysql\innodb_index_stats.ibd after restart of MySQL และ Error: Table "mysql"."innodb_table_stats" not found. ฉันทำตามคำแนะนำที่โพสต์ของ Rolando แล้วและฐานข้อมูลไม่พังหรือสร้างข้อผิดพลาดขนาดใหญ่อีกต่อไป (ปัญหาข้างต้นหายไปเพียงอธิบายเหตุการณ์สำคัญ ๆ ) ตอนนี้ฉันกังวลเกี่ยวกับข้อผิดพลาดต่อไปนี้ก่อนที่ฉันจะแปลงอะไรเป็น INNODB สหพันธ์สามารถละเว้นจากสิ่งที่ฉันอ่านบรรทัดที่สองด้านล่าง (รวมถึงหัวข้อของโพสต์นี้) …
11 mysql  innodb 

2
ไม่สามารถวางตารางได้เนื่องจากกำลังรอการล็อกเมตาดาต้า
เราพยายามที่จะวางตารางหนึ่ง แต่มันถูกแขวนและเมื่อเราเห็นคำสั่ง 'SHOW PROCESSLIST' มันแสดงว่า 'กำลังรอเมตาดาต้าล็อคข้อมูล' แม้ว่าเราจะไม่สามารถทำการดำเนินการใด ๆ ในตารางนั้น ไม่มีใครรู้วิธีการแก้ไขหรือไม่

2
จะใช้ RESTRICT สำหรับ Foreign Key ใน mysql ได้อย่างไร
ในโครงสร้างฐานข้อมูลของ CREATE TABLE Country ( name varchar(40) NOT NULL, PRIMARY KEY (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE City ( name varchar(40) NOT NULL, PRIMARY KEY (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE Map ( country varchar(40) NOT NULL, city varchar(100) NOT NULL, PRIMARY KEY (country,city), FOREIGN KEY (country) REFERENCES …

1
ข้อผิดพลาดขนาดแถวกับ MySQL
ฉันใช้เซิร์ฟเวอร์ MySQL บน Macbook (สำหรับการทดสอบ) รุ่นคือ 5.6.20 จาก Homebrew ฉันเริ่มพบข้อผิดพลาด "ขนาดแถวใหญ่เกินไป" และฉันสามารถลดขนาดลงได้ในกรณีทดสอบนี้ โต๊ะ: mysql> describe test; +-------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | stuff | longtext | YES …
11 mysql  innodb 

5
ไม่สามารถสร้างตาราง แต่ไม่มีตาราง
ฉันใช้ขั้นตอนเหล่านี้เพื่อสร้างตารางmy_userที่มีอยู่แล้ว แต่หายไปจากฐานข้อมูลของฉันmy_db: mysql> USE my_db; mysql> DROP TABLE my_user; mysql> ERROR 1051 (42S02): Unknown table 'my_user' mysql> CREATE TABLE my_user (id INT AUTO_INCREMENT NOT NULL, username VARCHAR(255), group_id VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB; mysql> ERROR 1005 (HY000): Can't create table 'my_db.my_user' …
11 mysql  innodb 

5
คำนวณขนาดแถวและขนาดแถวสูงสุดสำหรับตาราง
ปัญหา: มีวิธีคำนวณจำนวนไบต์ที่ใช้โดยการสร้างตารางหรือไม่ฉันรู้ว่าคุณสามารถรับข้อมูลบางอย่างจาก data_schema.tables แต่ข้อมูลนั้นไม่ถูกต้องเพียงพอ สิ่งที่จำเป็นจริง ๆ คือจำนวนไบต์ตามคำจำกัดความของตารางสำหรับinnodb เท่านั้นและการเปรียบเทียบอาจพิจารณาเป็นutf-8-general-ci ตัวอย่างเช่นการทดสอบตารางมีดังนี้ สร้างการทดสอบตาราง ( col1 varchar (25), col2 int, col3 varchar (3), col4 ถ่าน (15), col5 datetime ); ตอนนี้จะต้องทราบขนาดแถวทั้งหมดที่สามารถสะสมในหนึ่งแถวตามประเภทของคอลัมน์ในตาราง พบวิธีการแก้ปัญหาที่คล้ายกันใน MSSQL แต่ต้องการรุ่น MySQL ของมัน สคริปต์เพื่อประมาณขนาดแถวสำหรับตารางใด ๆ ความช่วยเหลือใด ๆ ที่ชื่นชมมาก

1
คีย์ DISABLE ของ MySqlDump ไม่มีผลต่อการนำเข้า
ฉันได้ติดตามคำถามก่อนหน้านี้ของฉันเกี่ยวกับความเร็วการนำเข้าด้วย Inno-Tables (ประหลาดใจ!) สถานการณ์สมมติ ฉันพยายามนำเข้าฐานข้อมูลขนาดใหญ่ * การถ่ายโอนข้อมูลในเครื่อง dev ท้องถิ่นของฉันในเวลาที่เหมาะสม เรามีจำนวนมากKEYที่แนบมากับตารางซึ่งกลายเป็นคอขวด แต่ยังคงมีความสำคัญสำหรับระบบสดของเรา แนวทางของฉันหลังจากถามคำถามข้างต้นคือการลบKEY ...คำสั่งจากการถ่ายโอนข้อมูลนำเข้าและเพิ่มคีย์อีกครั้ง อย่างไรก็ตามฉันมักจะพบว่าตัวเองกำลังแก้ไขการถ่ายโอนข้อมูลปัจจุบันเพื่อนำเข้าภายในเครื่องและฉันเจอ "ความคิดเห็น" ตลกเหล่านี้ (The disable/enable keys-lines) -- -- Dumping data for table `monster` -- LOCK TABLES `monster` WRITE; /*!40000 ALTER TABLE `monster` DISABLE KEYS */; INSERT … INSERT … INSERT /*!40000 ALTER TABLE `monster` ENABLE KEYS */; …

3
ประสิทธิภาพการนำเข้า InnoDB
ฉันกำลังดิ้นรนกับการนำเข้าจำนวนมาก InnoDB- ตารางที่มีขนาดประมาณ 10 ล้านแถว (หรือ 7GB) (ซึ่งสำหรับฉันเป็นตารางที่ใหญ่ที่สุดที่ฉันเคยทำงานด้วย) ฉันค้นคว้าวิธีปรับปรุงความเร็วการนำเข้าของ Inno และในขณะที่การติดตั้งของฉันมีลักษณะดังนี้: /etc/mysql/my.cnf/ [...] innodb_buffer_pool_size = 7446915072 # ~90% of memory innodb_read_io_threads = 64 innodb_write_io_threads = 64 innodb_io_capacity = 5000 innodb_thread_concurrency=0 innodb_doublewrite = 0 innodb_log_file_size = 1G log-bin = "" innodb_autoinc_lock_mode = 2 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit=2 innodb_buffer_pool_instances=8 import is done …

1
การสร้างดัชนี MySQL ล้มเหลวในตารางเต็ม
UPDATE: tl; dr: ปัญหาคือ MySQL ใช้TMPDIRเมื่อสร้างดัชนี และฉันTMPDIRก็เป็นหนึ่งในพื้นที่ดิสก์หมด ต้นฉบับ Q: ฉันพยายามที่จะเพิ่มดัชนีเพื่อตาราง InnoDB, table is full errorและได้รับการ ฉันมีพื้นที่ดิสก์เพียงพอและการตั้งค่า MySQL มีไฟล์ต่อตาราง = 1 ข้อมูลตารางคือ 85GB และฉันคิดว่าดัชนีจะอยู่ที่ประมาณ 20GB - 30GB และฉันมีพื้นที่ดิสก์มากกว่านั้น ฉันใช้ ext3 ด้วยดังนั้นฉันไม่รู้สึกว่ามีปัญหากับการ จำกัด ขนาดไฟล์จากมุมมองของระบบปฏิบัติการ ข้อผิดพลาดที่บันทึกไว้มีลักษณะดังนี้: 140616 13:04:33 InnoDB: Error: Write to file (merge) failed at offset 3 1940914176. InnoDB: 1048576 bytes should …
10 mysql  innodb  index 

1
การวางคำสั่ง Select ในธุรกรรม
ข้อแตกต่างระหว่าง 2 ข้อความค้นหาเหล่านี้คืออะไร: START TRANSACTION; SELECT * FROM orders WHERE id=1; UPDATE orders SET username='John' WHERE id=1; COMMIT; และไม่มีการทำธุรกรรม: SELECT * FROM orders WHERE id=1; UPDATE orders SET username='John' WHERE id=1; ผลของการมีSELECTการทำธุรกรรมภายในคืออะไร? หากDELETE FROM orders WHERE id=1ถูกเรียกจากเซสชันอื่นหลังจากSELECTทั้งสองกรณีจะถูกประมวลผลเมื่อใด

4
วิธีเพิ่มการสำรองข้อมูลที่รวดเร็วและกู้คืนฐานข้อมูล 500GB โดยใช้ mysqldump
มีฐานข้อมูลขนาด 500GB ตารางในฐานข้อมูล A มีทั้งตาราง MyISAM และ INNODB ตาราง MyISAM เป็นตารางต้นแบบและตาราง Innodb เป็นตารางธุรกรรมหลัก สำรองและคืนค่าโดยใช้การถ่ายโอนข้อมูล mysql ออกจากเวลานานหรือวัน max_allowed_packet = 1G foreign_key_checks = 0 auto_commit = ปิด

2
การลบตาราง MySQL ด้วยธุรกรรมที่ค้างอยู่
มีวิธีการลบตาราง InnoDB หรือฐานข้อมูลที่มีธุรกรรมที่ค้างอยู่ใน MySQL (ควรอยู่ในระดับระบบไฟล์) หรือไม่? เกิดอะไรขึ้น: ฉันใช้ MySQL 5.5.28 และวิ่งLOAD DATA INFILE…เพื่อนำเข้าชุดข้อมูลขนาดใหญ่ (300M แถว) ลงในตาราง InnoDB ฉันไม่ได้ใช้set autocommit = 0;มาก่อน น่าเสียดายที่mysqldมีการหยุดกลางการนำเข้า เมื่อฉันรีสตาร์ทmysqlจะพยายามย้อนกลับธุรกรรมที่กรอกบันทึกของระบบด้วยข้อความเช่นนี้: mysqld_safe [4433]: 121212 16:58:52 InnoDB: กำลังรอ 1 ธุรกรรมที่กำลังจะเสร็จสิ้น ปัญหาคือการย้อนกลับทำงานมากกว่า 25 ชั่วโมงในขณะนี้ซึ่ง mysqldไม่ยอมรับการเชื่อมต่อซ็อกเก็ตใด ๆ ฉันไม่สามารถลบ/var/lib/mysql/*และเริ่มจากศูนย์ได้เนื่องจากมีบางฐานข้อมูล InnoDB / ตารางอื่น ๆ ในเครื่องนี้เช่นกัน อย่างไรก็ตามตารางที่มีปัญหานั้นเป็นตารางเดียวในฐานข้อมูลแยกต่างหาก การลบทั้งตารางหรือฐานข้อมูลทั้งหมดไม่ใช่ปัญหาเนื่องจากฉันสามารถนำเข้าข้อมูลทั้งหมดอีกครั้งในภายหลัง

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