Saya telah menyiapkan server contoh mikro di EC2 berdasarkan apa yang saya baca di sini
server mysql sering gagal dan untuk ketiga kalinya server mysql hilang. Log hanya menunjukkan
120423 09:13:38 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
120423 09:14:27 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120423 9:14:27 [Note] Plugin 'FEDERATED' is disabled.
120423 9:14:27 InnoDB: The InnoDB memory heap is disabled
120423 9:14:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120423 9:14:27 InnoDB: Compressed tables use zlib 1.2.3
120423 9:14:27 InnoDB: Using Linux native AIO
120423 9:14:27 InnoDB: Initializing buffer pool, size = 512.0M
InnoDB: mmap(549453824 bytes) failed; errno 12
120423 9:14:27 InnoDB: Completed initialization of buffer pool
120423 9:14:27 InnoDB: Fatal error: cannot allocate memory for the buffer pool
120423 9:14:27 [ERROR] Plugin 'InnoDB' init function returned error.
120423 9:14:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120423 9:14:27 [ERROR] Unknown/unsupported storage engine: InnoDB
120423 9:14:27 [ERROR] Aborting
Apa sebenarnya failed; errno 12
? Dan bagaimana saya bisa memberi lebih banyak ruang / memori atau apa pun yang diperlukan untuk memperbaikinya.
Saya memperbaikinya setiap kali dengan me-reboot seluruh sistem dan menghapus semua log dan memulai ulang server mysql. Tapi saya tahu ada yang salah dengan konfigurasi saya.
Juga my.cnf saya seperti di bawah ini:
[mysqld]
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
# max_allowed_packet=500M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
innodb_buffer_pool_size = 512M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
mysql
amazon-ec2
saya ragu
sumber
sumber
Jawaban:
Saya menemui masalah yang sama ketika saya mencoba menjalankan wordpress di instance mikro saya tanpa RDS.
Menambahkan halaman Swap memecahkan masalah bagi saya.
Anda dapat mengikuti langkah-langkah di bawah ini untuk mengatur ruang swap.
Jika masih tidak berhasil untuk Anda, pertimbangkan untuk menggunakan layanan RDS.
===============================================
Saya menyalin konten blog sebagai catatan. Penghargaan diberikan kepada penulis blog yang diragukan :
Ruang Swap Instans Mikro Amazon EC2 - Linux
Saya memiliki instance Amazon EC2 Linux Micro. Karena instans Mikro hanya memiliki memori 613MB, MySQL terkadang mengalami error. Setelah pencarian yang lama tentang MySQL, Micro Instance dan Memory Managment, saya menemukan bahwa tidak ada ruang SWAP default untuk instance Micro. Jadi, jika Anda ingin menghindari crash, Anda mungkin perlu menyiapkan ruang swap untuk instance mikro Anda. Sebenarnya performa bijaksana lebih baik untuk mengaktifkan swap.
Langkah-langkah di bawah ini menunjukkan cara membuat ruang swap untuk instans Mikro Anda. Saya berasumsi Anda memiliki Akun AWS dengan instans Mikro berjalan.
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile
/swapfile swap swap defaults 0 0
ke/etc/fstab
Langkah 4 diperlukan jika Anda ingin mengaktifkan file swap secara otomatis setelah setiap reboot.
Beberapa perintah berguna yang terkait dengan ruang SWAP:
Referensi:
sumber
Saya mengalami masalah ini juga pada instans mikro Amazon EC2. Saya mencoba mengurangi penggunaan memori inno_db dengan menambahkan yang berikut ini ke
/etc/my.cnf
Itu tidak berhasil, saya mencoba menurunkannya ke 16M dan masih tidak berhasil. Kemudian saya menyadari bahwa instance tersebut pada dasarnya tidak memiliki memori kosong. Jadi saya mencoba memulai ulang apache
Dan semuanya bekerja dengan baik. Mungkin solusi lain adalah mengkonfigurasi apache agar tidak memakan begitu banyak memori.
sumber
Sepertinya Anda meminta memori 128M untuk innodb_buffer_pool_size di file my.cfg yang Anda tampilkan di posting, tetapi MySQL mengira Anda meminta memori 512M :
Beberapa baris ke bawah, pesan kesalahan memberi tahu Anda MySQL tidak akan mulai karena tidak dapat mencadangkan cukup memori (512M) untuk kumpulan buffer InnoDB:
Itu menimbulkan tiga pertanyaan:
Anda bisa menjawab 1.
Untuk 2., ada beberapa tempat file opsi MySQL dapat ditemukan. Opsi penggantian file yang ditemukan selanjutnya ditentukan dalam file yang ditemukan sebelumnya. Lihat
http://dev.mysql.com/doc/refman/5.5/en/option-files.html
Masalah 3. dapat terjadi karena kondisi memori habis yang terjadi beberapa saat setelah startup. Anda harus melihat indikasi itu lebih jauh di log jika itu masalahnya.
Terakhir, tetapi agak tidak terkait, apakah Anda menggunakan instans yang didukung EBS? Itu umumnya sangat disarankan untuk server database (sebenarnya, untuk contoh apa pun yang melarang keadaan khusus). Untuk lebih lanjut tentang itu, lihat
https://stackoverflow.com/a/3630707/141172
sumber
Bagi saya, masalah ini telah diperbaiki dengan menambahkan volume swap ke instans EC2 saya. Layanan saya hanya menghabiskan semua memori di kotak, dan akan macet. Bukan sesuatu yang biasa saya lakukan, menjadi admin RedHat / CentOS selama bertahun-tahun - Anaconda melakukan BANYAK pekerjaan yang tidak dilakukan oleh instance Ubuntu EC2 gratis.
Saya cukup membuat volume 2Gb melalui konsol web, melampirkannya ke instance saya, dan melakukan "mkswap / dev / [apa saja]", mengedit / etc / fstab, dan kerusakan berhenti.
Instance ini TIDAK diinstal seperti penginstalan OS berbasis media yang biasa dilakukan sebagian besar dari kita - itu dilucuti tanpa paket, tidak ada sistem file yang tepat, dan hal-hal seperti AppArmor, yang menyebabkan semua jenis masalah jika Anda tidak menyadarinya dan / atau tidak tahu cara mengkonfigurasinya.
sumber
Masalahnya adalah server tidak memiliki cukup memori untuk dialokasikan untuk proses MySQL. Ada beberapa solusi untuk masalah ini.
(1) Tingkatkan RAM fisik. Menambahkan 1GB RAM tambahan akan menyelesaikan masalah. (2) Alokasikan ruang SWAP. Instans VPS Digital Ocean tidak dikonfigurasi untuk menggunakan ruang swap secara default. Dengan mengalokasikan 512MB ruang swap, kami dapat mengatasi masalah ini. Untuk menambahkan ruang swap ke server Anda, ikuti langkah-langkah berikut:
Kurangi ukuran ukuran kumpulan buffer MySQL
Periksa juga Ruang Disk Anda. Pastikan Anda memiliki cukup ruang.
sumber
JAWABAN MUDAH:
JAWABAN RINCI:
Ini adalah pertanyaan penting terutama bagi orang yang menggunakan VPS yang sangat kecil, katakanlah RAM 1GB atau kurang. Jika MySQL tidak berfungsi, mungkin ada masalah dengan konfigurasi server Anda (Apache | nginx) atau konfigurasi MySQL. Serangan DOS dapat menyebabkan peningkatan penggunaan sumber daya sistem (lihat gambar). Hasil akhirnya adalah proses MySQL dimatikan oleh Kernel. Untuk solusi jangka panjang harus melihat mengoptimalkan konfigurasi Apache atau MySQL Anda.
Ada beberapa diskusi lain Stack Overflow topik-topik tersebut serta manual MySQL dan Blog Percona:
Manual MySQL - Bagaimana MySQL Menggunakan Memori:
https://dev.mysql.com/doc/refman/8.0/en/memory-use.html
Percona - Praktik Terbaik untuk Mengonfigurasi Penggunaan Memori MySQL yang Optimal:
https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/
Cara Mengoptimalkan Kinerja MySQL Menggunakan MySQLTuner:
https://www.linode.com/docs/databases/mysql/how-to-optimize-mysql-performance-using-mysqltuner/
Konfigurasi Penggunaan Memori Apache:
/server/254436/apache-memory-usage-optimization
Manual Apache tentang Penyetelan Kinerja:
https://httpd.apache.org/docs/2.4/misc/perf-tuning.html
Tuning Apache Server:
https://www.linode.com/docs/web-servers/apache-tips-and-tricks/tuning-your-apache-server/
Namun, sehubungan dengan pertanyaan awal Anda, ya, Anda dapat membuat skrip solusi sementara yang memeriksa apakah layanan MySQL sudah dimuat dan aktif dan akan memulai ulang MySQL jika tidak dimuat dan aktif.
Anda tidak menyebutkan sistem operasi apa yang Anda gunakan. Itu akan membantu memberi Anda perintah khusus. Saya akan memberi Anda contoh untuk CentOS linux.
Lihatlah keluaran perintah berikut
systemctl status mysql
. Anda dapat melihat di bagian atas bahwa layanan dimuat dan aktif .Jika layanan tidak dimuat, maka perintah seperti:
akan melakukan trik memulai kembali proses. Anda bisa mengatakan bahwa:
Namun, jika mysql dimuat , tetapi layanan tidak aktif , cron Anda tidak akan melakukan apa pun. Jadi, Anda harus menggunakan perintah yang lebih detail seperti:
* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld
Dalam kasus ini, jika layanan dimuat tetapi tidak aktif seperti status bahwa serangan DOS dapat meninggalkan layanan mysql Anda, perintah juga akan memulai ulang mysql. Menggunakan
--quiet
bendera hanya menentukan perintah hanya untuk mengembalikan kode status, bukan menampilkan apa pun ke layar. Jika Anda mengabaikan--quiet
flag, Anda akan melihat keluaran statusactive
atauinactive
.Anda juga dapat membuat beberapa ruang swap untuk menambahkan lebih banyak sumber daya RAM yang tersedia ke server Anda seperti:
sumber
Gunakan salah satu dari solusi berikut ini:
Tingkatkan RAM fisik. Menambahkan 1GB RAM tambahan akan menyelesaikan masalah.
Alokasikan ruang SWAP dengan menggunakan perubahan konfigurasi di bawah ini:
config
sumber