MySQL gặp lỗi cuối cùng

Phần này liệt kê một số lỗi mà người dùng hay mắc phải. Bạn sẽ tìm thấy các mô tả về lỗi và cách giải quyết vấn đề tại đây

Máy chủ MySQL đã biến mất Lỗi

Phần này cũng đề cập đến lỗi liên quan Mất kết nối với máy chủ trong khi truy vấn

Lý do phổ biến nhất cho lỗi máy chủ MySQL đã biến mất là máy chủ đã hết thời gian chờ và đóng kết nối. Theo mặc định, máy chủ sẽ đóng kết nối sau 8 giờ nếu không có gì xảy ra. Bạn có thể thay đổi giới hạn thời gian bằng cách đặt biến wait_timeout khi khởi động mysqld

Một lý do phổ biến khác để nhận lỗi máy chủ MySQL đã biến mất là do bạn đã đưa ra lệnh “đóng” trên kết nối MySQL của mình và sau đó cố chạy truy vấn trên kết nối đã đóng

Nếu bạn có tập lệnh, bạn chỉ cần thực hiện lại truy vấn để máy khách thực hiện kết nối lại tự động

Thông thường, bạn có thể nhận được các mã lỗi sau trong trường hợp này (mã lỗi bạn nhận được phụ thuộc vào hệ điều hành)

mã lỗi

Sự miêu tả

CR_SERVER_GONE_ERROR

Khách hàng không thể gửi câu hỏi đến máy chủ

CR_SERVER_LOST

Máy khách không gặp lỗi khi ghi vào máy chủ, nhưng nó không nhận được câu trả lời đầy đủ (hoặc bất kỳ câu trả lời nào) cho câu hỏi

Bạn cũng sẽ gặp lỗi này nếu ai đó giết chuỗi đang chạy bằng kill #threadid#

Bạn có thể kiểm tra xem MySQL có chết không bằng cách chạy phiên bản mysqladmin và kiểm tra thời gian hoạt động. Nếu vấn đề là mysqld bị sập, bạn nên tập trung tìm ra nguyên nhân của sự cố. Trong trường hợp này, bạn nên bắt đầu bằng cách kiểm tra xem việc đưa ra lại truy vấn có giết MySQL lần nữa không. Nhìn thấy

Bạn cũng có thể gặp các lỗi này nếu gửi truy vấn đến máy chủ không chính xác hoặc quá lớn. Nếu mysqld nhận được một gói quá lớn hoặc không đúng thứ tự, nó sẽ giả định rằng đã xảy ra sự cố với máy khách và đóng kết nối. Nếu bạn cần các truy vấn lớn (ví dụ: nếu bạn đang làm việc với các cột BLOB lớn), bạn có thể tăng giới hạn truy vấn bằng cách bắt đầu mysqld với tùy chọn -O max_allowed_packet=# (1M mặc định). Bộ nhớ bổ sung được phân bổ theo yêu cầu, vì vậy mysqld sẽ chỉ sử dụng nhiều bộ nhớ hơn khi bạn đưa ra một truy vấn lớn hoặc khi mysqld phải trả về một hàng kết quả lớn

