Insane
Coder.Wapsite.Me
Forum All Share Script | PHP
Vui lòng Đăng nhập hoặc Đăng kí để tham gia diễn đàn Wapmaster Việt Nam!

Mysql Storage Engine - Chuyển Đổi Myisam Đến Innodb Trong Xenforo


Bản quyền Diễn đàn Wapmaster
2015-05-12 18:37
avatarNgaongo [Sáng lập]
1. MyISAM trong MySQL

Đây là kiểu Storage Engine mặc định khi tạo bảng và được dùng phổ biết nhất. Storage Engine này cho phép lập chỉ mục toàn cột (Full Text Index). Do đó, Storage Engine này cho tốc độ truy suất (Đọc và tìm kiếm) nhanh nhất trong các Storage Engine.

Tuy nhiên, Nhược điểm của MyISAM là hoạt động theo kiểu Table Level locking nên khi cập nhật (Thêm,xóa,sửa) 1 bản ghi nào đó trong cùng 1 table thì table đó sẽ bị khóa lại, không cho cập nhật (Thêm,xóa,sửa) cho đến khi thao tác cập nhật trước đó thực hiện xong.

Ngoài ra, do thiết kế đơn giản và không kiểm tra ràng buộc dữ liệu nên loại Storage Engine này dễ bị hỏng chỉ mục và dễ bị Crash. Đây là cơn ác mộng của các webmaster khi table Crash là table có dung lượng lớn, khi phục hồi rất lâu và hồi hộp

2. InnoDB trong MySQL

Đây là kiểu Storage Engine mới hơn MyISAM. Storage Engine này không hỗ trợ Full Text Index như MyISAM (Tin mừng là sắp có hỗ trợ ở các phiên bản mới, hiện tại đã có beta rồi ) nhưng hỗ trợ quan hệ giữa các bảng (Khóa ngoại). Do đó, kiểu Storage này kiểm tra tính toàn vẹn dữ liệu và ràng buộc rất cao => Khó sảy ra tình trạng hỏng chỉ mục và Crash như MyISAM.

Ngoài ra, kiểu Storage Engine này hoạt động theo cơ chế Row Level Locking nên khi cập nhật (Thêm,xóa,sửa) 1 bảng thì chỉ có bản ghi đang bị thao tác bị khóa mà thôi, các hoạt động khác trên table này vẫn diễn ra bình thường.

Vì những tính chất trên, kiểu Storage Engine này thích hợp sử dụng cho Ngân hàng và các trang web có tần suất cập nhật dữ liệu cao như Mạng xã hội, diễn đàn.

3 . Chuyển đổi từ MyISAM đến InnoDB
Ở đây tôi lấy một ví dụ phổ biến nhất hiên nay là các diễn đàn xenforo . và rất nhiều các bạn hiện nay đang dùng xenforo gặp phải

Mặc định xenforo khi cài đặt sẽ lựa chọn Storage Engine là innoDB trong database . Với các ưu điểm của nó và đây là lựa chọn khôn ngoan của mã nguồn xenforo . Khác với VBB hiện nay vẫn sử dụng MyISAM.

Nhưng hầu hết các hostting việt nam hiện nay không kích hoạt chế độ innoDB , do vậy mà khi các bạn cài đặt thì xenforo sẽ nhận chế độ MyISAM . Thật là phiền phức đây . Lý do cũng là lúc bắt đầu sử dụng xenforo các bạn không để ý cái khuyến cáo của người ta là mysql server cần hỗ trợ innoDB . May mắn là ngay từ đầu diễn đàn của tôi dã dùng innoDB vì tôi đã biết được điều này :)

Để chắc chắn xem mysql trên hosting của các bạn có hỗ trợ innoDB hay không , đơn giản nhất là các bạn vào myphpadmin và vào mục Engines ở cuối để xem danh sách các Storage Engine được hỗ trợ

img
Đây là danh sách các Engines trên MYSQL server của tôi sử dụng với Percona server / Percona-XtraDB​

Nếu thấy mysql server có hỗ trợ innoDB thì chúng ta bắt đầu chuyển đổi cho xenforo của các bạn khi đã lỡ dùng MyISAM mất rồi
Vào mục
SQL và Copy nội dung dưới đây cho vào query box rồi chọn GO

