ฉันจะบังคับให้ตาราง MySQL เสียหายได้อย่างไร


17

ฉันได้เขียนปลั๊กอินNagiosง่ายๆที่เรียกใช้mysqlcheck (ซึ่งตรวจสอบตารางที่เสียหาย) และจะแจ้งเตือนหากมีสิ่งใดเสียหาย

อย่างไรก็ตามตอนนี้ตารางของฉันไม่เสียหายเลย ดังนั้นฉันไม่แน่ใจ 100% ว่าปลั๊กอินของฉันทำงานได้ดี ฉันมีเซิร์ฟเวอร์ dev ที่ไม่สำคัญอย่างยิ่ง ฉันจะบังคับหนึ่ง (หรือใด ๆ ) ของตารางที่มีให้เสียหายเพื่อให้ฉันสามารถทดสอบการแจ้งเตือนของ nagios ได้อย่างไร

สำหรับการบันทึกเซิร์ฟเวอร์นั้นคือ Ubuntu Dapper และ mysql เป็นเวอร์ชั่น 5.0


ที่น่าสนใจ .......
Sander Versluys

3
สมมติว่าเป็นตาราง MyISAM ฉันคิดว่าคุณสามารถเปิดหน้าต่างได้ breaze เล็กน้อยควรจะเพียงพอที่จะทำให้เกิดกรดเหล่านั้นตารางอิสระที่จะผิดพลาดหงายท้องและไฟไหม้;)
เดวิด

คำตอบ:


1

โดยทั่วไปคุณไม่สามารถสำรองฐานข้อมูลโดยการคัดลอกจาก / var / lib / mysql แล้วคัดลอกกลับเพราะพวกเขาเสียหายคุณต้องใช้ mysqldump แทน

ดังนั้นหากคุณเข้าไปในหนึ่งในโฟลเดอร์สำหรับฐานข้อมูลใน / var / lib / mysql เช่น / var / lib / mysql / myDB / และยุ่งกับไฟล์ที่ควรทำ :-)

ดังนั้นฉันขอแนะนำให้คัดลอกไฟล์หนึ่งไฟล์แก้ไขเล็กน้อยด้วยโปรแกรมแก้ไข hex และคัดลอกกลับ


8
cat DB1.myd /dev/random > DB2.myd

ฉันชอบอันนี้!
Kyle Brandt

1
จะไม่ดึงข้อมูลจาก / dev / สุ่มจนกว่าฮาร์ดดิสก์ของฉันจะเต็มหรือไม่ : P
Rory

2
เฮ้คุณพูดผิดใช่มั้ย ;-)
แมตต์ซิมมอนส์

Rory, Ya แต่เพิ่งกด Ctrl-C ในบางช่วงเวลา
Kyle Brandt

Rory หรือใช้ head / dev / urandom เพื่อจัดทำไฟล์จากนั้นให้แมวเหล่านั้นลงไป
Kyle Brandt


3

สิ่งนี้ควรทำ:

cat /dev/urandom > yourdb.myd

สิ่งนั้นจะดำเนินต่อไปจนกว่าฮาร์ดดิสก์ของฉันจะเต็ม
Rory

2

ฉันขอแนะนำว่าวิธีที่สมจริงมากขึ้นในการจำลองข้อผิดพลาดคือการดึงพรมออกมาจากใต้ฐานของ MySQL ในขณะที่กำลังทำการอัพเดทอย่างเข้มข้น การออก SIGKILL ให้กับmysqldกระบวนการควรเพียงพอ มีโอกาสที่เมื่อคุณรีสตาร์ท MySQL ตารางที่เป็นปัญหาจะถูกทำเครื่องหมายว่าล้มเหลว

อีกทางหนึ่งฉันขอแนะนำให้ใช้คำแนะนำของคนอื่น แต่ไปที่.MYIไฟล์ indec แทนที่จะเป็นไฟล์ข้อมูล


2

ตัวอย่าง:

mysql> repair table Transactions;
^CQuery aborted by Ctrl+C
+-----------------------------------+--------+----------+-----------------------+
| Table                             | Op     | Msg_type | Msg_text              |
+-----------------------------------+--------+----------+-----------------------+
| test.Transactions | repair | error    | 137 when fixing table |
| test.Transactions | repair | status   | Operation failed      |
+-----------------------------------+--------+----------+-----------------------+
2 rows in set (17.84 sec)

mysql> select * from Transactions limit 1;
ERROR 144 (HY000): Table './test/Transactions' is marked as crashed and last (automatic?) repair failed

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