MySQL の frm ファイルからテーブル構造を復元する 3 つの方法 [推奨]

MySQL の frm ファイルからテーブル構造を復元する 3 つの方法 [推奨]

mysql が正常に実行されている場合、テーブル構造を表示することは難しくありません。

しかし、場合によっては MySQL が失敗し、この方法が実行できなくなることがあります。

障害が発生すると、通常は新しい MySQL インスタンスを使用して現在のデータを復元します。

テーブルを作成することは非常に重要なステップであり、テーブル構造を見つけるための他の方法が必要です。

テーブル構造はどこで定義されていますか?

通常、関心のあるユーザー データは、実際には MySQL データ ディレクトリに保存されます。
テーブル構造の定義など、他のメタデータも例外ではありません。

mysql データ ディレクトリのファイル構造は非常に明確です。

• カタログ マッピング データベース
• frmファイルにはテーブル構造の定義が格納されます
•ibdataファイルはmysqlメタデータとその他の

テーブルで定義された構造は frm ファイル内に存在し、もちろんメタデータを管理する ibdata にもレコードが存在します。

frm ファイルが存在する場合、テーブル構造を復元するのは比較的簡単です。
ただし、drop table を実行すると frm ファイルが削除され、この記事で紹介する方法は役に立ちません。
この場合、ibdata からテーブル構造を復元することができますが、これは以下の説明の範囲外です。

テーブル構造の解析

以下は、frm ファイルから create table コマンドを解析する 3 つの方法です。

mysqlfrm

mysqlfrm は、mysql ユーティリティ ツールの 1 つです。
frm ファイルを分析し、テーブル作成コマンドを生成するために使用されます。
更新されなくなり、その機能の一部は MySQL シェルの新しいバージョン (バージョン 8 以降) に組み込まれました。

mysql ユーティリティには python2 環境が必要ですが、インストールは非常に簡単です。

$ tar -xvzf mysql-ユーティリティ-1.6.5.tar.gz
$ cd mysql-ユーティリティ-1.6.5
$ python setup.py ビルド
$ python setup.py をインストール

mysqlfrm は、frm を解釈するための 2 つのモードをサポートしています。

直接分析

このモードは比較的簡単で、frm ファイルをバイトごとに分析し、できるだけ多くの情報を抽出します。

このモードでは、--diagnostic パラメータを使用する必要があります。

$ mysqlfrm --diagnostic /data/sakila/actor.frm

MySQL サンプル分析

このモードでは、新しい mysql インスタンスを使用して frm 分析作業を完了します。
新しい MySQL インスタンスを起動する方法を指定するには 2 つの方法があります。

1. 現在のMySQLサービスから起動し、--serverを使用してMySQLサービスを指定します。

$ mysqlfrm --server=root:pass@localhost:3306 --port=3310 /data/sakila/actor.frm

次に、新しいMySQLインスタンスを起動し、--basedirを使用してMySQLプログラムパスを指定します。

$ mysqlfrm --basedir=/usr/local/bin/mysql --port=3310 /data/sakila/actor.frm

--port は、現在のポート 3306 との競合を避けるために、新しいインスタンスのポートを指定します。

dbsake

これは偶然発見したツールです。ドキュメントでは次のように紹介されています。

dbsake - MySQL 用の (s)wiss-(a)rmy-(k)nif(e)

作者は MySQL に非常に精通した人物に違いありません。このツールはダウンロード、インストールから使用までシンプルでわかりやすいです。

$ curl -s get.dbsake.net > dbsake
$ chmod u+x dbsake
$ ./dbsake frmdump [frmファイルパス]

オンラインサービス

こうした問題に焦点を当てたオンラインサービスもいくつかあります。
私はtwindbをオンラインで使用しましたが、とても良い経験でした。関連するツールセットも素晴らしいです。

「Recover Structure -> from .frm file」エントリから frm をアップロードすると、create table コマンドが取得されます。

