96

これに基づいてEC2にマイクロインスタンスサーバーがあります

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
4

7 に答える 7

163

RDS を使用せずにマイクロ インスタンスでワードプレスを実行しようとしたときに、同じ問題に遭遇しました。

スワップページを追加すると、問題が解決しました。

以下の手順に従って、スワップ領域をセットアップできます。

それでもうまくいかない場合は、RDS サービスの使用を検討してください。

===============================================

記録用にブログの内容をコピーしました。クレジットはブログの著者pmobedに送られます:

Amazon EC2 マイクロ インスタンス スワップ スペース - Linux

Amazon EC2 Linux Micro インスタンスがあります。マイクロ インスタンスのメモリは 613MB しかないため、MySQL はときどきクラッシュしました。MySQL、マイクロ インスタンス、およびメモリ管理について長い間検索した結果、マイクロ インスタンス用のデフォルトの SWAP スペースがないことがわかりました。したがって、クラッシュを回避したい場合は、マイクロ インスタンスのスワップ スペースをセットアップする必要がある場合があります。実際には、スワップを有効にした方がパフォーマンスが向上します。

以下の手順は、マイクロ インスタンスのスワップ スペースを作成する方法を示しています。マイクロ インスタンスが実行されている AWS アカウントをお持ちだと思います。

  1. 走るdd if=/dev/zero of=/swapfile bs=1M count=1024
  2. 走るmkswap /swapfile
  3. 走るswapon /swapfile
  4. /swapfile swap swap defaults 0 0この行をに追加します/etc/fstab

再起動するたびにスワップ ファイルを自動的に有効にする場合は、手順 4 が必要です。

SWAP スペースに関連する便利なコマンド:

$ swapon -s   
$ free -k

$ swapoff -a
$ swapon  -a

参考文献:

  1. http://www.thegeekstuff.com/2010/08/how-to-add-swap-space/
  2. http://cloudstory.in/2012/02/getting-the-best-out-of-amazon-ec2-micro-instances/
  3. http://cloudstory.in/2012/02/adding-swap-space-to-amazon-ec2-linux-micro-instance-to-increase-the-performance/
  4. http://aws.amazon.com/ec2/instance-types/
于 2012-12-22T03:26:22.620 に答える
24

Amazon EC2 マイクロ インスタンスでもこの問題が発生しました。以下を追加して、inno_dbのメモリ使用量を減らしてみました/etc/my.cnf

innodb_buffer_pool_size = 64M

それはうまくいきませんでした。16M まで下げてみましたが、それでもうまくいきませんでした。その後、インスタンスの空きメモリが基本的にゼロであることに気付きました。だから私はapacheを再起動しようとしました

sudo システム httpd 再起動
sudo システム mysqld 再起動

そして、すべてがうまくいきました。おそらく別の解決策は、何らかの方法で大量のメモリを消費しないようにApacheを構成することです。

于 2012-08-22T16:14:18.807 に答える
5

投稿に表示されている my.cfg ファイルの innodb_buffer_pool_size に128Mのメモリを要求しているように見えますが、MySQL は512Mのメモリを要求していると考えています。

バッファー プールの初期化、サイズ = 512.0M

数行下のエラー メッセージは、InnoDB バッファー プール用に十分な (512M) メモリを予約できないため、MySQL が起動しないことを示しています。

致命的なエラー: バッファ プールにメモリを割り当てることができません

それには、次の 3 つの質問があります。

  1. インスタンスのメモリはどれくらいですか? 512M InnoDB がバッファプールを取得しようとしているのに十分なメモリが必要で、MySQL が割り当てるその他すべて、アプリケーション、およびオペレーティングシステムに対応できますか?
  2. なぜ InnoDB は、あなたが思っているよりも多くのものを取ろうとしているのでしょうか?
  3. とにかくMySQLが再起動するのはなぜですか?

1と答えることができます。

