MySQLサーバーは--read-onlyオプションで実行されているため、このステートメントを実行できません

MySQLサーバーは--read-onlyオプションで実行されているため、このステートメントを実行できません

会議中に同僚から開発ライブラリを書き込めないとの報告を受けました。エラー メッセージは次のとおりでした。

1209 - MySQL サーバーは --read-only オプションで実行されているため、このステートメントを実行できません

通常、このエラーには 2 つの原因があります。

1. スレーブ データベースに接続します。スレーブ ライブラリは通常、読み取り専用に設定されます。

2. マスターデータベースのread_onlyパラメータが1に変更されます

開発者は通常のユーザーであり、このパラメータの値を変更する権限を持つべきではありません。

DBA はこのパラメータを積極的に変更しません。では、開発ライブラリを作成できない理由は正確には何でしょうか?

まず、部門内の 200 名を超える研究開発担当者がこの問題に遭遇したため、問題は開発者側にあるのではないことが確認されました。

まず問題を解決するには、マスター データベースの read_only パラメータの値を照会します。確かに、read_only は 1 に設定されています。

手動で 0 に変更すると、問題は解決します。問題は、なぜ read_only が 1 に設定されているのかということです。

解決手順は次のとおりです。

mysql> @@read_only を選択します。

+-------------+

| @@読み取り専用 |

+-------------+

| 1 |

+-------------+

セット内の 1 行 (0.00 秒)

mysql> グローバル read_only=0 を設定します。

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql エラー ログを確認すると、次の情報が見つかりました。

151231 13:55:11 mysqld_safe 現在実行中のプロセス数: 0

151231 13:55:11 mysqld_safe mysqldが再起動されました

これは、MySQL が再起動されたことを示しています。再開の理由は何ですか?

システムログを確認したところ、次のエラーが見つかりました。

#tail -100f /var/log/メッセージ

12月31日 13:55:11 mysql2dev カーネル: [8680] 500 8680 27084 92 3 0 0 bash

12月31日 13:55:11 mysql2devカーネル: メモリ不足: プロセス12805 (mysqld) を強制終了するか、スコア964で子プロセスを犠牲にする

12 月 31 日 13:55:11 mysql2dev カーネル: プロセス 12805、UID 500、(mysqld) total-vm:13146848kB、anon-rss:7870704kB、file-rss:16kB を強制終了しました

12 月 31 日 13:55:11 mysql2dev カーネル: rsyslogdinvoked oom-killer: gfp_mask=0x201da、order=0、oom_adj=0、oom_score_adj=0

12月31日 13:55:11 mysql2dev カーネル: rsyslogdcpuset=/ mems_allowed=0-1

12月31日 13:55:11 mysql2dev カーネル: Pid:21035、通信: rsyslogd 汚染されていない 2.6.32-358.el6.x86_64 #1

12月31日 13:55:11 mysql2devカーネル: CallTrace:

このエラーから、メモリオーバーフローにより MySQL が再起動したことがわかります。

メモリ不足: プロセス 12805 (mysqld) スコア 964 を強制終了するか、子プロセスを犠牲にする

それで、メモリリークの原因は何でしょうか?

システムの履歴コマンドを確認したところ、同僚がバックアップを実行していたことがわかりました。当時、システムは大きな負荷がかかっており、セカンダリ システムにはスワップ パーティションが設定されていませんでした。上記の理由により、MySQL が再起動されました。

スワップ: 0 0 0

再起動すると read_only=1 になるのはなぜですか? 設定ファイルで read_only が設定されている可能性があります。設定ファイルを確認してください。

#grep 読み取り専用 my.cnf

読み取り専用 = オン

この時、開発環境が突然書き込めなくなった原因がようやく判明しました。

メインライブラリが read_only=on を設定するのはなぜかと疑問に思うかもしれません。それは、もともと MMM 環境だったからです。

MMM 環境が削除されたので、設定ファイルの read_only を 0 に設定します。これで開発ライブラリが書き込みできない問題は解決しました。

MySQL はエラーを報告します: MySQL サーバーは --skip-grant-tables オプションで実行されているため、このステートメントを実行できません、など。

1. mysqlにログインします: mysql –u root –p

mysql> グローバル read_only=0 を設定します。
(新しいマスターデータベースの読み取り専用属性をオフにします)

権限をフラッシュします。

2. /etcディレクトリにあるMySQL設定ファイルmy.cnfを変更します。

mysqlサービスを再起動します: service mysqld restart

