2011-11-13 33 views
5

Nó hoạt động cho đến bây giờ nhưng khi tôi khởi động lại dịch vụ, cơ sở dữ liệu bị mất giá trị tăng tự động cho bảng của tôi. Đó là chắc chắn một cái gì đó tôi làm với các truy vấn của tôi, bởi vì tôi đã không sửa đổi các bảng của tôi gần đây. Nó có thể là gì?Tăng tự động được đặt lại về 0 ở mọi dịch vụ khởi động lại

+0

nhận danh sách tất cả các thủ tục và trình kích hoạt được lưu trữ mà bạn có trên DB của mình. Kiểm tra nó cho một cái gì đó đáng ngờ. Hãy thử cài đặt lại máy chủ xem nếu điều đó giúp –

+0

không có trình kích hoạt, không có quy trình, nó chỉ xảy ra khi khởi động lại dịch vụ, nó hoạt động hoàn hảo nếu tôi cắt bảng và bắt đầu lại. – Chobeat

+0

Bằng dịch vụ khởi động lại bạn có nghĩa là bạn khởi động lại máy chủ mysql? – Dimme

Trả lời

2

Đó là hành vi được ghi nhận, đó không phải là lỗi.
Khi máy chủ khởi động, nó đi qua mỗi bảng (InnoDB) xác định giá trị auto_increment mới sẽ là gì. Từ http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html:

InnoDB sử dụng bộ đếm tự động tăng bộ nhớ trong khi máy chủ chạy. Khi máy chủ bị dừng và khởi động lại, InnoDB khởi động lại bộ đếm cho mỗi bảng cho số INSERT đầu tiên vào bảng, như được mô tả trước đó.

Thực hiện điều gì đó tương tự khi bạn triển khai DDL làm cho bảng được xây dựng lại, chẳng hạn như thay đổi engine - thậm chí thay đổi nó thành cùng giá trị trước đó.

+0

Điều đó không giải thích tại sao nó sẽ bằng không. –

0

ALTER TABLE table_name ENGINE = MyISAM

Làm việc cho tôi. InnoDB lưu trữ AI trong bộ nhớ, do đó, nó được thiết lập lại số dòng hiện tại + 1 khi máy chủ mysql được khởi động lại. Vì vậy, nếu bảng của bạn trống khi bạn khởi động lại máy chủ, bảng sẽ được đặt lại thành 1.

Mặt khác, MyISAM được xây dựng tốt.

Các vấn đề liên quan