2. に関しては、MySQL オプション ファイルを配置できる場所がいくつかあります。その後に見つかったファイルは、以前に見つかったファイルで指定されたオプションを上書きします。見る

http://dev.mysql.com/doc/refman/5.5/en/option-files.html

問題 3. は、起動後に発生するメモリ不足の状態が原因である可能性があります。その場合は、ログのさらに前にそれが示されているはずです。

最後に、少し関係ありませんが、EBS でサポートされているインスタンスを使用していますか? これは通常、データベース サーバーに対して強く推奨されます (実際には、特別な状況を除いて、すべてのインスタンスに対して)。詳細については、

https://stackoverflow.com/a/3630707/141172

于 2012-04-24T22:30:01.270 に答える
2

私にとって、この問題は、EC2インスタンスにスワップボリュームを追加することで修正されました。私のサービスは単にボックス上のすべてのメモリを消費していて、クラッシュしていました。何年もの間RedHat/CentOS管理者であった私が慣れていたものではありません-Anacondaは、無料のUbuntuEC2インスタンスにはない多くの作業を行います。

Webコンソールから2Gbボリュームを作成し、それをインスタンスに接続し、「mkswap / dev / [whatever]」を実行し、/ etc / fstabを編集すると、クラッシュが停止しました。

これらのインスタンスは、私たちのほとんどが慣れているメディアベースのOSインストールのようにはインストールされません-パッケージ、適切なファイルシステム、およびAppArmorのようなものがないため、気づかないとあらゆる種類の問題が発生します。および/またはそれを構成する方法がわからない。

于 2012-11-30T01:09:51.903 に答える
1

問題は、MySQL プロセスに割り当てるのに十分なメモリがサーバーにないことです。この問題にはいくつかの解決策があります。

(1) 物理 RAM を増やします。1GB の RAM を追加すると、問題が解決します。(2) SWAP スペースを割り当てます。Digital Ocean VPS インスタンスは、デフォルトではスワップ領域を使用するように構成されていません。512MB のスワップ領域を割り当てることで、この問題を解決することができました。サーバーにスワップ領域を追加するには、次の手順に従ってください。

## 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

于 2016-09-08T08:51:24.710 に答える
1

簡単な答え:

* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld

詳細な回答:

これは、非常に小さな VPS、たとえば 1GB 以下の RAM を使用しているユーザーにとって特に重要な質問です。MySQL がドロップアウトする場合は、サーバーの構成 (Apache | nginx) または MySQL の構成に問題がある可能性があります。DOS 攻撃により、システム リソースの使用量が急増する可能性があります (画像を参照)。最終結果は、MySQL プロセスがカーネルによってシャットダウンされることです。長期的な解決策として、Apache または MySQL の構成を最適化することを検討してください。

システム リソースのスパイクによる RAM のスパイク (午後 6 時直前) とシステム リソースのスパイクによる CPU のスパイクのみ 18 日午前 0 時

他にもいくつかの議論があります Stack Overflow これらのトピック、および 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。サービスがロードされアクティブになっていることが上部に表示されます。

[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 がロードされているが、サービスがアクティブでない場合、cron は何もしません。したがって、次のようなより詳細なコマンドを使用する必要があります。

* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld

この場合、サービスがロードされているが、DOS 攻撃が mysql サービスを離れる可能性がある状態などの非アクティブな場合、コマンドは mysql も再起動します。フラグを使用し--quietてコマンドを指定するだけで、ステータス コードを返すだけで、画面には何も出力されません。フラグを省略すると、または--quietのステータス出力が表示されます。activeinactive

次のような使用可能な 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
于 2019-06-18T19:36:24.280 に答える
0

次の解決策のいずれかを使用してください。

  1. 物理 RAM を増やします。1GB の RAM を追加すると、問題が解決します。

  2. 以下の構成変更を使用して SWAP スペースを割り当てます。

構成

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
于 2015-10-19T05:18:14.513 に答える