2012-04-24 17 views
7

Tôi hiện đang sử dụng InnoDB cho tất cả cơ sở dữ liệu của mình trong MySQL, tuy nhiên tôi chỉ nhận thấy rằng cơ sở dữ liệu information_schema của tôi sử dụng MyISAM cho các bảng không phải là MEMORY.Cơ sở dữ liệu MySQL engine: MyISAM cho information_schema nhưng InnoDB cho các cơ sở dữ liệu khác

Tôi đang trong quá trình điều tra sự cố InnoDB/MyISAM. Trong khi tôi không nghĩ rằng đây là nguyên nhân của nó, tôi lo lắng về sự pha trộn này. Cơ sở dữ liệu ban đầu được thiết lập với MyISAM. Sau đó các tập tin my.cnf đã được cập nhật để thiết lập lại các công cụ để InnoDB. Tôi đang sử dụng MySQL 5.5.10.

Các vấn đề có thể xảy ra khi đặt cơ sở dữ liệu information_schema thành MyISAM, nhưng tất cả cơ sở dữ liệu khác của bạn được đặt thành MySQL là gì?


Đối với những người tìm kiếm sự giúp đỡ: Nếu bạn đã xem qua câu hỏi này để tìm kiếm một câu trả lời hoặc bạn muốn biết thêm, để xem cơ sở dữ liệu mặc định của bạn:

show variables; 

Để xem công cụ được gán cho các bảng trong cơ sở dữ liệu:

show table status; 

Cài đặt my.cnf của tôi:

[client] 
default-character-set=utf8 

[mysqld] 
log=/usr/local/var/mysql/mysqld.log 
character-set-server = utf8 
collation-server = utf8_general_ci 
lower_case_table_names=2 
default_storage_engine=InnoDB 

# Performance hacks: 
innodb_flush_method=nosync 
innodb_flush_log_at_trx_commit=0 

Trả lời

4

Công cụ lưu trữ được sử dụng trên cơ sở mỗi bảng. Công cụ lưu trữ mặc định được sử dụng khi tạo bảng mới và bạn không chỉ định công cụ lưu trữ cho bảng mới.

Các bảng hệ thống sẽ là MyISAM bất kể bạn đặt công cụ lưu trữ mặc định thành gì.

Từ MySQL documentation:

quan trọng

Không chuyển đổi MySQL bảng hệ thống trong cơ sở dữ liệu mysql (ví dụ như sử dụng hoặc máy chủ) để loại InnoDB. Đây là một hoạt động không được hỗ trợ. Bảng hệ thống phải luôn thuộc loại MyISAM.

Nếu bạn không truy vấn trực tiếp vào bảng thông tin, không cần phải lo lắng về việc trộn các loại.