Làm thế nào tôi có thể buộc một bảng MySQL bị hỏng?


17

Tôi đã viết một plugin Nagios đơn giản gọi mysqlcheck (kiểm tra các bảng bị hỏng) và sẽ đưa ra cảnh báo nếu có lỗi.

Tuy nhiên không có bảng nào của tôi bị hỏng cả. Vì vậy, tôi không chắc chắn 100% rằng plugin của tôi đang hoạt động tốt. Tôi có một máy chủ dev không phải là lỗi nghiêm trọng. Làm cách nào tôi có thể buộc một (hoặc bất kỳ) bảng nào ở đó bị hỏng để tôi có thể kiểm tra cảnh báo nagios của mình?

Đối với bản ghi, máy chủ là Ubuntu Dapper và mysql là phiên bản 5.0


thú vị .......
Sander Versluys

3
Giả sử chúng là bảng MyISAM Tôi tưởng tượng bạn có thể mở một cửa sổ. Một vi phạm nhẹ là đủ để khiến các bảng miễn phí ACID đó bị sập, lật đổ và bắt lửa;)
David

Câu trả lời:


1

Nói chung, bạn không thể sao lưu cơ sở dữ liệu bằng cách sao chép chúng từ / var / lib / mysql và sau đó sao chép lại vì chúng bị hỏng, thay vào đó bạn phải sử dụng mysqldump.

Vì vậy, nếu bạn đi vào một trong các thư mục cho cơ sở dữ liệu trong / var / lib / mysql, tức là / var / lib / mysql / myDB / và gây rối với một số tệp nên thực hiện :-)

Vì vậy, tôi khuyên bạn nên sao chép một trong các tệp, chỉnh sửa một chút bằng trình chỉnh sửa hex và sao chép lại.


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

Tôi thích cái này!
Kyle Brandt

1
Không tiếp tục kéo dữ liệu từ / dev / ngẫu nhiên cho đến khi ổ cứng của tôi đầy? : P
Rory

2
Này, bạn nói tham nhũng, phải không? ;-)
Matt Simmons

Rory, Ya, nhưng chỉ cần nhấn Ctrl-C tại một số điểm
Kyle Brandt

Rory, Hoặc sử dụng head / dev / urandom, vào một tệp và sau đó gửi mèo
Kyle Brandt

3

Bạn có thể sử dụng một công cụ làm mờ như zzuf để làm mờ tệp cơ sở dữ liệu có sẵn, ví dụ:

zzuf < good.myd > fuzzed.myd

3

Điều này nên làm điều đó:

cat /dev/urandom > yourdb.myd

Điều đó sẽ tiếp tục cho đến khi ổ cứng của tôi lấp đầy.
Rory

2

Tôi đề nghị rằng một cách thực tế hơn để mô phỏng lỗi sẽ là kéo tấm thảm ra khỏi chân của MySQL trong khi nó đang thực hiện một bản cập nhật chuyên sâu. Phát hành SIGKILL cho mysqldquá trình nên là đủ. Rất có thể là khi bạn khởi động lại MySQL, (các) bảng trong câu hỏi sẽ được đánh dấu là bị lỗi.

Ngoài ra, tôi khuyên bạn nên áp dụng đề xuất của người khác nhưng cho .MYItệp indec chứ không phải tệp dữ liệu.


2

thí dụ:

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

1

có lẽ một lệnh thực thi thực hiện một số thứ như sau:

echo "aaa" > file.myd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.