最後に

これを使用すると、複数のツールをテストし、どのツールの回復コマンドがより完全で望ましいかを比較し、最適なものを選択できます。

参照:

•mysqlfrm 公式ドキュメント

•dbsake プロジェクト ドキュメント

要約する

上記は、frm ファイルから MySQL のテーブル構造を復元するために紹介した 3 つの方法です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL の完全なデータベース バックアップ データを使用して単一のテーブル データを復元する方法
  • MySQL で単一のデータベースまたはテーブルを復元する方法と、起こりうる落とし穴
  • 単一のMySQLテーブルを復元する手順
  • MySQL の完全なデータベース バックアップからデータベースとテーブルを復元する方法
  • InnoDB タイプの MySql によるテーブル構造とデータの復元
  • MySQL は、完全なデータベース バックアップから指定されたテーブルとライブラリを復元します。
  • MySQL シングルテーブル ibd ファイル回復方法の詳細な説明
  • MYSQLは.frmを使用してデータテーブル構造を復元します
  • mysqldump を使用して指定したテーブルをバックアップおよび復元する方法
  • MySQLはテーブルデータを復元するためにfrmファイルとibdファイルを使用します

<<:  Docker: /etc/default/docker の DOCKER_OPTS パラメータを変更しても反映されない

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

推薦する

Node.js における非同期プログラミングの知識ポイントの詳細な説明

導入JavaScript はデフォルトでシングルスレッドであるため、コードは並列実行するための新しい...

JavaScript でよく使われるいくつかの文字列メソッドの概要 (初心者必読)

JavaScriptでよく使われるいくつかの文字列メソッド文字列は読み取り専用データです。よく使用...

MySQL における in と exists の使い方と違いの紹介

まずコードを書いて (int i=0;i<1000;i++){ (int j=0;j<5...

MySQL無料インストールバージョンの設定チュートリアル

この記事では、参考までにMySQLの無料インストール構成チュートリアルを紹介します。具体的な内容は次...

JS で単一ファイルコンポーネントを実装する方法

目次概要単一ファイルコンポーネント基本概念シンプルなローダーコンポーネントコンテンツの解析コンポーネ...

XHTML 入門チュートリアル: XHTML Web ページ画像アプリケーション

<br />適度に画像を追加すると、Web ページがより美しくなります。 画像タグ &l...

標準のMySQL (x64) Windowsバージョンのインストール手順の詳細な説明

MySQL x64 はインストーラーを提供していません、インストーラーを提供していません、インストー...

CentOS 6 は Docker を使用して Zookeeper 操作例を展開します

この記事では、Docker を使用して Centos6 に Zookeeper をデプロイする方法に...

MySQLデータ移行の概要

目次序文: 1. データ移行について2. 移行計画と留意点要約:序文:日常業務では、テーブル、データ...

WordPress実験を実装するための3つの仮想マシンのKVM展開の詳細説明

1. KVM の概要カーネルベースの仮想マシンの略称は、Linux 2.6.20 以降のすべての主要...

JavaScript フロー制御 (分岐)

目次1. プロセス制御2. シーケンシャルプロセス制御3. 分岐フロー制御if文1. 支店構造2. ...

sbinディレクトリを生成せずにNginxをインストールするソリューション

エラーの説明: 1. Linux (CentOS 7 64) システムに Nginx (1.18.0...

jsは画像切り取り機能を実現する

この記事の例では、画像の切り取りを実現するためのjsの具体的なコードを参考までに共有しています。具体...

Vue ページをリフレッシュするために provide と injection を適用する

目次方法1: 関数を直接呼び出す方法2: provide / inject (静的更新) を使用する...

イメージのアップロードとダウンロードに docker をプロキシするためのプライベート ライブラリとして nexus を使用する

1. Nexusの設定1. Dockerプロキシを作成する外部ネットワーク ウェアハウスからローカル...