sql >> データベース >  >> RDS >> Mysql

frmおよびibdファイルからテーブル構造を復元する

    .frmのみからテーブルを復元しました および.idb ファイル。

    SQLクエリを取得してテーブルを作成します

    テーブルのスキーマをすでに知っている場合は、この手順をスキップできます。

    1. まず、MySQLユーティリティ をインストールします。 次に、mysqlfrmを使用できます コマンドプロンプト(cmd)のコマンド。

    2. 次に、.frmからSQLクエリを取得します mysqlfrmを使用するファイル コマンド:

      mysqlfrm --diagnostic <path>/example_table.frm
      

    次に、SQLクエリを取得して、同じ構造化テーブルを作成できます。次のようになります。

    CREATE TABLE `example_table` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(150) NOT NULL,
      `photo_url` varchar(150) NOT NULL,
      `password` varchar(600) NOT NULL,
      `active` smallint(6) NOT NULL,
      `plan` int(11) NOT NULL,
    PRIMARY KEY `PRIMARY` (`id`)
    ) ENGINE=InnoDB;
    

    テーブルを作成する

    上記のSQLクエリを使用してテーブルを作成します。

    古いデータがまだ存在する場合は、最初にそれぞれのデータベースとテーブルを削除する必要があります。データファイルのバックアップがあることを確認してください。

    データを復元する

    このクエリを実行して、新しいテーブルデータを削除します:

    ALTER TABLE example_table DISCARD TABLESPACE;
    

    これにより、新しい.frm間の接続が削除されます ファイルと(新しい、空の).idb ファイル。また、.idbを削除します フォルダ内のファイル。

    次に、古い.idbを配置します 新しいフォルダにファイルします。例:

    cp backup/example_table.ibd <path>/example_table.idb
    

    .ibdであることを確認してください ファイルはmysqlで読み取ることができます ユーザー、例: chown -R mysql:mysql *.ibdを実行する フォルダ内。

    このクエリを実行して古いデータをインポートします:

    ALTER TABLE example_table IMPORT TABLESPACE;
    

    これにより、.idbからデータがインポートされます ファイルを作成し、データを復元します。



    1. MariaDBでのUNIX_TIMESTAMP()のしくみ

    2. MySQLで日時から時間を差し引く方法は?

    3. PrintStatementを使用してVARCHAR(MAX)を印刷するにはどうすればよいですか?

    4. Postgresでsqlalchemyを使用して部分的に一意のインデックスを作成する