Chính xác các tập tin iblog trong mysql là gì


15

Tôi muốn hiểu các tệp ibdata này vì chúng đóng vai trò quan trọng trong quy trình khôi phục sự cố. Tôi không thể tìm thấy tài nguyên thích hợp trên web cho việc này.

Câu trả lời:


17

ibdata1

Tệp ibdata1 là không gian bảng hệ thống cho cơ sở hạ tầng InnoDB.

Nó chứa một số lớp thông tin quan trọng cho InnoDB

  • Bảng dữ liệu trang
  • Bảng chỉ mục trang
  • Từ điển dữ liệu
  • Dữ liệu điều khiển MVCC
    • Hoàn tác không gian
    • Phân đoạn rollback
  • Bộ đệm ghi đôi (Các trang được viết trong nền để tránh bộ đệm của hệ điều hành)
  • Chèn bộ đệm (Thay đổi chỉ mục phụ)

Nhấn vào đây để xem một đại diện hình ảnh

Bạn có thể ly dị Trang dữ liệu và chỉ mục từ ibdata1 bằng cách bật innodb_file_per_table . Điều này sẽ khiến bất kỳ bảng InnoDB mới được tạo nào lưu trữ dữ liệu và trang chỉ mục trong một .ibdtệp bên ngoài .

Thí dụ

  • datadir là / var / lib / mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;, tạo ra /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table được bật, Trang dữ liệu / chỉ mục được lưu trữ trong /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table bị vô hiệu hóa, Trang dữ liệu / chỉ mục được lưu trữ trong ibdata1

Bất kể bảng InnoDB được lưu trữ ở đâu, chức năng của InnoDB yêu cầu tìm siêu dữ liệu của bảng và lưu trữ và truy xuất thông tin MVCC để hỗ trợ tuân thủ ACIDCách ly giao dịch .

Dưới đây là những bài viết trước đây của tôi về việc tách dữ liệu bảng và chỉ mục khỏi ibdata1

tập tin iblog (aka ib_logfile0, ib_logfile1)

Nếu bạn muốn biết những gì ib_logfile0ib_logfile1được dùng cho, chúng là Nhật ký làm lại của InnoDB. Chúng không bao giờ nên bị xóa hoặc thay đổi kích thước cho đến khi tắt máy hoàn toàn bình thường của mysqld . Nếu mysqld gặp sự cố, chỉ cần khởi động mysqld. Nó sẽ đọc qua ib_logfile0ib_logfile1để kiểm tra bất kỳ thay đổi dữ liệu nào không được đăng lên bộ đệm ghi kép ibdata1. Nó sẽ phát lại (làm lại) những thay đổi đó. Khi chúng được phát lại và lưu trữ, mysqld sẽ sẵn sàng cho các kết nối DB mới.


Làm thế nào không gian sẽ được giữ lại trong các tệp nhật ký này ...? Ý tôi là hỏi ... "đối với các giao dịch innodb mới, làm thế nào các tệp nhật ký tương tự được sử dụng nếu chúng được lấp đầy hoàn toàn ...."
Uday

Nhận xét trước đây của tôi là về các tệp ib_log ....
Uday

1
@ Uday Không gian sẽ không được giữ lại trên các tệp iblog cho đến khi logbuffer trống. Đó là một quy trình động, trong đó không gian nhật ký bị chiếm dụng và giải phóng dựa trên các thay đổi giao dịch bị đình trệ được ghi lại trong bộ đệm nhật ký. Các tệp nhật ký này bị chiếm dụng hoàn toàn, khi bạn thực hiện một số tải dữ liệu khổng lồ, dẫn đến lỗi Innodb ghi "InnoDB: vượt quá dung lượng nhóm nhật ký". Điều đó có nghĩa là kích thước tệp Nhật ký sẽ lớn hơn để thực hiện. Hy vọng lời giải thích của tôi đã xóa tan nghi ngờ của bạn.
Gopinath

innodb_file_per_table disabled, Data/Index Pages Stored in /var/lib/mysql/mydb/mytable.ibdinnodb_file_per_table enbled, Data/Index Pages Stored in ibdata1nên ngược lại, không nên?
rabudde

1
@rabudde Nó đã được sửa. Cám ơn bạn một lần nữa !!!
RolandoMySQLDBA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.