Nội dung chính
- 1 Xem Điều gì xảy ra nếu bạn không đóng kết nối mysql? 2024
- 2 Máy chủ MySQL đã biến mất Lỗi
- 3 Không thể kết nối với máy chủ MySQL [cục bộ] Lỗi
- 4 Chủ nhà ‘. ‘ bị chặn Lỗi
- 5 Quá nhiều kết nối Lỗi
- 6 Không thể khôi phục một số bảng đã thay đổi không phải do giao dịch
- 7 Lỗi giao tiếp/Kết nối bị hủy
- 8 Không thể tạo/ghi vào tệp Lỗi
- 9 Các lệnh không đồng bộ Lỗi trong Máy khách
- 10 Bảng ‘xxx’ không tồn tại Lỗi
- 11 Không thể khởi tạo lỗi bộ ký tự xxx
Xem Điều gì xảy ra nếu bạn không đóng kết nối mysql? 2024
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. Xem Phần A. 4. 1
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. Xem Phần A. 4. 1
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? . 1. 6
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?
Phần 1. 6. 2. 2
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 là
shell> mysqladmin -h `hostname` version
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. Xem Phần 2. 4. 2
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. Xem Phần 2. 2. 2. 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 hệ thống không hỗ trợ ổ cắm, bạn phải luôn chỉ định rõ ràng tên máy chủ 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 là
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. Xem Phần A. 4. 5
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. Xem Phần A. 4. 5
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. Xem Phần A. 4. 1
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
Quá nhiều kết nối Lỗ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. Xem Phần 4. 5. 6
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), thì 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’. Xem Phần 4. 5. 6. 2
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_%’. Xem Phần 4. 5. 6. 4
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 4. 9. 1)
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. Xem Phần 4. 5. 6. 4
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
Xem Phần 4. 5. 6. 4
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. Xem Phần A. 2. 8
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 đề. Xem Phần 5. 5. 6
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
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
0
đ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
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
1
giả sử rằng thư mục
shell> mysqladmin -h `hostname` version
6 tồn tại. Xem Phần 4. 1. 2
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> 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
3
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 ( )
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
4
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. Xem Phần 4. 5. 6
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. Xem Phần 2. 3. 3
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. Xem Phần 4. 6. 1
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ự. Xem Phần 2. 3. 3
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. Xem Phần 4. 5. 6. 4. 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. Xem Phần 4. 1. 2. 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
Việc đóng kết nối MySQL có quan trọng không?
Điều gì xảy ra nếu tôi không đóng kết nối cơ sở dữ liệu?
Điều gì xảy ra nếu kết nối SQL không được đóng?
Bạn có nên đóng kết nối MySQL sau mỗi truy vấn không?
Bạn đang tìm hiểu bài viết: Điều gì xảy ra nếu bạn không đóng kết nối mysql? 2024
HỆ THỐNG CỬA HÀNG TRÙM SỈ QUẢNG CHÂU
Điện thoại: 092.484.9483
Zalo: 092.484.9483
Facebook: https://facebook.com/giatlathuhuongcom/
Website: Trumsiquangchau.com
Địa chỉ: Ngõ 346 Nam Dư, Trần Phú, Hoàng Mai, Hà Nội.