MySQL 起動エラー InnoDB: ロックできません/ibdata1 エラー

MySQL 起動エラー InnoDB: ロックできません/ibdata1 エラー

OS X 環境で MySQL を起動すると、エラー メッセージが表示されます。

016-03-03T00:02:30.483037Z 0 [エラー] InnoDB: ./ibdata1 をロックできません エラー: 35
2016-03-03T00:02:30.483100Z 0 [注] InnoDB: 同じ InnoDB データまたはログ ファイルを使用している別の mysqld プロセスがまだ存在していないことを確認してください。

ターミナルは上記のエラー ログを繰り返し出力し続けます。エラー ログから、別の mysqld プロセスが ./ibdata1 ファイルを占有しているようです。したがって、ps コマンドを使用して、mysqld プロセスが実行中かどうかを確認します。

ps -ef |grep mysqld
74 7711 1 0 午前 8:04?? 0:00.34 /usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid

7711 プロセスが実行中であることが判明したため、強制的に終了されました。

sudo キル -9 7711

psで再度クエリを実行します。

ps -ef |grep mysqld
74 7759 1 0 午前 8:10?? 0:00.29 /usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid

まだ存在しますが、pid は元の 7711 から現在の 7759 に変更されています。次に、mysqld プロセスが開いたファイルを確認します。

lsof -c mysqld

プロセスでファイルが開かれていないことが問題です。

Mac OS Xでは、sudoでルートとして実行しない限り、lsofは自分のプロセスのみを表示します。

もう一度実行します:

sudo lsof -c mysqld
コマンド PID ユーザー FD タイプ デバイス サイズ/オフ ノード名
mysqld 8655 _mysql cwd DIR 1,4 544 3090250 /usr/local/mysql/data
mysqld 8655 _mysql.txt REG 1,4 31130736 3089789 /usr/local/mysql/bin/mysqld

実際、mysqld プロセスが実際に実行されており、このプロセスもこれらの mysql ファイルを占有していることがわかりました。Google で調べてみると、OS X で MySQL を起動する方法は Linux とはまったく異なることがわかりました。OS X で MySQL を起動/再起動する正しい方法は次のとおりです。

sudo launchctl アンロード -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist

ここで、mysqld プロセスがまだ存在するかどうかを確認してみましょう。

ps -ef |grep mysqld

まあ、確かに消えてしまったことがわかったので、MySQL をもう一度起動しました。

sudo launchctl load -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist

問題はようやく解決しましたが、まだ終わりではありません。原理を解明する必要があります。

LAUNCHDとは何ですか?

Launchd は、Mac OS X 10.4 以降に導入された重要なプロセスです。システム環境を初期化するために使用されます。カーネルが正常にロードされた後、OS 環境で最初に開始されるプロセスです。従来の Linux では、起動時に開始されるサービスを管理するために /etc/rc.* または /etc/init を使用しますが、OS X では launchd を使用してそれらを管理します。この方法でスタートアップ項目を構成するのは非常に簡単で、必要な plist ファイルは 1 つだけです。 /Library/LaunchDaemons ディレクトリ内の plist ファイルはすべて、システムの起動直後に開始されるプロセスです。 launchctl コマンドを使用して、plist ファイルをロード/アンロードします。設定ファイルをロードするとプログラムが起動し、設定ファイルをアンロードするとプログラムが終了します。

設定ファイルをアンインストールした後、mysqld コマンドを使用して mysql プロセスを直接起動してみます。

ローカルのmysqlディレクトリ
2016-03-03T01:35:50.359258Z 0 [エラー] InnoDB: ./ib_logfile0 を読み取り/書き込みモードで開くことができません。
2016-03-03T01:35:50.359283Z 0 [エラー] InnoDB: プラグインの初期化がエラーで中止されました 一般的なエラー
2016-03-03T01:35:50.670517Z 0 [エラー] プラグイン 'InnoDB' 初期化関数がエラーを返しました。
2016-03-03T01:35:50.670555Z 0 [エラー] プラグイン「InnoDB」をストレージ エンジンとして登録できませんでした。
2016-03-03T01:35:50.670568Z 0 [エラー] プラグインの初期化に失敗しました。
2016-03-03T01:35:50.670574Z 0 [エラー] 中止しています

