Bắt đầu / Dừng MySQL


8

Tôi đang tìm kiếm sự giúp đỡ để hiểu điều gì xảy ra khi dòng lệnh sau được thực thi:

root@prodn$ service mysqld stop

Có, nó tắt máy chủ MySQL để truy cập vào nó không còn khả dụng cho đến khi dịch vụ được bắt đầu lại. Tuy nhiên, cụ thể hơn, có điều gì khác xảy ra khi dịch vụ bị dừng không? Tha thứ cho người mới của tôi ở đây nhưng khi mysqld được khởi động lại, điều đó có nghĩa là các bản ghi đã bị xóa, một số bộ nhớ được giải phóng, bộ nhớ cache bị xóa, v.v.?

Lý do tôi hỏi là như sau:

Kho dữ liệu DB của chúng tôi là DB DB và trong 4 tháng qua, nó đã mất trung bình 8,5 giờ.

Thứ tư tuần trước, tôi đã dừng dịch vụ mysql và sau đó khởi động lại sau 30 phút. Kể từ đó, tôi bắt đầu nhận thấy một sự cải thiện lớn về hiệu suất tổng thể - các quy trình CHỌN / CHERTN / CẬP NHẬT / XÓA có hiệu quả hơn. DW đã hoàn thành gần 4 giờ trước đó với cùng một số lượng dữ liệu

Tuy nhiên, với mỗi ngày trôi qua, 15-20 phút bằng cách nào đó được thêm vào thời gian kết thúc. Vì vậy, tôi nghi ngờ tôi có thể phải khởi động lại dịch vụ hàng tuần.

Có một lời giải thích cho hành vi này? Tôi không biết những câu hỏi khác có liên quan nhưng thật tuyệt vời khi biết điều gì sẽ xảy ra khi mysqlddịch vụ khởi động lại.

Bất cứ ai có thể làm sáng tỏ về điều này xin vui lòng?


1
hãy thử hỏi trên serverfault hoặc dba.
gbjbaanb


1
Âm thanh như bạn có rất nhiều dữ liệu trong bộ nhớ được cam kết. dev.mysql.com/doc/refman/5.0/en/server-shutdown.html
ethrbunny

@ dat789, đúng nơi để tìm câu trả lời đã được đưa ra bởi ethrbunny. Đó là nơi đầu tiên bạn nên đi tìm nó.
Mrigesh Raj Shrestha

Câu trả lời:


2

Khi bạn phát hành service mysql stop, sẽ xảy ra nhiều hơn là chỉ cắt đứt Kết nối DB. Liên kết trong nhận xét từ @ethrbunny đã giải thích những gì xảy ra.

Tôi muốn tập trung vào một khía cạnh cụ thể: Nhóm đệm InnoDB. InnoDB phải xóa các trang bẩn của InnoDB Buffer Pool. Nếu bạn muốn biết bao nhiêu, hãy chạy cái này trước khi tắt máy:

SELECT CONCAT(dpbytes/power(1024,expo),' ',SUBSTR(units,expo*2+1,2)) DirtyPages FROM
(SELECT dpbytes,FLOOR(LOG(dpbytes)/LOG(1024)) expo FROM
(SELECT dirty_pages*page_size dpbytes FROM
(SELECT VARIABLE_VALUE dirty_pages FROM information_schema.global_status
WHERE VARIABLE_NAME='Innodb_buffer_pool_pages_dirty') AAA,
(SELECT VARIABLE_VALUE page_size FROM information_schema.global_status
WHERE VARIABLE_NAME='Innodb_page_size') BBB) AA) A,(SELECT ' BKBMBGBTB' units) B;

Điều này sẽ cho bạn biết có bao nhiêu dữ liệu cần được xóa từ Nhóm bộ đệm InnoDB.

Xin lưu ý rằng InnoDB có nhiều phần chuyển động trong không gian bảng hệ thống (tệp ibdata1). Nhấn vào đây để xem Đại diện hình ảnh của toàn bộ Cơ sở hạ tầng InnoDB .

Một số thông tin giao dịch được viết theo cách mà Crash Recovery được thực hiện khi bạn chạy service mysql start.

KHÔNG BẮT BUỘC

Bạn có thể nhận được tất cả dữ liệu được xóa và tất cả các giao dịch được cam kết sạch từ ibdata1 và Nhật ký giao dịch ( ib_logfile0, ib_logfile1) bằng cách chạy này

SET GLOBAL innodb_fast_shutdown = 0;

trước khi chạy

service mysql stop

Hãy thử một lần !!!

CẬP NHẬT 2013-04-24 07:17 EDT

Vì bạn có MyISAM làm công cụ lưu trữ chính, nên điều duy nhất xảy ra là việc xóa các thay đổi chỉ mục cho tất cả .MYIcác tệp có các thay đổi đang chờ xử lý.

Tôi cũng muốn khuyên bạn nên tắt mysqld tiếp theo, hãy chạy cái này trước trong một phiên khác:

tail -f /var/log/mysqld.log

và xem các tin nhắn đi qua và xem nó cho bạn biết mysqld đang làm gì với bất kỳ công cụ lưu trữ nào. Nếu bạn hoàn toàn không có bảng InnoDB đang sử dụng, thì bạn nên suy nghĩ về việc vô hiệu hóa InnoDB với

[mysqld]
skip-innodb

vì điều này sẽ giúp khởi động nhanh hơn và có thể tắt máy nhanh hơn.


Cám ơn vì cái này. Tôi nên đã cụ thể hơn về một khía cạnh khác mà tôi đã không đề cập - chúng tôi đang sử dụng công cụ MyISAM trên hầu hết các bảng của chúng tôi. Điều này có làm nên sự khác biệt so với InnoDB không? Có cách nào để làm điều tương tự mà không cần khởi động lại mysqld không? Nếu không, điều này có nghĩa là thỉnh thoảng tôi phải làm phiền quản trị hệ thống của chúng tôi. Ngoài ra, lý do khá đơn giản - sau mỗi ngày trôi qua kể từ lần khởi động lại cuối cùng, các hoạt động CHỌN / CẬP NHẬT / CHỨNG dường như bị trì hoãn sau 25-40 phút. Một khởi động lại đưa nó trở lại thời gian 'tối ưu hóa' của nó. Tôi không thể giải thích tại sao.
dat789

Tôi tin tưởng mạnh mẽ rằng InnoDB đã bị vô hiệu hóa. Xem trích xuất: 130422 15:35:31 mysqld_safe Bắt đầu trình nền mysqld với cơ sở dữ liệu từ / srv / mysqldb / mysql 130422 15:35:33 [Lưu ý] Plugin 'LIÊN KẾT' bị vô hiệu hóa. 130422 15:35:33 [Lưu ý] Plugin 'InnoDB' bị tắt. 130422 15:35:33 [Lưu ý] Trình lập lịch sự kiện: Đã tải 0 sự kiện 130422 15:35:33 [Lưu ý] / usr / libexec / mysqld: sẵn sàng cho các kết nối. Phiên bản: '5.5.17' socket: '/srv/mysqldb/mysql/mysql.sock' port: 3306 MySQL Community Server (GPL) Làm thế nào chúng ta có thể xóa các thay đổi chỉ mục cho tất cả .MYI mà không cần khởi động lại? Khả thi?
dat789
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.