読んだ内容に基づいてEC2にmicroインスタンスサーバーをセットアップしました here
mysqlサーバーは頻繁に失敗し、mysqlサーバーが3回目には失われます。ログには
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
本当にfailed; errno 12
?そして、どうすればより多くのスペース/メモリ、またはこれを修正するために必要なものを提供できますか?.
システム全体を再起動し、すべてのログを削除してmysqlサーバーを再起動することにより、毎回これを修正します。しかし、私の構成に何か問題があることは知っています。
また、私の `my.cnf 'は以下のようなものです:
[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
RDSを使用せずにマイクロインスタンスでwordpressを実行しようとすると、同じ問題が発生しました。
スワップページを追加すると、問題が解決しました。
これに従って、スワップページをセットアップできます。
http://www.prowebdev.us/2012/05/Amazon-ec2-linux-micro-swap-space.html
それでも機能しない場合は、RDSサービスの使用を検討してください。
===============================================
ブログへのリンクが失敗する場合があります。レコード用に以下のコンテンツをコピーしました。クレジットはブログの著者に送られます Pedram Moubed :
Amazon EC2マイクロインスタンススワップスペース-Linux
Amazon EC2 Linux Microインスタンスがあります。 Microインスタンスのメモリは613MBしかないため、MySQLは時々クラッシュしました。 MySQL、Micro Instance、およびMemory Managmentを長時間検索した結果、Microインスタンス用のデフォルトのSWAPスペースがないことがわかりました。そのため、クラッシュを回避したい場合は、マイクロインスタンス用のスワップスペースをセットアップする必要があります。実際には、スワップを有効にするとパフォーマンスが向上します。
以下の手順は、Microインスタンスのスワップスペースを作成する方法を示しています。 Microインスタンスが実行されているAWSアカウントを持っていると思います。
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile
/swapfile swap swap defaults 0 0
から/etc/fstab
各リブート後にスワップファイルを自動的に有効にする場合は、手順4が必要です。
SWAPスペースに関連するいくつかの便利なコマンド:
$ swapon -s
$ free -k
$ swapoff -a
$ swapon -a
参照:
Amazon EC2 microインスタンスでもこの問題が発生しました。以下を/etc/my.cnf
に追加して、inno_dbのメモリ使用量を減らしてみました
innodb_buffer_pool_size = 64M
それはうまくいきませんでした。16Mに落としましたが、それでもうまくいきませんでした。その後、インスタンスの空きメモリが基本的にゼロであることに気付きました。だからApacheを再起動してみた
Sudoシステムhttpdの再起動 Sudoシステムmysqldの再起動
そして、すべてがうまくいきました。たぶん別の解決策は、どうにかしてそれほど多くのメモリを消費しないようにApacheを設定することです。
投稿で表示するmy.cfgファイル内のinnodb_buffer_pool_sizeに128Mのメモリを要求しているように見えますが、MySQLは要求していると考えています512Mのメモリ:
バッファプールの初期化、サイズ= 512.0M
数行下のエラーメッセージは、MySQLがInnoDBバッファープールに十分な(512M)メモリを予約できないために起動しないことを示しています。
致命的なエラー:バッファープールにメモリを割り当てることができません
それには3つの質問があります。
1と答えることができます。
2.に関しては、MySQLオプションファイルを配置できる場所がいくつかあります。その後に見つかったファイルは、以前に見つかったファイルで指定されたオプションをオーバーライドします。見る
http://dev.mysql.com/doc/refman/5.5/en/option-files.html
問題3は、起動後のある時点で発生するメモリ不足の状態が原因である可能性があります。それが事実である場合、ログにさらに戻ってその兆候が表示されるはずです。
最後に、多少関係ありませんが、EBSを使用したインスタンスを使用していますか?これは、一般的にデータベースサーバーに強くお勧めします(実際には、特別な状況がない限り)。詳細については
私にとって、この問題はEC2インスタンスにスワップボリュームを追加することで修正されました。私のサービスは単にボックスのすべてのメモリを消費し、クラッシュするでしょう。 RedHat/CentOSの管理者として何年もの間、私は慣れていませんでした。Anacondaは、無料のUbuntu EC2インスタンスではできない多くの作業を行っています。
Webコンソールで2Gbボリュームを作成し、インスタンスにアタッチし、「mkswap/dev/[whatever]」を実行し、/ etc/fstabを編集しただけで、クラッシュが停止しました。
これらのインスタンスは、私たちのほとんどが慣れているメディアベースのOSインストールのようにはインストールされません-パッケージ、適切なファイルシステム、およびAppArmorのようなものでむき出しになっています。および/またはそれを設定する方法がわからない。
簡単な回答:
* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld
詳細な回答:
これは特に、1GBのRAM以下の非常に小さなVPSを使用している人にとっては重要な質問です。MySQLがドロップアウトする場合、サーバー構成に問題がある可能性があります(Apache | nginx)またはMySQL構成。DOS攻撃により、システムリソースの使用量が急増する可能性があります(画像を参照)。最終結果は、MySQLプロセスがカーネルによってシャットダウンされることです。 。
これらのトピックの他に、MySQLのマニュアルとPerconaブログの他にも、いくつかの議論があります。
MySQLマニュアル-MySQLがメモリを使用する方法:
https://dev.mysql.com/doc/refman/8.0/en/memory-use.html
Percona-最適なMySQLメモリ使用量を設定するためのベストプラクティス:
https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/
MySQLTunerを使用してMySQLパフォーマンスを最適化する方法:
https://www.linode.com/docs/databases/mysql/how-to-optimize-mysql-performance-using-mysqltuner/
Apacheメモリ使用量の構成:
https://serverfault.com/questions/254436/Apache-memory-usage-optimization
パフォーマンスチューニングに関するApacheマニュアル:
https://httpd.Apache.org/docs/2.4/misc/perf-tuning.html
Apacheサーバーのチューニング:
https://www.linode.com/docs/web-servers/Apache-tips-and-tricks/tuning-your-Apache-server/
ただし、元の質問に関しては、はい、MySQLサービスがロードされアクティブであるかどうかをチェックし、ロードされていない場合はMySQLを再起動する一時的なソリューションをスクリプト化できます。
使用しているオペレーティングシステムについては言及しませんでした。これは、特定のコマンドを提供するのに役立ちます。 CentOS linuxの例を示します。
コマンドsystemctl status mysql
の次の出力を見てください。サービスがloadedおよびactiveであることが上部に表示されます。
[root@centos-mysql-demo ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2019-06-18 18:28:18 UTC; 924ms ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 3350 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 3273 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 3353 (mysqld)
CGroup: /system.slice/mysqld.service
└─3353 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
Jun 18 18:28:11 centos-mysql-demo systemd[1]: Starting MySQL Server...
Jun 18 18:28:18 centos-mysql-demo systemd[1]: Started MySQL Server.
サービスがロードされていない場合、次のようなコマンド:
systemctl status mysqld || systemctl restart mysqld
プロセスを再起動するトリックを行います。あなたはできなかったcron:
* * * * * systemctl status mysqld || systemctl restart mysqld
ただし、mysqlがloadedで、サービスがactiveではない場合、cronは何もしません。したがって、次のようなより詳細なコマンドを使用する必要があります。
* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld
この場合、サービスがloadedであるが、DOS攻撃がmysqlサービスを離れることができる状態のようなinactiveである場合、コマンドはmysqlも再起動します。 --quiet
フラグを使用すると、ステータスコードを返すためだけにコマンドが指定され、画面には何も出力されません。 --quiet
フラグを省略すると、active
またはinactive
のステータス出力が表示されます。
次のような利用可能なRAMリソースをサーバーに追加するために、いくつかのスワップスペースを作成することもできます。
Sudo dd if=/dev/zero of=/swapfile count=2096 bs=1MiB
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon --show
swapon --summary
free -h
次のソリューションのいずれかを使用します。
物理RAMを増やします。 1GBの追加RAMを追加すると、問題が解決します。
以下の設定変更を使用して、SWAPスペースを割り当てます。
config
dd if=/dev/zero of=/extraswap bs=1024 count=512M
mkswap /extraswap
swapon /extraswap
## Edit the /etc/fstab, and the following entry.
/extraswap none swap sw 0 0
問題は、サーバーにMySQLプロセスに割り当てるのに十分なメモリがないことです。この問題にはいくつかの解決策があります。
(1)物理RAMを増やします。追加の1GBを追加すると、RAMが問題を解決します。(2)SWAPスペースを割り当てます。DigitalOcean VPSインスタンスは、デフォルトでスワップスペースを使用するように構成されていません。この問題を解決するには、サーバーにスワップ領域を追加するには、次の手順に従ってください。
## As a root user, perform the following:
# dd if=/dev/zero of=/swap.dat bs=1024 count=512M
# mkswap /swap.dat
# swapon /swap.dat
## Edit the /etc/fstab, and the following entry.
/swap.dat none swap sw 0 0
MySQLバッファープールサイズのサイズを小さくする
## Edit /etc/my.cnf, and add the following line under the [mysqld] heading.
[mysqld]
innodb_buffer_pool_size=64M
また、ディスク容量を確認してください。十分なスペースがあることを確認してください。
df-h