ib_logfile0 を開くことができません。これはおそらくユーザー権限ファイルです。現在のシステム ユーザーでは MySQL を起動できません。次に、sudo を追加して、root として起動します。

2016-03-03T01:38:10.977313Z 0 [エラー] 致命的なエラー: mysqld を root として実行する方法を確認するには、マニュアルの「セキュリティ」セクションをお読みください。
2016-03-03T01:38:10.977339Z 0 [エラー] 中止しています
2016-03-03T01:38:10.977350Z 0 [注記] バイナリログ終了
2016-03-03T01:38:10.977410Z 0 [注記] /usr/local/mysql/bin/mysqld: シャットダウンが完了しました

MySQL セキュリティマニュアルを読んで、launchd で起動するように指示します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Mysql InnoDBとMyISAMの違いの分析
  • MySQL innodb B+ツリーの高さを取得する方法
  • MySQL MyISAM と InnoDB の違い
  • MySQL InnoDBストレージエンジンについて簡単に説明します
  • MySQL Innodb ストレージ構造と Null 値の保存の詳細な説明
  • MySQL InnoDB row_id 境界オーバーフロー検証方法の手順
  • MySQL InnoDB のトランザクション特性を確保するにはどうすればよいですか?
  • MySQL InnoDB のロック機構の詳細な説明
  • MySQL (InnoDB) がデッドロックを処理する方法の詳細な説明
  • MySQL 学習 (VII): Innodb ストレージ エンジン インデックスの実装原理の詳細説明
  • MySQL slow_log テーブルを InnoDB エンジンに変更することはできません。詳細な説明
  • MySQL InnoDB の重要なコンポーネントの概要

<<:  値の転送を実現するために、2つの同じレベルのコンポーネントをVueで作成します。

>>:  Linux システムで Tomcat のポート 80 を使用する方法

推薦する

LeetCode の SQL 実装 (178. スコアランキング)

[LeetCode] 178.ランクスコアスコアをランク付けする SQL クエリを記述します。2 ...

共通要素のデフォルトのマージンとパディング値に関する議論

今日は、さまざまなブラウザでのデフォルト要素のマージン値が何であるかという問題について説明しました。...

mysql binlog (バイナリログ) を表示する方法

たとえば、新しいテーブルを作成したり、既存のテーブルのデータを更新したりすると、これらのイベントは、...

CSS で要素を中央揃えにする N 通りの方法

目次序文インライン要素の中央揃えテキストを垂直に中央揃え要素を水平方向に中央揃えにするブロックレベル...

単一行関数と文字計算日付プロセス制御を説明する MySQL の例

目次1. キャラクター機能1. ケースコントロール機能2. キャラクターコントロール機能2. 数学関...

MySQLサービスの自動停止の解決策

この記事では主に、MySQL サービスの自動停止の解決策を紹介し、参考と学習のために共有します。一緒...

MySQL メモリテーブルと一時テーブルの使用方法の詳細な説明

MySQL メモリ テーブルと一時テーブルの使用メモリテーブル: セッション 1 $ mysql -...

HTML ハイパーリンク タグ_Powernode Java アカデミー

HTML を学習したり使用したりしたことがある人なら、<a> タグについてよく知っている...

XHTML 入門チュートリアル: XHTML とは何ですか?

HTMLとは何ですか?簡単に言えば、HTML は Web ページを作成するために使用されます。とて...

MySQLデータのグループ化の詳細な説明

グループを作成グループ化は、SELECT ステートメントの GROUP BY 句で設定されます。例:...

MySQLにデータを素早くインポートする方法

序文:日々の勉強や仕事の中で、データをエクスポートする必要に迫られることがよくあります。たとえば、デ...

WeChat アプレット wxs 日付と時刻処理の実装例

目次1. 日付までのタイムスタンプ2. UTCを北京時間に変換するWXS (WeiXin Scrip...

ウェブ開発者はIE7とIE8の共存を懸念している

今日、IE8 をインストールしました。ダウンロードするために Microsoft の Web サイト...

LinuxはNetworkManagerを使用してMACアドレスをランダムに生成します

今では、自宅のソファーに座っていても、外の喫茶店にいても、ノートパソコンの電源を入れてWi-Fiに接...

HTMLテキストオーバーフローの2つの一般的な解決策は省略記号を表示することです

方法1: CSSオーバーフロー省略を使用して解決する解決策は次のとおりです。 CSSコード: ディス...