Nếu bạn muốn báo cáo lỗi liên quan đến vấn đề này, hãy chắc chắn rằng bạn bao gồm các thông tin sau

  • Bao gồm thông tin nếu MySQL chết hay không. (Bạn có thể tìm thấy điều này trong tên máy chủ. tập tin lỗi. Nhìn thấy

  • Nếu một truy vấn cụ thể giết chết mysqld và các bảng có liên quan được kiểm tra bằng CHECK TABLE trước khi bạn thực hiện truy vấn, bạn có thể thực hiện một trường hợp thử nghiệm cho việc này không?

  • Giá trị của biến wait_timeout trong máy chủ MySQL là gì?

  • Bạn đã thử chạy mysqld với --log và kiểm tra xem truy vấn đã đưa ra có xuất hiện trong nhật ký không?

.

Không thể kết nối với máy chủ MySQL [cục bộ] Lỗi

Máy khách MySQL trên Unix có thể kết nối với máy chủ mysqld theo hai cách khác nhau. Ổ cắm Unix, kết nối thông qua một tệp trong hệ thống tệp (mặc định ____0_______2) hoặc TCP/IP, kết nối thông qua một số cổng. Ổ cắm Unix nhanh hơn TCP/IP nhưng chỉ có thể được sử dụng khi kết nối với máy chủ trên cùng một máy tính. Ổ cắm Unix được sử dụng nếu bạn không chỉ định tên máy chủ hoặc nếu bạn chỉ định tên máy chủ đặc biệt localhost

Trên Windows, nếu máy chủ mysqld đang chạy trên 9x/Me, bạn chỉ có thể kết nối qua TCP/IP. Nếu máy chủ đang chạy trên NT/2000/XP và mysqld được bắt đầu bằng --enable-named-pipe, bạn cũng có thể kết nối với các đường ống có tên. Tên của đường ống được đặt tên là MySQL. Nếu bạn không cung cấp tên máy chủ khi kết nối với mysqld, trước tiên, máy khách MySQL sẽ cố gắng kết nối với đường ống được đặt tên và nếu điều này không hoạt động, nó sẽ kết nối với cổng TCP/IP. Bạn có thể buộc sử dụng các đường dẫn có tên trên Windows bằng cách sử dụng. như tên máy chủ

Lỗi (2002) Không thể kết nối với. thông thường có nghĩa là không có máy chủ MySQL nào đang chạy trên hệ thống hoặc bạn đang sử dụng sai tệp ổ cắm hoặc cổng TCP/IP khi cố gắng kết nối với máy chủ mysqld

Bắt đầu bằng cách kiểm tra (sử dụng ps hoặc trình quản lý tác vụ trên Windows) xem có tiến trình nào đang chạy có tên mysqld trên máy chủ của bạn không. Nếu không có bất kỳ quy trình mysqld nào, bạn nên bắt đầu một quy trình. Nhìn thấy

Nếu một quy trình mysqld đang chạy, bạn có thể kiểm tra máy chủ bằng cách thử các kết nối khác nhau này (tất nhiên, số cổng và tên đường dẫn ổ cắm có thể khác trong thiết lập của bạn)

shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host' version
shell> mysqladmin --socket=/tmp/mysql.sock version

Lưu ý việc sử dụng các trích dẫn ngược thay vì trích dẫn chuyển tiếp bằng lệnh tên máy chủ;

Dưới đây là một số lý do có thể xảy ra lỗi Không thể kết nối với máy chủ MySQL cục bộ

  • mysqld không chạy

  • Bạn đang chạy trên một hệ thống sử dụng MIT-pthreads. Nếu bạn đang chạy trên hệ thống không có luồng gốc, mysqld sẽ sử dụng gói MIT-pthreads. Nhìn thấy. Tuy nhiên, không phải tất cả các phiên bản MIT-pthread đều hỗ trợ Unix socket. Trên một hệ thống không hỗ trợ ổ cắm, bạn phải luôn chỉ định tên máy chủ một cách rõ ràng khi kết nối với máy chủ. Hãy thử sử dụng lệnh này để kiểm tra kết nối với máy chủ

    shell> mysqladmin -h `hostname` version
  • Ai đó đã gỡ bỏ ổ cắm Unix mà mysqld sử dụng (mặc định

    shell> mysqladmin -h `hostname` version
    2). Bạn có thể có một công việc định kỳ loại bỏ ổ cắm MySQL (ví dụ: một công việc loại bỏ các tệp cũ khỏi thư mục
    shell> mysqladmin -h `hostname` version
    4). Bạn luôn có thể chạy phiên bản mysqladmin và kiểm tra xem ổ cắm mà mysqladmin đang cố sử dụng có thực sự tồn tại không. Cách khắc phục trong trường hợp này là thay đổi công việc định kỳ để không xóa
    shell> mysqladmin -h `hostname` version
    5 hoặc đặt ổ cắm ở một nơi khác. Nhìn thấy

  • Bạn đã khởi động máy chủ mysqld với tùy chọn --socket=/path/to/socket. Nếu bạn thay đổi tên đường dẫn ổ cắm cho máy chủ, bạn cũng phải thông báo cho các máy khách MySQL về đường dẫn mới. Bạn có thể làm điều này bằng cách cung cấp đường dẫn ổ cắm làm đối số cho máy khách. Nhìn thấy

  • Bạn đang sử dụng Linux và một luồng đã chết (lõi bị đổ). Trong trường hợp này, bạn phải tắt các luồng mysqld khác (ví dụ: với tập lệnh mysql_zap) trước khi bạn có thể khởi động máy chủ MySQL mới. Nhìn thấy

  • Bạn có thể không có đặc quyền đọc và ghi vào thư mục chứa tệp ổ cắm hoặc vào chính tệp ổ cắm. Trong trường hợp này, bạn có thể thay đổi đặc quyền cho thư mục/tệp hoặc khởi động lại mysqld để nó sử dụng thư mục mà bạn có thể truy cập

Nếu bạn nhận được thông báo lỗi Không thể kết nối với máy chủ MySQL trên some_hostname, bạn có thể thử những cách sau để tìm hiểu vấn đề là gì

  • Kiểm tra xem máy chủ có hoạt động hay không bằng cách thực hiện telnet your-host-name tcp-ip-port-number và nhấn Enter một vài lần. Nếu có máy chủ MySQL chạy trên cổng này, bạn sẽ nhận được phản hồi bao gồm số phiên bản của máy chủ MySQL đang chạy. Nếu bạn gặp lỗi như telnet. Không thể kết nối với máy chủ từ xa. Kết nối bị từ chối, không có máy chủ nào chạy trên cổng đã cho

  • Hãy thử kết nối với trình nền mysqld trên máy cục bộ và kiểm tra cổng TCP/IP mà mysqld được định cấu hình để sử dụng (cổng biến) với các biến mysqladmin

  • Kiểm tra xem máy chủ mysqld của bạn chưa được khởi động với tùy chọn --skip-networking

Chủ nhà '. ' bị chặn Lỗi

Nếu bạn gặp lỗi như thế này

Host 'hostname' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'

điều này có nghĩa là mysqld đã nhận được rất nhiều (max_connect_errors) yêu cầu kết nối từ 'tên máy chủ' của máy chủ đã bị gián đoạn ở giữa. Sau khi yêu cầu max_connect_errors không thành công, mysqld giả định rằng có điều gì đó không ổn (như cuộc tấn công từ kẻ bẻ khóa) và chặn trang web khỏi các kết nối tiếp theo cho đến khi ai đó thực thi lệnh mysqladmin flush-hosts

Theo mặc định, mysqld chặn máy chủ sau 10 lỗi kết nối. Bạn có thể dễ dàng điều chỉnh điều này bằng cách khởi động máy chủ như thế này

shell> safe_mysqld -O max_connect_errors=10000 &

Lưu ý rằng nếu bạn nhận được thông báo lỗi này đối với một máy chủ nhất định, trước tiên bạn nên kiểm tra xem có vấn đề gì xảy ra với các kết nối TCP/IP từ máy chủ đó không. Nếu kết nối TCP/IP của bạn không hoạt động, bạn sẽ không tăng giá trị của biến max_connect_errors

Lỗi quá nhiều kết nối

Nếu bạn gặp lỗi Quá nhiều kết nối khi cố gắng kết nối với MySQL, điều này có nghĩa là đã có các ứng dụng khách max_connections được kết nối với máy chủ mysqld

Nếu bạn cần nhiều kết nối hơn mặc định (100), bạn nên khởi động lại mysqld với giá trị lớn hơn cho biến max_connections

Lưu ý rằng mysqld thực sự cho phép (max_connections+1) máy khách kết nối. Kết nối cuối cùng được dành riêng cho người dùng có đặc quyền quy trình. Bằng cách không cấp đặc quyền này cho người dùng bình thường (họ không cần điều này), quản trị viên có đặc quyền này có thể đăng nhập và sử dụng SHOW PROCESSLIST để tìm hiểu điều gì có thể sai. Nhìn thấy

Số lượng kết nối tối đa cho phép với MySQL tùy thuộc vào mức độ tốt của thư viện luồng trên một nền tảng nhất định. Linux hoặc Solaris có thể hỗ trợ 500-1000 kết nối đồng thời, tùy thuộc vào dung lượng RAM bạn có và máy khách của bạn đang làm gì

Không thể khôi phục một số bảng đã thay đổi không phải do giao dịch

Nếu bạn gặp lỗi/cảnh báo. Cảnh báo. Không thể khôi phục một số bảng đã thay đổi không phải giao dịch khi cố gắng thực hiện QUAY LẠI, điều này có nghĩa là một số bảng bạn đã sử dụng trong giao dịch không hỗ trợ giao dịch. Các bảng không giao dịch này sẽ không bị ảnh hưởng bởi câu lệnh ROLLBACK

Thông thường, điều này xảy ra khi bạn đã cố gắng tạo một bảng thuộc loại không được hỗ trợ bởi tệp nhị phân mysqld của bạn. Nếu mysqld không hỗ trợ loại bảng (hoặc nếu loại bảng bị tắt bởi tùy chọn khởi động), thay vào đó, nó sẽ tạo loại bảng có loại bảng giống với loại bạn yêu cầu nhất, có thể là MyISAM

Bạn có thể kiểm tra loại bảng cho một bảng bằng cách thực hiện

HIỂN THỊ TÌNH TRẠNG BẢNG NHƯ 'tên_bảng'. Nhìn thấy

Bạn có thể kiểm tra các tiện ích mở rộng hỗ trợ nhị phân mysqld của mình bằng cách thực hiện

hiển thị các biến như 'have_%'. Nhìn thấy

Nếu bạn đưa ra một truy vấn và gặp lỗi như sau

________số 8_______

lưu ý rằng lỗi đề cập đến máy khách MySQL mysql. Nguyên nhân của lỗi này đơn giản là do client không đủ bộ nhớ để lưu toàn bộ kết quả

Để khắc phục sự cố, trước tiên hãy kiểm tra xem truy vấn của bạn có đúng không. Có hợp lý không khi nó trả lại nhiều hàng như vậy? . Điều này đặt ít tải hơn cho máy khách (nhưng nhiều hơn cho máy chủ)

Khi máy khách MySQL hoặc máy chủ mysqld nhận được một gói lớn hơn byte max_allowed_packet, nó sẽ báo lỗi Gói quá lớn và đóng kết nối

Trong Mysql 3. 23 gói lớn nhất có thể là 16M (do giới hạn trong giao thức máy khách/máy chủ). Trong Mysql 4. 0. 1 trở lên, điều này chỉ bị giới hạn bởi dung lượng bộ nhớ bạn có trên máy chủ của mình (tối đa theo lý thuyết là 2G)

Gói giao tiếp là một câu lệnh SQL đơn được gửi đến máy chủ MySQL hoặc một hàng đơn được gửi đến máy khách

Khi máy khách MySQL hoặc máy chủ mysqld nhận được một gói lớn hơn byte max_allowed_packet, nó sẽ báo lỗi Gói quá lớn và đóng kết nối. Với một số máy khách, bạn cũng có thể gặp lỗi Mất kết nối với máy chủ MySQL trong khi truy vấn nếu gói liên lạc quá lớn

Lưu ý rằng cả máy khách và máy chủ đều có biến max_allowed_packet riêng. Nếu bạn muốn xử lý các gói lớn, bạn phải tăng biến này ở cả máy khách và máy chủ

Việc tăng biến này là an toàn vì bộ nhớ chỉ được cấp phát khi cần thiết;

Nếu bạn đang sử dụng ứng dụng khách mysql, bạn có thể chỉ định bộ đệm lớn hơn bằng cách khởi động ứng dụng khách với mysql --set-variable=max_allowed_packet=8M. Các khách hàng khác có các phương pháp khác nhau để đặt biến này

Bạn có thể sử dụng tệp tùy chọn để đặt max_allowed_packet thành kích thước lớn hơn trong mysqld. Ví dụ: nếu bạn muốn lưu trữ toàn bộ chiều dài của MEDIUMBLOB vào một bảng, bạn sẽ cần khởi động máy chủ với tùy chọn set-variable=max_allowed_packet=16M

Bạn cũng có thể gặp sự cố lạ với các gói lớn nếu bạn đang sử dụng các đốm màu lớn, nhưng bạn chưa cấp quyền truy cập mysqld vào đủ bộ nhớ để xử lý truy vấn. Nếu bạn nghi ngờ trường hợp này xảy ra, hãy thử thêm ulimit -d 256000 vào đầu tập lệnh safe_mysqld và khởi động lại mysqld

Lỗi giao tiếp/Kết nối bị hủy

Bắt đầu với MySQL 3. 23. 40, bạn chỉ gặp lỗi Kết nối bị hủy nếu bạn khởi động mysqld với --warnings

Nếu bạn tìm thấy các lỗi như sau trong nhật ký lỗi của mình (xem phần )

010301 14:38:23  Aborted connection 854 to db: 'users' user: 'josh'

điều này có nghĩa là một trong những điều sau đây đã xảy ra

  • Chương trình máy khách không gọi mysql_close() trước khi thoát

  • Khách hàng đã ngủ nhiều hơn wait_timeout hoặc Interactive_timeout mà không thực hiện bất kỳ yêu cầu nào. Nhìn thấy

  • Chương trình khách hàng kết thúc đột ngột giữa quá trình chuyển giao

Khi điều này xảy ra, biến máy chủ Aborted_clients được tăng lên

Biến máy chủ Aborted_connects được tăng lên

  • Khi một gói kết nối không chứa đúng thông tin

  • Khi người dùng không có quyền kết nối với cơ sở dữ liệu

  • Khi người dùng sử dụng sai mật khẩu

  • Khi mất hơn connect_timeout giây để nhận gói kết nối

Lưu ý rằng điều này có thể chỉ ra rằng ai đó đang cố xâm nhập vào cơ sở dữ liệu của bạn

Nhìn thấy

Các lý do khác gây ra sự cố với máy khách bị hủy bỏ/kết nối bị hủy bỏ

  • Sử dụng giao thức Ethernet song công, cả một nửa và đầy đủ với Linux. Nhiều trình điều khiển Linux Ethernet có lỗi này. Bạn nên kiểm tra lỗi này bằng cách chuyển một tệp lớn qua ftp giữa hai máy này. Nếu quá trình chuyển tiếp diễn ra liên tục-tạm dừng-liên tục-tạm dừng. chế độ, bạn đang gặp hội chứng song công Linux. Giải pháp duy nhất cho vấn đề này là chuyển đổi cả chế độ song công một nửa và toàn phần trên các bộ tập trung và bộ chuyển mạch

  • Một số vấn đề với thư viện luồng gây gián đoạn khi đọc

  • TCP/IP được cấu hình sai

  • Ethernets, hub, switch, cáp bị lỗi. Điều này chỉ có thể được chẩn đoán chính xác bằng cách thay thế phần cứng

  • max_allowed_packet quá nhỏ hoặc truy vấn yêu cầu nhiều bộ nhớ hơn bạn đã phân bổ cho mysqld. Nhìn thấy

Lỗi này xảy ra trong các phiên bản MySQL cũ hơn khi bảng tạm thời trong bộ nhớ trở nên lớn hơn tmp_table_size byte. Để tránh sự cố này, bạn có thể sử dụng tùy chọn -O tmp_table_size=# cho mysqld để tăng kích thước bảng tạm thời hoặc sử dụng tùy chọn SQL SQL_BIG_TABLES trước khi đưa ra truy vấn có vấn đề. Nhìn thấy

Bạn cũng có thể bắt đầu mysqld với tùy chọn --big-tables. Điều này hoàn toàn giống với việc sử dụng SQL_BIG_TABLES cho tất cả các truy vấn

Trong phiên bản MySQL 3. 23, các bảng tạm thời trong bộ nhớ sẽ tự động được chuyển đổi thành bảng MyISAM dựa trên đĩa sau khi kích thước bảng lớn hơn tmp_table_size

Không thể tạo/ghi vào tệp Lỗi

Nếu bạn gặp lỗi đối với một số truy vấn thuộc loại

Can't create/write to file '\\sqla3fe_0.ism'.

điều này có nghĩa là MySQL không thể tạo tệp tạm thời cho tập kết quả trong thư mục tạm thời đã cho. (Lỗi này là một thông báo lỗi điển hình trên Windows và thông báo lỗi Unix cũng tương tự. ) Cách khắc phục là khởi động mysqld bằng --tmpdir=path hoặc thêm vào tệp tùy chọn của bạn

[mysqld]
tmpdir=C:/temp

giả sử rằng thư mục

shell> mysqladmin -h `hostname` version
6 tồn tại. Nhìn thấy

Kiểm tra mã lỗi mà bạn nhận được với perror. Một lý do cũng có thể là lỗi đầy đĩa

shell> perror 28
Error code  28:  No space left on device

Các lệnh không đồng bộ Lỗi trong Máy khách

Nếu bạn nhận được các Lệnh không đồng bộ;

Điều này có thể xảy ra, ví dụ: nếu bạn đang sử dụng mysql_use_result( ) và cố gắng thực hiện một truy vấn mới trước khi bạn gọi mysql_free_result( ). Điều này cũng có thể xảy ra nếu bạn cố gắng thực hiện hai truy vấn trả về dữ liệu mà không có mysql_use_result( ) hoặc mysql_store_result( ) ở giữa

Nếu bạn gặp lỗi sau

Tìm thấy mật khẩu sai cho người dùng. 'some_user@some_host';

điều này có nghĩa là khi mysqld được khởi động hoặc khi nó tải lại các bảng quyền, nó đã tìm thấy một mục nhập trong bảng người dùng có mật khẩu không hợp lệ. Do đó, mục nhập đơn giản bị bỏ qua bởi hệ thống cấp phép

Nguyên nhân có thể và cách khắc phục sự cố này

  • Bạn có thể đang chạy phiên bản mysqld mới với bảng người dùng cũ. Bạn có thể kiểm tra điều này bằng cách chạy lệnh mysqlshow mysql user để xem trường mật khẩu có ngắn hơn 16 ký tự không. Nếu vậy, bạn có thể sửa tình trạng này bằng cách chạy tập lệnh scripts/add_long_password

  • Người dùng có mật khẩu cũ (dài 8 ký tự) và bạn không khởi động mysqld với tùy chọn --old-protocol. Cập nhật người dùng trong bảng người dùng bằng mật khẩu mới hoặc khởi động lại mysqld bằng --old-protocol

  • Bạn đã chỉ định mật khẩu trong bảng người dùng mà không sử dụng hàm PASSWORD( ). Sử dụng mysql để cập nhật người dùng trong bảng người dùng bằng mật khẩu mới. Đảm bảo sử dụng chức năng MẬT KHẨU ( )

    mysql> UPDATE user SET password=PASSWORD('your password')
        ->             WHERE user='XXX';

Bảng 'xxx' không tồn tại Lỗi

Nếu bạn gặp lỗi Bảng 'xxx' không tồn tại hoặc Không thể tìm thấy tệp. 'xxx' (lỗi. 2), điều này có nghĩa là không có bảng nào tồn tại trong cơ sở dữ liệu hiện tại có tên xxx

Lưu ý rằng vì MySQL sử dụng các thư mục và tệp để lưu trữ cơ sở dữ liệu và bảng, tên cơ sở dữ liệu và bảng phân biệt chữ hoa chữ thường. (Trên Windows, tên bảng và cơ sở dữ liệu không phân biệt chữ hoa chữ thường, nhưng tất cả các tham chiếu đến một bảng đã cho trong một truy vấn phải sử dụng cùng một chữ hoa chữ thường. )

Bạn có thể kiểm tra những bảng bạn có trong cơ sở dữ liệu hiện tại với SHOW TABLES. Nhìn thấy

Không thể khởi tạo lỗi bộ ký tự xxx

Nếu bạn gặp lỗi như

shell> mysqladmin -h `hostname` version
0

điều này có nghĩa là một trong những điều sau đây

  • Bộ ký tự là bộ ký tự nhiều byte và bạn không hỗ trợ bộ ký tự trong ứng dụng khách

    Trong trường hợp này, bạn cần biên dịch lại ứng dụng khách với --with-charset=xxx hoặc với --with-extra-charsets=xxx. Nhìn thấy

    Tất cả các tệp nhị phân tiêu chuẩn của MySQL được biên dịch với --with-extra-character-sets=complex, điều này sẽ cho phép hỗ trợ cho tất cả các bộ ký tự nhiều byte. Nhìn thấy

  • Bộ ký tự là một bộ ký tự đơn giản không được biên dịch thành mysqld và các tệp định nghĩa bộ ký tự không ở nơi khách hàng mong muốn tìm thấy chúng

    Trong trường hợp này bạn cần phải

    • Biên dịch lại ứng dụng khách với sự hỗ trợ cho bộ ký tự. Nhìn thấy

    • Chỉ định cho khách hàng nơi lưu trữ các tệp định nghĩa bộ ký tự. Đối với nhiều khách hàng, bạn có thể thực hiện việc này với tùy chọn --character-sets-dir=path-to-charset-dir

    • Sao chép các tệp định nghĩa ký tự vào đường dẫn mà khách hàng mong đợi

Nếu bạn nhận được LỖI '. ' không tìm thấy (errno. 23), Không thể mở tập tin. . (lỗi. 24) hoặc bất kỳ lỗi nào khác với errno 23 hoặc errno 24 từ MySQL, điều đó có nghĩa là bạn chưa phân bổ đủ bộ mô tả tệp cho MySQL. Bạn có thể sử dụng tiện ích báo lỗi để nhận mô tả về ý nghĩa của số lỗi

shell> mysqladmin -h `hostname` version
1

Vấn đề ở đây là mysqld đang cố mở quá nhiều tệp cùng một lúc. Bạn có thể yêu cầu mysqld không mở quá nhiều tệp cùng một lúc hoặc tăng số lượng bộ mô tả tệp có sẵn cho mysqld

Để yêu cầu mysqld tiếp tục mở ít tệp hơn cùng một lúc, bạn có thể làm cho bộ đệm của bảng nhỏ hơn bằng cách sử dụng tùy chọn -O table_cache=32 cho safe_mysqld (giá trị mặc định là 64). Việc giảm giá trị của max_connections cũng sẽ làm giảm số lượng tệp đang mở (giá trị mặc định là 90)

Để thay đổi số lượng bộ mô tả tệp có sẵn cho mysqld, bạn có thể sử dụng tùy chọn --open-files-limit=# thành safe_mysqld hoặc -O open-files-limit=# thành mysqld. Nhìn thấy. Cách dễ nhất để làm điều đó là thêm tùy chọn vào tệp tùy chọn của bạn. Nhìn thấy. Nếu bạn có phiên bản mysqld cũ không hỗ trợ điều này, bạn có thể chỉnh sửa tập lệnh safe_mysqld. Có một dòng nhận xét ulimit -n 256 trong tập lệnh. Bạn có thể xóa ký tự '#' để bỏ ghi chú dòng này và thay đổi số 256 để ảnh hưởng đến số lượng bộ mô tả tệp có sẵn cho mysqld

ulimit (và open-files-limit) có thể tăng số lượng bộ mô tả tệp, nhưng chỉ đến giới hạn do hệ điều hành áp đặt. Ngoài ra còn có một giới hạn “cứng” chỉ có thể bị ghi đè nếu bạn bắt đầu safe mysqld hoặc mysqld với quyền root (chỉ cần nhớ rằng bạn cũng cần sử dụng --user=. tùy chọn trong trường hợp này). Nếu bạn cần tăng giới hạn hệ điều hành về số lượng bộ mô tả tệp có sẵn cho mỗi quy trình, hãy tham khảo tài liệu dành cho hệ điều hành của bạn

Lưu ý rằng nếu bạn chạy shell tcsh, ulimit sẽ không hoạt động. tcsh cũng sẽ báo cáo các giá trị không chính xác khi bạn yêu cầu các giới hạn hiện tại. Trong trường hợp này, bạn nên bắt đầu safe_mysqld với sh

Làm cách nào để kiểm tra lỗi cuối cùng trong MySQL?

Câu lệnh SHOW COUNT(*) ERRORS hiển thị số lượng lỗi. Bạn cũng có thể lấy số này từ biến error_count. HIỂN THỊ SỐ LỖI (*); .

Làm cách nào để nhận lỗi cuối cùng trong MySQL PHP?

Bạn chỉ có thể sử dụng. $this->db_link->error để nhận thông báo lỗi cuối cùng. Đối với tất cả các lỗi, hãy sử dụng $this->db_link->error_list.

Làm thế nào để có được mục cuối cùng trong MySQL?

Để lấy bản ghi cuối cùng, đây là truy vấn. mysql> select *from getLastRecord ORDER BY id DESC LIMIT 1; Sau đây là kết quả. Đầu ra ở trên cho thấy rằng chúng tôi đã tìm nạp bản ghi cuối cùng, với Id 4 và Tên Carol.

Làm cách nào để nhận lỗi truy vấn MySQL?

Để nhận được thông báo lỗi, chúng ta phải sử dụng một hàm khác mysqli_error() để in thông báo lỗi do cơ sở dữ liệu MySQL trả về sau khi thực hiện truy vấn . Đây là cách in thông báo lỗi. tiếng vang mysqli_error(); .