MySQL mungkin masih belum mencatat apa-apa, karena apa yang mungkin terjadi adalah bahwa ia sedang dibunuh oleh sistem karena tekanan memori sistem dari anak-anak apache. Seharusnya ada jejak dari ini di / var / log / syslog.
MySQL harus mencoba me-restart sendiri dalam crash atau pemutusan paksa, tetapi kecuali jika tersedia memori yang cukup, itu tidak bisa melakukan itu ... dan kegagalan kedua ini tidak dilihat oleh mysqld_safe sebagai "crash" tetapi lebih sebagai "penolakan untuk mulai, "jadi itu tidak akan terus mencoba. Upaya restart yang gagal sering disalahartikan oleh admin sebagai "crash," karena sifat kegagalan asli tersembunyi di balik pesan yang mudah diabaikan dalam log kesalahan MySQL:
mysqld_safe Number of processes running now: 0
Lihat InnoDB Crash Post Mortem untuk keadaan yang saya kira mirip dengan milik Anda.
Jawaban yang tampaknya sederhana untuk "mengapa" adalah bahwa antara Apache dan MySQL, beban yang Anda miliki, dan konfigurasi Anda saat ini, Anda tidak memiliki cukup memori pada mesin, dan ada beberapa titik kritis terkait dengan beban lalu lintas yang membawa kondisi ini keluar .
Apache melayani setiap permintaan browser bersamaan dari proses anak, sehingga dari jumlah koneksi bersamaan yang meningkat, jumlah anak akan meningkat. Pertama-tama Anda perlu membatasi nilai ini di konfigurasi apache sehingga Anda dapat memahami apa yang sebenarnya menyebabkan peningkatan koneksi bersamaan ... apakah ini hanya lonjakan lalu lintas yang berat namun sah? Semacam penolakan layanan? DB kueri yang menunda permintaan karena berjalan terlalu lama? Sesuatu perlu dioptimalkan?
http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients
Membatasi proses Apache secara bersamaan harus membantu mencegah hal ini, tetapi untuk menjadi jelas, itu naif untuk berpikir bahwa ini adalah solusi lengkap, jadi saya tidak ingin menyiratkan hal itu. Setelah proses dibatasi pada tingkat yang masuk akal atau setidaknya lebih aman, Anda dapat melanjutkan dengan mengidentifikasi apa yang sebenarnya terjadi. (Ada kontrol pengekangan lainnya di Apache, tapi itu bukan bidang keahlian saya.)
"Praktik terbaik" tentu saja menjalankan database Anda pada perangkat keras yang berbeda sehingga aplikasi tidak dapat membunuhnya. Meskipun tampaknya lebih efisien, di permukaan, untuk "memaksimalkan pemanfaatan" dari satu mesin dengan membagikannya, ini adalah ekonomi yang salah. Mayoritas memori yang digunakan oleh MySQL, dalam beban kerja yang khas, dialokasikan pada waktu startup, dan ditahan selama MySQL Server berjalan. Tuntutan pada CPU cenderung berbagi waktu puncak untuk MySQL dan Apache, karena mereka pada akhirnya melayani beban yang sama. Anda mungkin sebenarnya lebih baik dengan dua mesin m1.large daripada m1.xlarge tunggal, dan biayanya akan sama karena yang lebih kecil persis setengah dari harga yang lebih besar ... bahkan jika Anda sudah membayar di muka untuk diskon tambahan, perubahan ini dapat dilakukan .
dmesg
membantu?