2012-04-06 36 views
5

Tôi có một myisam chỉ dành riêng cho máy chủ mysql 32 GB RAM đang chạy trên cấu hình mặc định. Tôi muốn thay đổi loại động cơ thành InnoDB của một bảng để tránh bị khóa bảng. Nó có 50 triệu bản ghi và kích thước trên đĩa là khoảng 15 GB. Tôi đang sử dụng phiên bản mysql 5.5 Tôi đoán tôi sẽ cần thêm các tùy chọn sau và khởi động lại mysql.Thay đổi loại bảng thành InnoDB

innodb_buffer_pool_size=1G 
innodb_log_file_size=100M 
innodb_file_per_table=1 

Điều gì khác được coi là cần thiết trong khi thay đổi loại động cơ?

Trả lời

13

Bạn thực sự sẽ chạy một lệnh để chuyển đổi từng bảng.

Nó đi nhanh hơn để đầu tiên sắp xếp bảng:

ALTER TABLE tablename ORDER BY primary_key_column; 

Sau đó, chạy lệnh ALTER:

ALTER TABLE tablename ENGINE = INNODB; 

Nó có thể mất một thời gian nếu bảng là thực sự lớn, và nó sẽ sử dụng rất nhiều CPU của bạn ....

+0

Câu hỏi của tôi là về những thay đổi đối với cấu hình my.cnf cần được thực hiện vì cnf hiện tại không có tham số liên quan đến innodb. – shantanuo

+0

Giải pháp dưới đây đề xuất "SHOW ENGINES" sẽ cho bạn biết liệu bạn có cần thay đổi thêm tệp my.cnf của mình hay không. Nếu vậy, chỉ cần chắc chắn "skip-innodb" được nhận xét. Hãy nhớ khởi động lại động cơ mysql của bạn một cách duyên dáng. –

+0

Trong trường hợp đó, InnoDB sẽ chạy trên các giá trị mặc định. Câu hỏi của tôi là về những gì mặc định cần phải được thay đổi. Hay nó sẽ hoạt động tốt trong thời gian dài với cài đặt mặc định? Tôi đã liệt kê ngắn 3 thông số quan trọng nhất, tôi muốn biết thêm. – shantanuo

7

Trước hết hãy kiểm tra xem cơ sở dữ liệu của bạn có hỗ trợ công cụ InnoDB không (tôi đặt cược nó được hỗ trợ;)):

SHOW ENGINES\G 

Nếu vậy, có đã được mặc định innodb related parameters tại chỗ, kiểm tra chúng bằng:

SHOW VARIABLES LIKE '%innodb%' 

và cố gắng hiểu họ và thay đổi theo nhu cầu cụ thể của bạn. Ngay cả khi bạn sử dụng các tham số mặc định, bây giờ bạn có thể chơi arround với các bảng InnoDB.

Nếu bạn muốn tạo chỉ các bảng InnoDB, bạn có thể thay đổi công cụ lưu trữ mặc định của mình, cho phiên hiện tại của bạn bằng: SET storage_engine=INNODB; hoặc trong cấu hình của bạn bằng cách sử dụng tùy chọn mặc định lưu trữ động cơ.

Nhân tiện, cách nhanh nhất để chuyển đổi bảng thành InnoDB không phải là cách được mô tả ở trên. Người ta có thể làm như sau để chuyển đổi một bảng để InnoDB chỉ đơn giản chèn dữ liệu:

CREATE TABE new AS SELECT * FROM old WHERE 1<>1; 
ALTER TABLE new ENGINE = INNODB; 
INSERT INTO new SELECT * FROM old; 

Tất nhiên bạn phải thêm các chỉ số bạn cần bằng tay, nhưng thường có giá trị thời gian của mình (và đau) giúp bạn tiết kiệm so với số ALTER TABLE ... trên các bảng lớn hơn một chút.

+0

Tại sao câu trả lời hữu ích hơn nhiều không được chấp nhận? +1 từ tôi – fancyPants

Các vấn đề liên quan