私はあなたの助けが必要です私はDjango約7年前で、現在劣化しているアプリを持っています..ウェブサイトがダウンしてバックアップするたびに、問題はmysqlサーバーにあります
通常、私はmysqlサーバーを再起動する必要があり、それが戻ってきます..私はこれを2年間行っており、問題を完全に修正する準備ができており、これを行うためにあなたの助けが必要です
Django_session
テーブルには3,512,729,600
データ長と24,152,301
行がありますこれが問題の原因であり、mysqlがクエリを処理できず、アプリを強制終了するタイムアウトがいくつか発生したときにWebサイトが停止することがある理由です。それが何か他のものであるならば、私に教えてください。
とにかくDjango_session
テーブルを削除しようとしましたが、運が悪ければ次のエラーが発生します
クエリのエラー(1451):親行を削除または更新できません:外部キー制約が失敗します(
font_database
.fonts_fontfile
、CONSTRAINTsession_id_refs_session_key_37e5d4124e1e319f
FOREIGN KEY(session_id
)REFERENCESDjango_session
(session_key
))
私はここで何をしますか?ここで深刻な助けが必要
MySQLのバージョンは5.7.23です
さらに情報が必要な場合は、私に質問してください。この質問に追加しようとします。
ありがとう
更新:
MySQLサーバー上の接続の総数が152で最大になっていることに問題があることに気づきました
mysql> show status where `variable_name` = 'Threads_connected';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_connected | 152 |
+-------------------+-------+
1 row in set (0.74 sec)
また、接続を確認すると、それらはすべてDjango_sessionsからのものです。そのため、サーバーを再起動すると正常に動作しますが、セッションテーブルが高すぎて行が多すぎるため、同じ問題に戻ります。
mysql> show processlist;
+------+--------------------+-----------+--------------------+---------+------+--------------+----------------------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+--------------------+-----------+--------------------+---------+------+--------------+----------------------------------------------------------------------------------------------------+
| 3709 | font_database | localhost | font_database | Query | 3164 | Sending data | SELECT COUNT(*) FROM `Django_session` WHERE `Django_session`.`last_login` >= '2019-02-23 13:00:37' |
| 3710 | font_database | localhost | font_database | Query | 3162 | Sending data | SELECT COUNT(*) FROM `Django_session` WHERE `Django_session`.`last_login` >= '2019-02-23 13:00:39' |
| 3711 | font_database | localhost | font_database | Query | 3161 | Sending data | SELECT COUNT(*) FROM `Django_session` WHERE `Django_session`.`last_login` >= '2019-02-23 13:00:41' |
| 3714 | font_database | localhost | font_database | Query | 3133 | Sending data | SELECT COUNT(*) FROM `Django_session` WHERE `Django_session`.`last_login` >= '2019-02-23 13:01:09' |
| 3716 | font_database | localhost | font_database | Query | 3131 | Sending data | SELECT COUNT(*) FROM `Django_session` WHERE `Django_session`.`last_login` >= '2019-02-23 13:01:11' |
| 3717 | font_database | localhost | font_database | Query | 3129 | Sending data | SELECT COUNT(*) FROM `Django_session` WHERE `Django_session`.`last_login` >= '2019-02-23 13:01:13' |
...
...
till maxed to 152 connections
再度、追加情報が必要な場合は、質問してください。提供します。これは私が問題が何であるかについての考えを与えるのを助けることができると私が信じるすべてです
この7年間、期限切れのセッションが多すぎます。 manage.py clearsessions
https://docs.djangoproject.com/en/2.2/topics/http/sessions/#clearing-the-session-store を試すことができます
Djangoは、期限切れのセッションの自動パージを提供していません。したがって、期限切れのセッションを定期的に削除するのはあなたの仕事です。 Djangoは、この目的のためにクリーンアップ管理コマンドを提供します:clearsessions。このコマンドは、たとえば毎日のcronジョブとして定期的に呼び出すことをお勧めします。