mysql sẽ không bắt đầu sau khi tăng innodb_buffer_pool_size và innodb_log_file_size


18

Tôi làm theo giải pháp này ở đây /programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 và cố gắng tăng của tôi innodb_buffer_pool_sizetới 4G và sau 1G (còn 1024M) trong Ngoài kích thước tệp nhật ký, nhưng mysql sẽ không bắt đầu với các giá trị đó. Nếu tôi đặt nó trở lại 512M mysql bắt đầu tốt.

Làm sao tôi có thể giải quyết việc này? Máy chủ của tôi là 16 GB và theo Webmin sysinfo:

Real memory 15.62 GB total, 3.13 GB used

Trong khi đó tôi cũng tìm thấy nhật ký lỗi:

120529 10:29:32 mysqld_safe mysqld từ tệp pid /var/run/mysqld/mysqld.pid đã kết thúc

120529 10:29:33 mysqld_safe Bắt đầu trình nền mysqld với cơ sở dữ liệu từ / var / lib / mysql

120529 10:29:33 [Lưu ý] Plugin 'LIÊN KẾT' bị tắt.

120529 10:29:33 InnoDB: Heap bộ nhớ InnoDB bị vô hiệu hóa

120529 10:29:33 InnoDB: Mutex và rw_locks sử dụng các nguyên tử nguyên tử GCC

120529 10:29:33 InnoDB: Bảng nén sử dụng zlib 1.2.3

120529 10:29:33 InnoDB: Sử dụng AIO gốc Linux

120529 10:29:33 InnoDB: Đang khởi tạo vùng đệm, kích thước = 1.0G

120529 10:29:33 InnoDB: Đã hoàn thành khởi tạo vùng đệm

InnoDB: Lỗi: tệp nhật ký ./ib_logfile0 có kích thước khác nhau 0 134217728 byte

InnoDB: hơn được chỉ định trong tệp .cnf 0 268435456 byte!


Bạn có thể vui lòng chia sẻ nhật ký lỗi cho điều đó không ...
Abdul Manaf

Cảm ơn, tôi quản lý để tìm thấy nó. Tôi nghĩ rằng điều này sẽ dễ dàng hơn. Tôi cũng nên thêm vào ban đầu rằng tôi cũng tăng kích thước tệp nhật ký để phù hợp với mức tăng trong vùng đệm (tôi đã thêm thông tin này ngay bây giờ).
giorgio79

Ok @ giorgio79 ...
Abdul Manaf

Cố gắng xóa (các) tệp nhật ký.
dezso

Bạn đã xóa kích thước tệp nhật ký đầu tiên? bạn đã bỏ tất cả các cơ sở dữ liệu đầu tiên? Vui lòng thêm thông tin về những gì bạn đã làm chính xác?
ALH

Câu trả lời:


19

Hai câu trả lời được đưa ra từ @RickJames@drogart về cơ bản là các biện pháp khắc phục. (+1 cho mỗi cái).

Ngay từ nhật ký lỗi bạn trình bày, hai dòng cuối cùng nói:

InnoDB: Lỗi: tệp nhật ký ./ib_logfile0 có kích thước khác nhau 0 134217728 byte

InnoDB: hơn được chỉ định trong tệp .cnf 0 268435456 byte! `

Tại thời điểm đó, rõ ràng là bạn đặt innodb_log_file_size thành 256M (268435456) trong my.cnfkhi Nhật ký giao dịch InnoDB ( ib_logfile0, ib_logfile1) tương ứng là 128M (134217728). Nhìn lại liên kết đến câu trả lời StackOverflow của tôi trong câu hỏi của bạn, bạn phải làm như sau:

Bước 01) Thêm phần này vào my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

Bước 02) Chạy các lệnh này trong HĐH

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

Để có niềm tin vào những gì đang xảy ra, hãy chạy tail -fngược lại nhật ký lỗi. Bạn sẽ thấy thông báo cho bạn biết khi mỗi tệp nhật ký innodb đang được tạo.


Cảm ơn, vâng tôi đã không xóa chúng trước. Chỉ muốn xem cách hành xử của mysql. Sau khi thực hiện bước 3, khởi động lại làm việc.
giorgio79

1
Tôi nghĩ rằng người ta không nên xóa các tệp nhật ký, mà nên di chuyển chúng đi nơi khác và xóa chúng một lúc sau khi bạn đã thay đổi thành công kích thước tệp nhật ký. Nếu không, bạn sẽ gặp rắc rối nếu MySQL bị sập trước khi bạn chạy service mysqld stop.
KajMagnus

4

Dựa trên lỗi trong nhật ký, tôi đoán bạn đã làm điều này:

  • tắt mysql
  • chỉnh sửa my.cnf để thay đổi kích thước tệp nhật ký innodb
  • đã cố gắng khởi động mysql (sau đó thất bại)

Nếu bạn thay đổi kích thước tệp nhật ký, bạn cần xóa các tệp nhật ký cũ. Innodb sẽ không bắt đầu thành công nếu các tệp hiện có không khớp với kích thước được chỉ định trong tệp cấu hình. Nếu bạn di chuyển chúng đi nơi khác, innodb sẽ tạo các tệp nhật ký giao dịch mới có kích thước chính xác khi nó bắt đầu.

Tôi khuyên bạn nên chuyển các tệp cũ sang thư mục khác thay vì chỉ xóa chúng, cho đến khi máy chủ hoạt động và chạy với các tệp nhật ký mới và mọi thứ đều ổn.


3

Bộ đệm_pool nên được đặt thành khoảng 70% RAM khả dụng nếu bạn chỉ chạy InnoDB.

Kích thước nhật ký không quan trọng lắm. Tối ưu là đặt nó sao cho (Uptime * innodb_log_file_size / Innodb_os_log_written) là đại khái 3600 (1 giờ).

Để thay đổi kích thước nhật ký, người ta phải

  1. tắt mysqld sạch sẽ
  2. xóa giá trị trong my.cnf (my.ini)
  3. xóa các tập tin nhật ký
  4. khởi động lại - các tệp nhật ký mới sẽ được xây dựng lại.

Cảm ơn, có, đây là một câu trả lời đúng. Tôi chỉ có thể chấp nhận một mặc dù. + 1đ này cũng vậy.
giorgio79

1

Cũng có thể có một số vấn đề trong giá trị của bạn được cung cấp cho kích thước nhóm bộ đệm . giống như nó đã xảy ra trong trường hợp của tôi ...

Khi tăng hoặc giảm innodb_buffer_pool_size, thao tác được thực hiện theo khối. Kích thước khối được xác định bởi innodb_buffer_pool_chunk_sizetùy chọn cấu hình, có mặc định là 128M. Để biết thêm thông tin, hãy xem Định cấu hình Kích thước khối vùng đệm của InnoDB .

Kích thước nhóm bộ đệm phải luôn bằng hoặc bội số của innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. Nếu bạn định cấu hình innodb_buffer_pool_sizecho một giá trị không bằng hoặc bội số innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, kích thước nhóm bộ đệm sẽ tự động được điều chỉnh thành một giá trị bằng hoặc bội số củainnodb_buffer_pool_chunk_size * innodb_buffer_pool_instances không nhỏ hơn kích thước nhóm bộ đệm được chỉ định.

Trong ví dụ này, innodb_buffer_pool_sizeđược đặt thành 8G và innodb_buffer_pool_instancesđược đặt thành 16. innodb_buffer_pool_chunk_sizelà 128M, là giá trị mặc định.

8G là innodb_buffer_pool_sizegiá trị hợp lệ vì 8G là bội số của innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M2G.

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.