SET FOREIGN_KEY_CHECKS = 0;

ALTER TABLE xf_addon ENGINE=InnoDB;

ALTER TABLE xf_admin ENGINE=InnoDB;

ALTER TABLE xf_admin_log ENGINE=InnoDB;

ALTER TABLE xf_admin_navigation ENGINE=InnoDB;

ALTER TABLE xf_admin_permission ENGINE=InnoDB;

ALTER TABLE xf_admin_permission_entry ENGINE=InnoDB;

ALTER TABLE xf_admin_search_type ENGINE=InnoDB;

ALTER TABLE xf_admin_template ENGINE=InnoDB;

ALTER TABLE xf_admin_template_compiled ENGINE=InnoDB;

ALTER TABLE xf_admin_template_include ENGINE=InnoDB;

ALTER TABLE xf_admin_template_phrase ENGINE=InnoDB;

ALTER TABLE xf_attachment ENGINE=InnoDB;

ALTER TABLE xf_attachment_data ENGINE=InnoDB;

ALTER TABLE xf_ban_email ENGINE=InnoDB;

ALTER TABLE xf_bb_code_media_site ENGINE=InnoDB;

ALTER TABLE xf_captcha_log ENGINE=InnoDB;

ALTER TABLE xf_captcha_question ENGINE=InnoDB;

ALTER TABLE xf_code_event ENGINE=InnoDB;

ALTER TABLE xf_code_event_listener ENGINE=InnoDB;

ALTER TABLE xf_content_type ENGINE=InnoDB;

ALTER TABLE xf_content_type_field ENGINE=InnoDB;

ALTER TABLE xf_conversation_master ENGINE=InnoDB;

ALTER TABLE xf_conversation_message ENGINE=InnoDB;

ALTER TABLE xf_conversation_recipient ENGINE=InnoDB;

ALTER TABLE xf_conversation_user ENGINE=InnoDB;

ALTER TABLE xf_cron_entry ENGINE=InnoDB;

ALTER TABLE xf_data_registry ENGINE=InnoDB;

ALTER TABLE xf_deletion_log ENGINE=InnoDB;

ALTER TABLE xf_email_template ENGINE=InnoDB;

ALTER TABLE xf_email_template_compiled ENGINE=InnoDB;

ALTER TABLE xf_email_template_phrase ENGINE=InnoDB;

ALTER TABLE xf_error_log ENGINE=InnoDB;

ALTER TABLE xf_feed ENGINE=InnoDB;

ALTER TABLE xf_feed_log ENGINE=InnoDB;

ALTER TABLE xf_flood_check ENGINE=InnoDB;

ALTER TABLE xf_forum ENGINE=InnoDB;

ALTER TABLE xf_forum_prefix ENGINE=InnoDB;

ALTER TABLE xf_forum_read ENGINE=InnoDB;

ALTER TABLE xf_ip ENGINE=InnoDB;

ALTER TABLE xf_ip_match ENGINE=InnoDB;

ALTER TABLE xf_language ENGINE=InnoDB;

ALTER TABLE xf_liked_content ENGINE=InnoDB;

ALTER TABLE xf_link_forum ENGINE=InnoDB;

ALTER TABLE xf_login_attempt ENGINE=InnoDB;

ALTER TABLE xf_moderation_queue ENGINE=InnoDB;

ALTER TABLE xf_moderator ENGINE=InnoDB;

ALTER TABLE xf_moderator_content ENGINE=InnoDB;

ALTER TABLE xf_moderator_log ENGINE=InnoDB;

ALTER TABLE xf_news_feed ENGINE=InnoDB;

ALTER TABLE xf_node ENGINE=InnoDB;

ALTER TABLE xf_node_type ENGINE=InnoDB;

ALTER TABLE xf_notice ENGINE=InnoDB;

ALTER TABLE xf_notice_dismissed ENGINE=InnoDB;

ALTER TABLE xf_option ENGINE=InnoDB;

ALTER TABLE xf_option_group ENGINE=InnoDB;

ALTER TABLE xf_option_group_relation ENGINE=InnoDB;

ALTER TABLE xf_page ENGINE=InnoDB;

