序文 MySQL の日常的な開発やメンテナンスでは、パスワードの紛失やテーブルの破損など、避けられない問題や障害が発生することがよくあります。将来必要になった場合に備えて、一般的な問題をまとめておきます。 1. MySQLのルートパスワードを忘れた 1. データベースが配置されているサーバーにログインし、mysql プロセスを手動で終了します。 (1)データベースが配置されているサーバーにログインし、MySQLプロセスを手動で終了します。 root@bogon:/data/mysql# `cat ./mysql.pid` を強制終了します このうち、mysql.pid は MySQL データ ディレクトリ内の pid ファイルを参照し、MySQL サービスのプロセス ID を記録します。 (2)--skip-grant-tablesオプションを使用してMySQLサービスを再起動します。 zj@bogon:/data/mysql$ sudo /usr/local/mysql/bin/mysqld --skip-grant-tables --user=root & --skip-grant-tables オプションは、MySQL サービスを起動するときに認証テーブル認証をスキップすることを意味します。起動後、MySQL に root として接続する場合、パスワードは必要ありません。 (3)空のパスワードを持つrootユーザーを使用してmysqlに接続し、rootパスワードを変更します。 zj@bogon:/usr/local/mysql/bin$ mysql -uroot MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは3です サーバーバージョン: 5.7.18-log ソース配布 Copyright (c) 2000, 2017, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 MySQL [(なし)]> パスワードを password('123456') に設定します。 エラー 1290 (HY000): MySQL サーバーは --skip-grant-tables オプションで実行されているため、このステートメントを実行できません MySQL [(なし)]> mysqlを使用する データベースが変更されました MySQL [mysql]> ユーザーを更新し、authentication_string=password('123456') を設定します。ここで、user="root"、host="localhost" です。 クエリは正常、1 行が影響を受け、1 つの警告 (0.02 秒) 一致した行: 1 変更された行: 1 警告: 1 MySQL [mysql]> 権限をフラッシュします。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) MySQL [mysql]> 終了; さよなら **************************************************************** zj@bogon:/usr/local/mysql/bin$ mysql -uroot -p123456 mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。 MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは7です サーバーバージョン: 5.7.18-log ソース配布 Copyright (c) 2000, 2017, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 MySQL [(なし)]> --skip-grant-tables オプションを使用してシステムを起動したため、「set password」コマンドを使用してパスワードを変更できませんでした。ユーザー テーブルの authentication_string フィールドを直接更新した後、パスワードは正常に変更されました (テストしたバージョンは 5.7.18 で、一部のバージョンのパスワード フィールドは 'password' です)。権限認証を再度有効にするには、権限テーブルを更新します。再度 root としてログインすると、変更したパスワードを使用できます。 2. MyISAM ストレージエンジンのテーブル破損に対処する方法 場合によっては、myisam テーブルが破損している状況に遭遇することがあります。破損したテーブルの症状として、通常、クエリが予期せず終了し、次のようなエラーが表示されます。
通常、解決策は 2 つあります。 1. myisamchkツールを使用する MySQL に付属する myisamchk ツールを使用して修復します。 シェル> myisamchk -r テーブル名 -r パラメータは回復を意味します。上記の方法でほぼすべての問題を解決できます。うまくいかない場合は、次のコマンドを使用します。 シェル> mysiamchk -o テーブル名 -o パラメータは --safe-recover を意味し、より安全なリカバリを可能にします。 2.SQLコマンドを使用する 修復を実行するには、MySQL の check table コマンドと repair table コマンドを一緒に使用します。check table はテーブルが破損しているかどうかを確認するために使用され、repair table は破損したテーブルを修復するために使用されます。 3. データディレクトリのディスク容量が不足している システムの起動後、データ量が増加し続けると、データ ディレクトリ内の使用可能なスペースがどんどん少なくなり、アプリケーションにセキュリティ上のリスクが生じます。 1. MyISAMストレージエンジンを使用するテーブルの場合 MyISAM ストレージ エンジンを使用するテーブルの場合、次のオプションを使用して、テーブルの作成時にデータ ディレクトリとインデックス ディレクトリを異なるディスク領域に保存するように指定できます。デフォルトでは、両方ともデータ ディレクトリに保存されます。 データディレクトリ = 'ディレクトリへの絶対パス' インデックスディレクトリ = 'ディレクトリへの絶対パス' テーブルが作成されている場合は、テーブルが変更されないようにテーブルをシャットダウンまたはロックし、テーブルのデータ ファイルとインデックス ファイルを十分なディスク領域のあるパーティションに mv してから、元のファイルへのシンボリック リンクを作成することしかできません。 2. InnoDBストレージエンジンを使用するテーブルの場合 データ ファイルとインデックス ファイルは一緒に保存されるため、分離することはできません。ディスク容量が不足している場合は、新しいデータ ファイルを追加して、十分な容量のあるディスクに配置することができます。 具体的な実装方法は、このファイルをパラメータ innodb_data_file_path に追加し、パスを新しいディスクの絶対パスとして記述することです。 たとえば、/home に十分なスペースがなく、データを自動的に拡張できる新しいファイルを /home1 に追加する場合は、パラメータを次のように記述できます。 innodb_data_file_path = /home/ibdata1:2000M;/home1/ibdata2:2000M:自動拡張 パラメータを変更した後、変更を有効にするにはデータベースを再起動する必要があります。 4. DNS 逆引き解決の問題 (バージョン 5.0 以降では、デフォルトでドメイン名の逆引き解決がスキップされます) クライアントで show processlist コマンドを実行すると、次のように多数のプロセスが表示されることがあります。 認証されていないユーザー | 192.168.10.10:55644 | null | 接続 | null | ログイン | null これらのプロセスはどんどん蓄積されて消えなくなり、アプリケーションが正常に応答できなくなり、システムがクラッシュする原因になります。 デフォルトでは、MySQL はリモート接続された IP アドレスに対して逆ドメイン名解決を実行します。システムのホスト ファイルに対応するドメイン名がない場合、MySQL は接続を無効なユーザーと見なすため、次のプロセスで認証されていないユーザーが表示され、プロセスがブロックされます。 解決策は非常に簡単です。MySQL を起動するときに --skip-name-resolve オプションを追加すると、MySQL はドメイン名解決プロセスをスキップし、上記の問題を回避します。 5. mysql.sockが失われた後にデータベースに接続する方法 ローカル MySQL サーバー上のデータベースに接続するときに、mysql.sock が存在しないという問題が頻繁に発生し、接続に失敗します。これは、ホスト名として localhost を指定すると、mysqladmin がデフォルトで tcp/ip ではなく Unix ソケット ファイル接続を使用するためです。このソケット ファイル (通常は mysql.sock という名前) は、さまざまな理由で削除されることがよくあります。ユーザーは、--protocol=TCP|SOCKET|PIPE|MEMORY オプションを使用して接続プロトコルを明示的に指定できます。次の例は、Unix ソケット接続が失敗した後に TCP プロトコルを使用して正常に接続する方法を示しています。 1. Unixソケット接続: zj@bogon:~$ mysql エラー 2002 (HY000): ソケット '/tmp/mysql.sock' 経由でローカル MySQL サーバーに接続できません (2) 2. TCP接続 zj@bogon:~$ mysql --protocol=TCP 6. MyISAMテーブルが大きすぎてアクセスできない まず、myisamchk コマンドを使用して MyISAM テーブルの状態を表示します。以下に示すように、管理テーブルを確認します
次のコマンドを使用してデータファイルのサイズを拡張できます。 テーブル名を変更します。MAX_ROWS=88888888 AVG_ROW_LE=66666 7. データディレクトリのディスク容量が不足しています MyISAMストレージエンジンの場合 データ ディレクトリとインデックス ディレクトリは、異なるディスク領域に保存できます。 InnoDBストレージエンジンの場合 InnoDB ストレージ エンジンを使用するテーブルの場合、データ ファイルとインデックス ファイルは一緒に保存されます。したがって、それらを分離することは不可能です。ディスク容量が不足している場合は、新しいデータ ファイルを追加して、十分な容量のあるディスクに配置することができます。具体的な実装としては、このファイルを InnoDB_data_file_path に追加します。 innodb_data_file_path=/home/mysql/data:10000M;/user/mysql/data:10000M:自動拡張 パラメータを変更した後、変更を有効にするにはサーバーを再起動する必要があります。 8. 同じホストに複数のMysqlをインストールする 各 MySQL インストール ディレクトリが異なる必要があることに加えて、ポートとソケットも異なる必要があります。 mysql.sock はクライアントが mysql と通信するために使用されます。ソケット ファイルはローカルでのみ使用でき、リモート接続は TCP/IP 経由で行う必要があります。 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: JavaScript でプロトタイプ パターンを実装する方法
>>: CentOS7にPHP7 Redis拡張機能をインストールする方法
場合によっては、ベースイメージに特定の依存関係をインストールする必要があります。Dockerfile...
目次Docker-Maven-プラグインMavenプラグインの自動デプロイメント手順1. ホストマシ...
docker-compose-monitor.yml バージョン: '2' ネットワ...
今日、slave_exec_modeというパラメータを偶然見ました。マニュアルの説明から、このパラメ...
1. 背景Netplan は、Ubuntu システムのネットワーク設定を簡単に管理および構成できるよ...
JSON 形式のフィールドは、MySQL 5.7 で追加された新しい属性ですが、基本的には文字列とし...
目次イベントループブラウザ環境イベントループノード環境イベントループ6つのステージ(1)setTim...
スティッキーフッターレイアウトとは何ですか?一般的な Web ページのレイアウトは、通常、ヘッダー部...
スロットとは何ですか?スロット ディレクティブは v-slot であり、現在 slot と slot...
この記事の例では、テーブルのシームレスなスクロールを実現するためのjQueryの具体的なコードを参考...
1. 日付のサイズを比較するには、XML に渡される日付形式は 'yyyy-MM-dd...
Sublime Text 2 は、軽量でシンプル、効率的なクロスプラットフォーム エディターです。ブ...
実際のプロジェクトでは、上下のスクロール バーと左右のスクロール バーは DIV 内にないため、右の...
Web ページを作成するときに、特定のフォントを使用したい場合は、 @font-faceを介して参照...
目次制御されていないコンポーネント制御コンポーネント知らせ結論は制御されていないコンポーネントフォー...