Cách dễ nhất để tắt mysql khi nó chỉ đơn giản là chạy
mysqladmin -uroot -p -h127.0.0.1 --protocol=tcp shutdown
Đây là lý do tại sao:
Tệp dịch vụ mysql ( /etc/init.d/mysql
) phụ thuộc vào sự hiện diện của tệp ổ cắm. Về mặt lịch sử, khi quay trở lại MySQL 4.0, tệp socket đôi khi biến mất một cách khó hiểu. Điều này cản trở một tiêu chuẩn service mysql stop
từ làm việc.
Nó không đủ để nói
mysqladmin -uroot -p -h127.0.0.1 shutdown
vì mysqld chí tuyến đường người dùng đến trong như root@127.0.0.1
để root@localhost
nếu TCP / IP không được kích hoạt một cách rõ ràng. Theo mặc định, mysqld sẽ chọn con đường ít nhất kháng và kết nối root@127.0.0.1
đến root@localhost
thông qua các tập tin ổ cắm. Tuy nhiên, nếu không có tệp socket, root@localhost
sẽ không bao giờ kết nối.
Ngay cả Tài liệu MySQL trên mysqladmin cũng nói điều này:
Nếu bạn thực hiện tắt máy mysqladmin khi kết nối với máy chủ cục bộ bằng tệp ổ cắm Unix, mysqladmin sẽ đợi cho đến khi tệp ID tiến trình của máy chủ bị xóa, để đảm bảo rằng máy chủ đã dừng đúng cách.
Đó là lý do tại sao bắt buộc phải kích hoạt TCP / IP:
mysqladmin -uroot -p -h127.0.0.1 --protocol=tcp shutdown
Trở lại vào ngày 30 tháng 9 năm 2011, tôi đã viết kịch bản phiên bản mysqld_multi
được gọi của riêng mình mysqlservice
(Xem bài đăng của tôi: Chạy nhiều phiên bản trên cùng một máy chủ ). Nó phục vụ như một công cụ ảo để kết nối với mysqld từ các cổng khác nhau. Bạn chỉ cần mang theo của riêng bạn my.cnf
với các thông số tùy chỉnh. Trong kịch bản đó, tôi đưa ra các tắt máy như thế này:
stop() {
${ECHO} -n $"Stopping ${PROGNAME}"
${MYSQLD_STOP}
ATTEMPTS=0
STOPPING_MYSQLD=1
MINUTES_TO_TRY=10
(( TICKS_TO_TRY = MINUTES_TO_TRY*240 ))
while [ ${STOPPING_MYSQLD} -eq 1 ]
do
${ECHO} -n "."
${SLEEP} 0.25
MYSQLD_HAS_BEEN_SHUTDOWN=`${TAIL} ${MYSQL_ERROR_LOG} | ${GREP} -c "Shutdown complete$"`
(( ATTEMPTS++ ))
if [ ${ATTEMPTS} -eq ${TICKS_TO_TRY} ] ; then STOPPING_MYSQLD=0 ; fi
if [ ${MYSQLD_HAS_BEEN_SHUTDOWN} -eq 1 ] ; then STOPPING_MYSQLD=2 ; fi
done
${ECHO}
if [ ${STOPPING_MYSQLD} -eq 2 ]
then
${ECHO} "Stopped ${PROGNAME}"
else
${TAIL} -30 ${MYSQL_ERROR_LOG}
fi
}
Nhưng là ${MYSQLD_STOP}
gì?
MYSQL_CONN="-uroot -p<rootpassword> -P${MYSQLD_PORT} -h127.0.0.1 --protocol=tcp"
MYSQLD_STOP="${MYSQLADMIN} ${MYSQL_CONN} shutdown"
Xin lưu ý tôi sử dụng 127.0.0.1
và một cổng rõ ràng. Bằng cách đó, tôi không dựa vào một tập tin ổ cắm.
Tôi đã luôn luôn sử dụng mysqladmin --protocol=tcp shtudown
như là sự thay thế thích hợp cho việc tắt máy mysql nếu service mysql stop
bị treo. Làm kill -9
trên mysqld
và mysqld_safe
nên cuối cùng của cuối cùng của những khu nghỉ mát cuối cùng. (Vâng, tôi đã nói ba lần cuối cùng).
Nhiều lần, mysqld đã xóa mysql.sock mà không có cảnh báo. Những người khác cũng đã có vấn đề này trong những năm qua:
TIẾNG VIỆT
Bí mật đúng như tôi đã nêu: Kết nối với mysql bằng mysqladmin thông qua TCP / IP ( --protocol=tcp
) và vấn đề shutdown
. Điều này phải hoạt động vì đặc quyền tắt máy là mysql.user
dành cho mục đích độc quyền của tắt máy được xác thực. Điều này đã lưu lại ngày làm việc của tôi một vài lần khi tôi có thể thực hiện tắt máy từ xa từ máy Windows của mình khi tắt mysqld trên máy chủ Linux.
CẬP NHẬT 2013 / 03-06 22:48 EST
Nếu bạn lo lắng về những gì đang diễn ra trong quá trình tắt máy, có một cách để thao túng thời gian tắt máy và cách dữ liệu được chuyển vào đĩa, đặc biệt là nếu bạn có nhiều dữ liệu InnoDB trong Bộ đệm
BỀN VỮNG # 1
Nếu bạn có nhiều trang bẩn, bạn có thể hạ innodb_max_denty_pages_pct xuống 0:
SET GLOBAL innodb_max_dirty_pages_pct = 0;
Đặt cái này khoảng 15-30 phút trước khi tắt máy. Điều này sẽ cung cấp cho mysqld số lượng trang bẩn ít nhất có thể để ghi vào đĩa.
BỀN VỮNG # 2
Theo mặc định, innodb_fast_shutdown là 1. Có ba giá trị cho tùy chọn này
- 0: InnoDB thực hiện tắt máy chậm, thanh lọc toàn bộ và hợp nhất bộ đệm chèn trước khi tắt.
- 1: InnoDB bỏ qua các hoạt động này khi tắt máy, một quá trình được gọi là tắt máy nhanh.
- 2: InnoDB tuôn ra các bản ghi của nó và tắt lạnh, như thể MySQL đã bị sập; không có giao dịch cam kết nào bị mất, nhưng hoạt động khôi phục sự cố khiến lần khởi động tiếp theo mất nhiều thời gian hơn.
Tài liệu tiếp tục nói điều này:
Việc tắt máy chậm có thể mất vài phút hoặc thậm chí hàng giờ trong những trường hợp cực đoan mà lượng dữ liệu đáng kể vẫn được đệm. Sử dụng kỹ thuật tắt máy chậm trước khi nâng cấp hoặc hạ cấp giữa các bản phát hành chính của MySQL, để tất cả các tệp dữ liệu được chuẩn bị đầy đủ trong trường hợp quá trình nâng cấp cập nhật định dạng tệp.
Sử dụng innodb_fast_shutdown = 2 trong các tình huống khẩn cấp hoặc khắc phục sự cố, để tắt máy nhanh nhất tuyệt đối nếu dữ liệu có nguy cơ bị hỏng.
Mặc định cho innodb_max_denty_pages_pct và innodb_fast_shutdown sẽ ổn trong hầu hết các trường hợp.
tmpwatch
xóa nó, cùng với mọi thứ khác/tmp
có thời gian cũ hơn ngưỡng được định cấu hình của nó.