ALTER TABLE xf_permission ENGINE=InnoDB;

ALTER TABLE xf_permission_cache_content ENGINE=InnoDB;

ALTER TABLE xf_permission_cache_content_type ENGINE=InnoDB;

ALTER TABLE xf_permission_cache_global_group ENGINE=InnoDB;

ALTER TABLE xf_permission_combination ENGINE=InnoDB;

ALTER TABLE xf_permission_combination_user_group ENGINE=InnoDB;

ALTER TABLE xf_permission_entry ENGINE=InnoDB;

ALTER TABLE xf_permission_entry_content ENGINE=InnoDB;

ALTER TABLE xf_permission_group ENGINE=InnoDB;

ALTER TABLE xf_permission_interface_group ENGINE=InnoDB;

ALTER TABLE xf_phrase ENGINE=InnoDB;

ALTER TABLE xf_phrase_compiled ENGINE=InnoDB;

ALTER TABLE xf_phrase_map ENGINE=InnoDB;

ALTER TABLE xf_poll ENGINE=InnoDB;

ALTER TABLE xf_poll_response ENGINE=InnoDB;

ALTER TABLE xf_poll_vote ENGINE=InnoDB;

ALTER TABLE xf_post ENGINE=InnoDB;

ALTER TABLE xf_profile_post ENGINE=InnoDB;

ALTER TABLE xf_profile_post_comment ENGINE=InnoDB;

ALTER TABLE xf_report ENGINE=InnoDB;

ALTER TABLE xf_report_comment ENGINE=InnoDB;

ALTER TABLE xf_route_prefix ENGINE=InnoDB;

ALTER TABLE xf_search ENGINE=InnoDB;

ALTER TABLE xf_smilie ENGINE=InnoDB;

ALTER TABLE xf_spam_cleaner_log ENGINE=InnoDB;

ALTER TABLE xf_stats_daily ENGINE=InnoDB;

ALTER TABLE xf_style ENGINE=InnoDB;

ALTER TABLE xf_style_property ENGINE=InnoDB;

ALTER TABLE xf_style_property_definition ENGINE=InnoDB;

ALTER TABLE xf_style_property_group ENGINE=InnoDB;

ALTER TABLE xf_template ENGINE=InnoDB;

ALTER TABLE xf_template_compiled ENGINE=InnoDB;

ALTER TABLE xf_template_include ENGINE=InnoDB;

ALTER TABLE xf_template_map ENGINE=InnoDB;

ALTER TABLE xf_template_phrase ENGINE=InnoDB;

ALTER TABLE xf_thread ENGINE=InnoDB;

ALTER TABLE xf_thread_prefix ENGINE=InnoDB;

ALTER TABLE xf_thread_prefix_group ENGINE=InnoDB;

ALTER TABLE xf_thread_read ENGINE=InnoDB;

ALTER TABLE xf_thread_redirect ENGINE=InnoDB;

ALTER TABLE xf_thread_user_post ENGINE=InnoDB;

ALTER TABLE xf_thread_watch ENGINE=InnoDB;

ALTER TABLE xf_trophy ENGINE=InnoDB;

ALTER TABLE xf_trophy_user_title ENGINE=InnoDB;

ALTER TABLE xf_upgrade_log ENGINE=InnoDB;

ALTER TABLE xf_user ENGINE=InnoDB;

ALTER TABLE xf_user_alert ENGINE=InnoDB;

ALTER TABLE xf_user_alert_optout ENGINE=InnoDB;

ALTER TABLE xf_user_authenticate ENGINE=InnoDB;

ALTER TABLE xf_user_ban ENGINE=InnoDB;

ALTER TABLE xf_user_confirmation ENGINE=InnoDB;

ALTER TABLE xf_user_external_auth ENGINE=InnoDB;

ALTER TABLE xf_user_field ENGINE=InnoDB;

ALTER TABLE xf_user_field_value ENGINE=InnoDB;

ALTER TABLE xf_user_follow ENGINE=InnoDB;

ALTER TABLE xf_user_group ENGINE=InnoDB;

ALTER TABLE xf_user_group_change ENGINE=InnoDB;

ALTER TABLE xf_user_group_promotion ENGINE=InnoDB;

