Bảng điều khiển MySQL: Ctrl + C điều khiển tôi


24

Có một cái gì đó trong bảng điều khiển MySQL khiến tôi phát điên. Khi tôi nhấn ctrl+ cđể hủy lệnh hiện tại đang gõ, thiết bị đầu cuối sẽ thoát.

Trong mỗi tôi bí quyết terminal ( *nixthiết bị đầu cuối, Python, PostgreSQL), ctrl+ chủy bỏ lệnh hiện hành và ctrl+ dthoát các thiết bị đầu cuối.

Vấn đề này đã được báo cáo vào năm 2003 , và đã bị va chạm nhiều lần kể từ đó.

Có cách nào để:

  • Thay đổi hành vi này, hoặc
  • Thuyết phục nhóm phát triển MySQL rằng điều này thực sự gây phiền nhiễu?

Câu trả lời:


6

Để thay đổi hành vi, tải xuống nguồn cho mysql CLI và sửa đổi SIGINTtrình xử lý để hành xử khi bạn thấy phù hợp, sau đó biên dịch lại và cài đặt.


1
Điều này có nguy hiểm không? Không có gì đảm bảo rằng nó sẽ hoạt động cho các phiên bản trong tương lai. Thêm vào đó , có vẻ như nó hoạt động, nhưng làm thế nào bạn biết rằng bạn sẽ không có một số hành vi kỳ lạ ở một nơi hoàn toàn không liên quan sau này?
Pacerier

21

Ít nhất phiên bản 5.6,14 của máy khách có tùy chọn --sigint-bỏ qua để hoàn toàn bỏ qua trình xử lý SIGINT. Nó dường như đã được thêm vào ngày 7 tháng 10 năm 2004 - vì vậy ít nhất nó đã xuất hiện được một lúc. Tôi vừa thử nghiệm nó và nó giữ cho CTRL-C không hủy ứng dụng khách MySQL. Tuy nhiên, thật tuyệt nếu CTRL-C cũng sẽ hủy bộ đệm dòng lệnh hiện tại giống như trên trình bao BASH - như PostgreQuery CLI thực hiện. Tôi đã rẽ nhánh MySQL để xem việc thực hiện một số việc như vậy sẽ khó đến mức nào. Tôi sẽ đăng công thức Homebrew với liên kết tarball khi / nếu nó sẵn sàng.

CẬP NHẬT 1 Bao giờ có một trong những ngày đó? Tôi đã tạo ra bản vá đã hứa , và sau đó tôi quyết định tạo một video để trình diễn nó. Nó đã làm việc! Tuy nhiên, tôi không thể vô hiệu hóa nó! Chà, hóa ra MySQL thực sự đã nướng chức năng cho máy khách cốt lõi năm ngoái ! Đúng, từ A đến Q này là để tải xuống ít nhất máy khách của MySQL 5.7.3-794-g901d27f. Nó có chức năng tất cả chúng ta mong muốn.

VÍ DỤ Từ dòng lệnh chỉ cần thêm cờ --sigint-bỏ qua:

mysql --host=127.0.0.1 --port=8900 --user=root -p --sigint-ignore DBNAME

Hoặc, làm như tôi đã làm và tạo tệp cấu hình MySQL cho tài khoản người dùng của bạn tại $HOME/.my.cnf( %USERPROFILE%/.my.cnftrên Windows) với nội dung sau:

[mysql]
sigint-ignore=TRUE

Điều này sẽ đảm bảo rằng tất cả các mysqlthực thi đều bỏ qua Ctrl-C gây phiền nhiễu và hoạt động như một máy khách SQL tốt.


19

Mặc dù hành vi ctrl+ cgây khó chịu, bạn vẫn có thể sử dụng \cđể hủy truy vấn hiện tại. Bạn chỉ cần tự rèn luyện rằng khi sử dụng mysql CLI, bạn sử dụng \cthay vì ctrl+ c!


1
Ai là người nghĩ ra ý tưởng này? Chúng tôi muốn cái đầu của anh ấy.
Pacerier

1
Bạn cũng có thể sử dụng Ctrl + U để xóa ở đầu dòng và Ctrl + W để xóa một từ lùi.
Damien Ó Ceallaigh

9

Tin tốt: Chức năng ^ C của MySQL cuối cùng đã được sửa bởi # 66583 .

Từ 5.7.0 changelog:

Trước đây, Control + C trong mysql đã làm gián đoạn câu lệnh hiện tại nếu có, hoặc thoát mysql nếu không. Bây giờ Control + C làm gián đoạn câu lệnh hiện tại nếu có một hoặc hủy bỏ bất kỳ dòng đầu vào một phần nào khác, nhưng không thoát.


Tôi đang sử dụng 5.6.35 và xác minh đây không phải là vấn đề.
Flow2k

1

Phiên bản nào của khách hàng bạn đang sử dụng? Tôi nhớ đây là hành vi cũ hơn nhưng các phiên bản 5.1 và 5.5 gần đây dường như chỉ hủy lệnh đang chạy mà không thoát khỏi máy khách. Sau đó, một lần nữa có thể là tôi đang sử dụng các bản dựng Percona. Bạn có thể thử chỉ chạy khách hàng của họ nếu đó là trường hợp.


hmm, tôi đang chạy 5.5 Percona và ctrl + c vẫn hủy bỏ ứng dụng khách mysql (không phải lệnh sql hiện tại)
Derek Downey

Tôi nghĩ rằng tôi đã đọc sai OP. Câu trả lời của tôi là giải quyết một lệnh đang được thực thi, không phải là mong muốn để trống cho bạn một lệnh chưa được chạy.
atxdba

Tôi đồng tình với @atxdba - Tôi cũng đang chạy bản dựng Percona 5.5 và ctrl + c thoát khỏi lệnh hiện đang thực thi. Nếu không có lệnh thực thi, nó sẽ rơi ra khỏi CLI. Có thể là ctrl + d rơi ra khỏi trình bao đang chạy, nhưng nếu bạn có tập lệnh đang chạy trong trình bao, nó sẽ dừng lại nếu bạn nhấn ctrl + c ... các lệnh khác nhau cho các ứng dụng / trình bao / tập lệnh khác nhau! Có thể gây nhầm lẫn ...: ~ s
Dave Rix

@DaveRix Tôi cũng đồng ý, ctrl + c thoát khỏi truy vấn hiện đang thực thi. Nhưng đó không phải là điều mà OP không may.
Derek Downey
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.