2012-05-12 54 views
8

Tôi có một cơ sở dữ liệu với hàng trăm kết nối hoạt động tại bất kỳ thời điểm nào. Khi tôi sử dụng câu lệnh DROP USER sql để xóa tài khoản người dùng, phải mất ~ 4 giây, trong đó tất cả các kết nối khác có trạng thái "Kiểm tra quyền". Điều này có nghĩa là để xóa 1000 người dùng, tôi sẽ khóa cơ sở dữ liệu một cách hiệu quả trong khoảng thời gian 4000 giây, điều này là không thể chấp nhận được. Tuy nhiên, tôi lưu ý rằng việc xóa một hàng người dùng khỏi bảng mysql.users là ngay lập tức.Sự khác biệt giữa DROP USER và xóa một hàng khỏi bảng mysql.user

Đang xóa một hàng khỏi mysql.users kosher? Những hạn chế so với việc sử dụng DROP USER là gì? Tôi có để lại những hàng cũ ở đâu đó không? Có vấn đề tuyên truyền nào không? Tôi rất có thể sẽ phải đi tuyến đường này, nhưng tôi muốn biết những gì khác làm sạch tôi sẽ cần phải làm.

+0

Nếu bạn phát hành 1000 câu lệnh DROP USER trong một giao dịch, nó có chạy nhanh hơn 4000 giây không? (Tôi nhận ra đó là một số vô lý được sử dụng để minh họa, nhưng tôi tò mò nếu hình phạt thời gian có thể được thực hiện chỉ một lần ngay cả đối với nhiều giọt ...) – sarnold

+1

Câu hỏi hay. Tôi đã thực sự kiểm tra điều đó. Thật không may, không, thời gian thực hiện tăng tương ứng với số lượng người dùng bị giảm. Chỉnh sửa: Đây cũng là trường hợp nếu nhiều người dùng được chỉ định trong một lệnh DROP USER. – BrainCore

Trả lời

3

Phụ thuộc vào phiên bản của MySQL

sử dụng Drop trong MySQL <= v5.0 chỉ loại bỏ các hồ sơ người dùng nhưng không phải đặc quyền. MySQL >= v5.0.2 thực hiện cả hai lần.

Cũng có thể chuyển nhiều người dùng.

+0

Nó sẽ là chính xác để nói rằng DROP USER chỉ loại bỏ các hàng từ mysql.user và mysql.tables_priv, và không làm gì hơn? – BrainCore

+1

Tắt đầu của tôi, thả người dùng thay thế cần phải thu hồi đặc quyền, xóa bản ghi từ bảng người dùng và đặc quyền tuôn ra – codemonkee

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