ALTER TABLE xf_user_group_promotion_log ENGINE=InnoDB;

ALTER TABLE xf_user_group_relation ENGINE=InnoDB;

ALTER TABLE xf_user_ignored ENGINE=InnoDB;

ALTER TABLE xf_user_news_feed_cache ENGINE=InnoDB;

ALTER TABLE xf_user_option ENGINE=InnoDB;

ALTER TABLE xf_user_privacy ENGINE=InnoDB;

ALTER TABLE xf_user_profile ENGINE=InnoDB;

ALTER TABLE xf_user_status ENGINE=InnoDB;

ALTER TABLE xf_user_trophy ENGINE=InnoDB;

ALTER TABLE xf_user_upgrade ENGINE=InnoDB;

ALTER TABLE xf_user_upgrade_active ENGINE=InnoDB;

ALTER TABLE xf_user_upgrade_expired ENGINE=InnoDB;

ALTER TABLE xf_user_upgrade_log ENGINE=InnoDB;

ALTER TABLE xf_warning ENGINE=InnoDB;

ALTER TABLE xf_warning_action ENGINE=InnoDB;

ALTER TABLE xf_warning_action_trigger ENGINE=InnoDB;

ALTER TABLE xf_warning_definition ENGINE=InnoDB;

SET FOREIGN_KEY_CHECKS = 1;

Copy code


Chú ý nếu database của các bạn lớn thì hãy copy từng dòng để thực hiện nếu không sẽ rất dễ gây ra hiện tượng time out .
Hãy cẩn thận backup database và off diễn đàn trước khi làm

img

Có một số lưu ý sau
Trong xenforo không phải tất cả các bảng đều sử dụng innoDB , do vậy những query kia đã được lấy ra từ các bản cần chuyển thành innoDB , còn những table còn lại hãy cứ để là MyiSAM cho đúng với mặc định của xenforo vì họ đã tính toán để tối ưu chúng rồi
Ngoài ra có một vài bảng sử dụng ENGINE là MEMORY như xf_session_activity , xf_thread_view .. các bạn hãy để mặc định nhé

Cần biết thêm về MEMORY trong MySQL

Đây là kiểu Storage Engine được lưu trữ dữ liệu trực tiếp lên RAM nên tốc độ truy xuất và cập nhật rất nhanh. Vì thế, nó được dùng làm các table chứa dữ liệu tạm, chứa các phiên làm việc của user...

Khi khởi động lại dịch vụ MySQL thì dữ liệu trên bảng có Storage Engine là MEMORY sẽ mất hết dữ liệu. Chính vì thế nên khi các bạn khởi động lại mysqld trên VPS hay Server thì sẽ thấy số người online = 0
MEMORY sử dụng cơ chế table-level locking như MyISAM.

Dung lượng của 1 bảng Storage Engine dạng MEMORY tối đa là bao nhiêu ?
Nó phụ thuộc vào cấu hình thông số max_heap_table_size trong file my.cnf, mặc định 1 bảng kiểu MEMORY có dung lượng tối đa là 16MB. Nếu vượt quá bạn sẽ nhận được lỗi: Table xyz is full.
Chúc các bạn thành công

Cuối cùng khi vào phpmyadmin kiểm tra lại để xem các table bên trên đã được chuyển sang innoDB chưa nhé
img
Thanh công cụ
Lên trênTổng số bình luận 1
Chia sẻ bài viết đến bạn bè
Chia sẻ:SMS Google Zing Facebook Twitter
Link:
BBcode:
Từ Khoá:

xem Mysql Storage Engine - Chuyển Đổi Myisam Đến Innodb Trong Xenforo cuc hay

,

tải Mysql Storage Engine - Chuyển Đổi Myisam Đến Innodb Trong Xenforo mới

,Mysql Storage Engine - Chuyển Đổi Myisam Đến Innodb Trong Xenforo hay nhấtđọc Mysql Storage Engine - Chuyển Đổi Myisam Đến Innodb Trong Xenforo,Mysql Storage Engine - Chuyển Đổi Myisam Đến Innodb Trong Xenforo
Tìm kiếm diễn đàn:
Ai đang ở đây:
1 khách