Jadi saya cukup baru dalam menyetel InnoDB. Saya perlahan-lahan mengubah tabel (jika perlu) dari MyIsam ke InnoDB. Saya memiliki sekitar 100MB di innodb, jadi saya meningkatkan innodb_buffer_pool_size
variabel menjadi 128MB:
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
Ketika saya pergi untuk mengubah innodb_log_file_size
nilai (contoh my.cnf di halaman konfigurasi innodb mysql berkomentar untuk mengubah ukuran file log menjadi 25% dari ukuran buffer. Jadi sekarang my.cnf saya terlihat seperti ini:
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
Ketika saya me-restart server, saya mendapatkan kesalahan ini:
110216 9:48:41 InnoDB: Menginisialisasi kumpulan buffer, ukuran = 128.0M
110216 9:48:41 InnoDB: Menyelesaikan inisialisasi pool buffer
InnoDB: Kesalahan: file log ./ib_logfile0 berukuran berbeda 0 5242880 byte
InnoDB: dari yang ditentukan dalam file .cnf 0 33554432 byte!
110216 9:48:41 [ERROR] Fungsi init 'InnoDB' Plugin mengembalikan kesalahan.
110216 9:48:41 [GALAT] Plugin 'InnoDB' pendaftaran sebagai MESIN PENYIMPANAN gagal.
Jadi pertanyaan saya: Apakah aman untuk menghapus log_files lama, atau apakah ada metode lain untuk mengubah innodb_log_file_size
variabel?
Jawaban:
Ya aman untuk menghapus file log setelah mysqld telah dimatikan
Sehubungan dengan ini, lakukan saja langkah-langkah berikut:
Memulai mysqld akan membuat ulang
ib_logfile0
danib_logfile1
Cobalah !!!
UPDATE 2011-10-20 16:40 EDT
Itu bersihkan semua data di InnoDB Buffer Pool sebelum mengulang File Log, Anda harus mengatur opsi ini sekitar 1 jam sebelum shutdown:
Secara default, innodb_max_dirty_pages_pct adalah 75 (MySQL 5.5+) atau 90 (sebelum MySQL 5.5). Mengatur ini ke nol akan menjaga jumlah halaman kotor di bawah 1% dari Pool Buffer InnoDB. Pertunjukan
service mysql stop
tetap melakukan ini. Selain itu, shutdown akan menyelesaikan semua item yang tersisa di redo log. Untuk mempertahankan opsi ini, tambahkan saja ke /etc/my.cnf:UPDATE 2013-04-19 16:16 EDT
Saya memperbarui jawaban saya sedikit lebih banyak dengan innodb_fast_shutdown karena saya digunakan untuk me-restart mysql dan menghentikan mysql untuk melakukan ini. Sekarang, satu langkah ini sangat penting karena setiap transaksi yang tidak berkomitmen dapat memiliki bagian bergerak lainnya di dalam dan di luar Log Transaksi InnoDB ( Lihat Infrastruktur InnoDB ).
Harap dicatat bahwa pengaturan innodb_fast_shutdown ke 2 akan membersihkan log juga, tetapi lebih banyak bagian yang bergerak masih ada dan dipilih pada Crash Recovery selama startup mysqld. Pengaturan 0 adalah yang terbaik.
sumber
SET GLOBAL innodb_fast_shutdown = 0;
. Ketika MySQL dimatikan, semua transaksi dialihkan dari semua bagian yang bergerak, termasuk redo log (ib_logfile0 dan ib_logfile1). Seseorang dapat menyimpannya. Saya belum menemukan masalah dengan log yang benar-benar memerah.Sebagai gantinya saya akan merekomendasikan metode resmi , yang saya buat di sini untuk kenyamanan:
sumber
innodb_buffer_pool_size
- cukup gantimy.cnf
(my.ini
) dan mulai ulang mysqld.innodb_log_file_size
kurang kritis. Jangan mengubahnya kecuali ada alasan untuk itu. Roland menyediakan langkah-langkahnya , tetapi satu aspek membuatku khawatir ... Aku tidak tahu apakah dua langkah pertama itu penting; sepertinya mereka bisa:set innodb_fast_shutdown = OFF
File log melacak bisnis yang belum selesai; "
innodb_fast_shutdown
" mengatakan untuk menangani hal-hal itu setelah memulai kembali. Jadi menghapus file dapat kehilangan info?Versi baru telah meningkatkan hal-hal: (lebih banyak diskusi di Komentar)
innodb_log_file_size
> 4GBinnodb_log_file_size
dapat diubah tanpa terlebih dahulu menghapus iblog *innodb_buffer_pool_size
Haruskah saya mengubah log_file_size?
Gunakan
GLOBAL STATUS
untuk menghitung jumlah menit sebelum siklus log.Jika banyak kurang dari 60 (menit), maka mungkin membantu untuk meningkatkan log_file_size. Jika lebih banyak, maka file-file log membuang-buang ruang disk. Itu "1 jam" agak sewenang-wenang, jadi jika Anda dekat dengan itu, jangan repot-repot mengubah log_file_size.
Biarkan
innodb_log_files_in_group
default 2.sumber
--skip-networking
sebagai tindakan pencegahan untuk mendapatkan perubahan menit-menit terakhir keluar dari jalan. Baris pertama Anda (atur innodb_fast_shutdown = OFF) menghilangkan itu. +1 !!!innodb_log_file_size
ditingkatkan untuk memungkinkan mengubahnya tanpa menghapus file iblog.Saat Anda masuk ke mysql ketik perintah-perintah itu:
Anda akan mendapatkan dua angka. Pertama Anda mendapatkan satu dan kemudian tunggu sebentar. Anda akan mendapatkan yang lain.
Katakan yang pertama adalah 3.456.718.123 dan yang kedua 4.098.873.134
Sekarang (4.098.873.134-3.856.718.123) * 60/1024/1024
Hasilnya adalah = 13.856 MB
Anda memiliki dua file log. Jadi bagilah dengan dua dan Anda akan mendapatkan nomor dekat 7.000 MB. Hanya untuk memastikan, atur ukuran file log Anda 8GB
sumber
Log File Size
di dba.stackexchange.com/questions/23189/… )chown mysql: mysql -R / etc / mysql / var / lib / mysql && cd / var / lib / mysql && rm -f ib_logfile * && service mysql restart || layanan restart mysql
Cobalah, dijamin akan berfungsi [diuji pada Debian 6]
sumber