エラー 1290 (HY000): MySQL サーバーは --skip-grant-tables オプションで実行されているため、実行できません。

このエラーは、MySQL 8.0.3のインストール中にパスワードをリセットしたときに報告されました。パスワードが設定されていない場合、mysqlを操作するには/etc/my.cnfにこのセクションを追加する必要があるためです。

#パスワード認証をスキップ

スキップ許可テーブル

しかし、この文を追加した後、MySQL は再びこのエラーを報告し、無限ループになりました。ようやく解決策を見つけました。

これは、権限が設定されているが更新されていないためです。

最初に実行する

権限をフラッシュします。

SQL文を再度実行すると成功します

ALTER USER 'root'@'localhost' を 'your password' によって mysql_native_password で識別します。

以下もご興味があるかもしれません:
  • mysql データベースmysql: [エラー] 不明なオプション ''--skip-grant-tables''
  • MySQL ビューの一貫性を確保する方法の詳細な説明 (チェック オプション付き)
  • MySQL に絵文字を保存するときに表示されるエラー メッセージ「java.sql.SQLException: 文字列値が正しくありません:'\xF0\x9F\x92\xA9\x0D\x0A...'」の解決方法
  • MySQL の NULL と空の文字列
  • ODBC経由でMySQLとPHPを任意のデータベースに接続する例
  • Ubuntu で apt-get を使用して mysql をインストールおよび完全にアンインストールする方法の詳細な説明
  • AES_ENCRYPT() と AES_DECRYPT() を使用して MySQL を暗号化および復号化する正しい方法の例
  • mysqlサーバーは--skip-grant-tablesオプションで実行されています
  • pt-heartbeat を使用して MySQL レプリケーションの遅延を監視する方法の詳細な説明
  • MySQL pt-slave-restart ツールの使い方の紹介

<<:  Ubuntu 20.04 は Wi-Fi に接続します (2 つの方法)

>>:  JavaScriptアップロードファイル制限パラメータケースの詳細な説明

推薦する

印刷広告を成功させるための「3I」基準

国内の多くの広告主にとって、印刷広告の制作と評価は、しばしばかなり主観的です。自分の感情や美的感覚に...

LinuxでIPアドレスが表示されない問題の解決方法

目次序文解決:ステップ1ステップ2序文環境: VMware Workstation 上に Linux...

MySQLコマンドプロンプトで入力エラーが発生したときに前のコマンドを修正する方法

目次現在の問題解決プロセス具体的な手順解決した事件現在の問題MySQL コマンド プロンプトに複数行...

Mysql 5.7.18 MySQL proxies_priv を使用して同様のユーザーグループ管理を実装する

MySQL proxies_priv(シミュレートされたロール)を使用して同様のユーザーグループ管理...

このようなシェル スクリプトを使用して、多数の MySQL データベースを強制終了します (推奨)

朝早くに電話で起こされました。あるプロジェクトのデータベースがダウンしていて起動できないとのことでし...

MySQL (8 および 5.7) の Docker インストール

この記事では、Dockerを使用してMySQLデータベースとリモートアクセス構成をデプロイする方法を...

Spring環境を構成するためのDocker-composeの手順

最近、メンバーがテストできるようにプロジェクトをパッケージ化する必要がありますが、パッケージ化された...

CSSでフレックス配置を表示する(レイアウトツール)

display: flex レイアウトに関しては、深く理解している人もいますし、私も他の人の作業か...

モバイルデバイス用のメタタグ設定の完全なリスト

序文以前フロントエンドを勉強していたとき、メタタグに対する私の理解はこの一文だけでした。 <メ...

DevUI で独自の Angular コンポーネント ライブラリを構築する方法

目次序文コンポーネントライブラリの作成主要な構成の変更ディレクトリレイアウトの調整ライブラリ構築のた...

Dockerfile を使用して Node.js サービスをデプロイする方法

Dockerfileを初期化するプロジェクトの名前が express であると仮定して、expres...

Linuxのbasenameコマンドの使い方

01. コマンドの概要basename - ファイル名からディレクトリとサフィックスを削除しますba...

JSX を使用してコンポーネント パーサー開発を構築する例

目次JSX環境の構築プロジェクトの設定NPMを初期化するwebpackをインストールするBabelを...

HTML の iframe と frame の違いを例を使って説明します

プロジェクトで frameset 属性を使用したことがあるかどうかはわかりません。昨年、オンライン ...

Nginx のパフォーマンスを向上させるための提案

Web アプリケーションが 1 台のマシンでのみ実行される場合、パフォーマンスを向上させるのは非常に...