mysql tidak akan mulai setelah meningkatkan innodb_buffer_pool_size dan innodb_log_file_size

18

Saya mengikuti solusi ini di sini /programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 dan mencoba meningkatkan saya innodb_buffer_pool_sizeke 4G dan kemudian 1G (juga 1024M) di Selain ukuran file log, tetapi mysql tidak akan mulai dengan nilai-nilai itu. Jika saya memasukkannya kembali ke 512M mysql dimulai dengan baik.

Bagaimana saya bisa memecahkan masalah ini? Server saya adalah 16GB, dan menurut Webmin sysinfo:

Real memory 15.62 GB total, 3.13 GB used

Sementara itu saya menemukan log kesalahan juga:

120529 10:29:32 mysqld_safe mysqld dari file pid /var/run/mysqld/mysqld.pid berakhir

120529 10:29:33 mysqld_safe Memulai daemon mysqld dengan basis data dari / var / lib / mysql

120529 10:29:33 [Note] Plugin 'FEDERATED' dinonaktifkan.

120529 10:29:33 InnoDB: Tumpukan memori InnoDB dinonaktifkan

120529 10:29:33 InnoDB: Mutex dan rw_locks menggunakan builtin atom GCC

120529 10:29:33 InnoDB: Tabel terkompresi menggunakan zlib 1.2.3

120529 10:29:33 InnoDB: Menggunakan Linux asli AIO

120529 10:29:33 InnoDB: Menginisialisasi kumpulan buffer, ukuran = 1.0G

120529 10:29:33 InnoDB: Inisialisasi kolam buffer yang lengkap

InnoDB: Kesalahan: file log ./ib_logfile0 dengan ukuran yang berbeda 0 134217728 byte

InnoDB: dari yang ditentukan dalam file .cnf 0 268435456 bytes!

giorgio79
sumber
Tolong bagikan log kesalahan untuk itu ...
Abdul Manaf
Terima kasih, saya berhasil menemukannya. Saya pikir ini akan lebih mudah. Saya seharusnya juga menambahkan pada awalnya bahwa saya meningkatkan ukuran file log juga agar sesuai dengan peningkatan dalam buffer pool (saya memang menambahkan info ini sekarang).
giorgio79
Ok @ giorgio79 ...
Abdul Manaf
Cobalah untuk menghapus file log.
dezso
Apakah Anda menghapus ukuran file log terlebih dahulu? Apakah Anda membuang semua database terlebih dahulu? Harap tambahkan lebih banyak info tentang apa yang Anda lakukan sebenarnya?
ALH

Jawaban:

19

Dua jawaban yang diberikan dari @RickJames dan @drogart pada dasarnya adalah solusi. (+1 untuk masing-masing).

Langsung dari log kesalahan yang Anda tampilkan, dua baris terakhir mengatakan:

InnoDB: Kesalahan: file log ./ib_logfile0 dengan ukuran yang berbeda 0 134217728 byte

InnoDB: dari yang ditentukan dalam file .cnf 0 268435456 bytes! `

Pada titik itu, terbukti bahwa Anda menetapkan innodb_log_file_size ke 256M (268435456) my.cnfsementara Log Transaksi InnoDB ( ib_logfile0, ib_logfile1) masing-masing masing-masing 128M (134217728). Melihat kembali tautan ke jawaban StackOverflow saya di pertanyaan Anda, Anda harus melakukan yang berikut:

Langkah 01) Tambahkan ini ke my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

Langkah 02) Jalankan perintah ini di OS

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

Agar memiliki keyakinan pada apa yang terjadi, jalankan tail -fterhadap log kesalahan. Anda akan melihat pesan memberi tahu Anda ketika setiap file log innodb sedang dibuat.

RolandoMySQLDBA
sumber
Terima kasih, ya saya tidak menghapusnya terlebih dahulu. Hanya ingin melihat bagaimana perilaku mysql. Setelah melakukan langkah 3 memulai kembali bekerja.
giorgio79
1
Saya pikir seseorang seharusnya tidak menghapus file log, melainkan memindahkannya ke tempat lain, dan menghapusnya beberapa saat kemudian ketika Anda berhasil mengubah ukuran file log. Jika tidak, Anda akan berada dalam masalah jika MySQL macet sebelum Anda berlari service mysqld stop.
KajMagnus
4

Berdasarkan kesalahan dalam log, saya menduga Anda melakukan ini:

  • matikan mysql
  • mengedit my.cnf untuk mengubah ukuran file log innodb
  • mencoba memulai mysql (kemudian gagal)

Jika Anda mengubah ukuran file log, Anda harus menghapus file log yang lama. Innodb tidak akan mulai berhasil jika file yang ada tidak cocok dengan ukuran yang ditentukan dalam file konfigurasi. Jika Anda memindahkannya ke tempat lain, innodb akan membuat file log transaksi baru dengan ukuran yang benar ketika dimulai.

Saya akan merekomendasikan memindahkan file lama ke direktori lain daripada hanya menghapusnya, sampai server aktif dan berjalan dengan file log baru dan semuanya terlihat OK.

drogart
sumber
3

Buffer_pool harus diatur ke sekitar 70% dari RAM yang tersedia jika Anda menjalankan InnoDB saja.

Ukuran log tidak terlalu penting. Yang optimal adalah mengaturnya sehingga (Uptime * innodb_log_file_size / Innodb_os_log_written) kira - kira 3600 (1 jam).

Untuk mengubah ukuran log, seseorang harus

  1. matikan mysqld dengan bersih
  2. hapus nilai di my.cnf (my.ini)
  3. hapus file log
  4. retstart - file log baru akan dibangun kembali.
Rick James
sumber
Terima kasih, ya ini adalah jawaban yang benar juga. Saya hanya bisa menerima satu. +1 juga ini.
giorgio79
1

Mungkin juga ada beberapa masalah dalam nilai Anda yang disediakan untuk ukuran kolam penyangga . seperti itu terjadi dalam kasus saya ...

Ketika menambah atau mengurangi innodb_buffer_pool_size, operasi dilakukan dalam potongan. Ukuran bongkahan ditentukan oleh innodb_buffer_pool_chunk_sizeopsi konfigurasi, yang memiliki standar 128M. Untuk informasi lebih lanjut, lihat Mengkonfigurasi Ukuran Potongan Pool Buffer InnoDB .

Ukuran kolam penyangga harus selalu sama dengan atau kelipatan innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. Jika Anda mengonfigurasi innodb_buffer_pool_sizenilai yang tidak sama dengan atau kelipatan innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, ukuran kumpulan buffer secara otomatis disesuaikan dengan nilai yang sama dengan atau kelipatan innodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesyang tidak kurang dari ukuran kumpulan buffer yang ditentukan.

Dalam contoh, innodb_buffer_pool_sizediatur ke 8G, dan innodb_buffer_pool_instancesdiatur ke 16. innodb_buffer_pool_chunk_sizeadalah 128M, yang merupakan nilai default.

8G adalah innodb_buffer_pool_sizenilai yang valid karena 8G adalah kelipatan innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, yaitu 2G.

SHIVI
sumber