これは、ログファイルにまったく同じエラーを表示するテーブルがあったときに、fedoraのmariadb 10.2.16で行ったとおりです...
2018-07-11 9:43:58 140323764213504 [Note] InnoDB: The file './database_name/innodb_table.ibd' already exists though the corresponding table did not exist in the InnoDB data dictionary. You can resolve the problem by removing the file.
2018-07-11 9:44:29 140323764213504 [Warning] InnoDB: Tablespace 'database_name/innodb_table' exists in the cache with id 2836 != 2918
あなたのマイレージとエラーは異なる場合がありますが、私が想定する主なものは
...already exists though the corresponding table did not exist in the InnoDB data dictionary...
ドロップテーブルが機能していないだけでなく、テーブルを変更しています...
MariaDB [database_name]> drop table innodb_table;
ERROR 1051 (42S02): Unknown table 'database_name.innodb_table'
MariaDB [database_name]> alter table innodb_table discard tablespace;
ERROR 1146 (42S02): Table 'database_name.innodb_table' doesn't exist
テーブルの作成も次のように失敗します。
MariaDB [database_name]> create table innodb_table(`id` int(10) unsigned NOT NULL);
ERROR 1813 (HY000): Tablespace for table '`database_name`.`innodb_table`' exists. Please DISCARD the tablespace before IMPORT
これを修正するために、私が最初に行ったのは
create table innodb_table2(`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.07 sec)
次に、/ var / lib / mysql / database_nameディレクトリで、ルートとして次のことを行い、innodb_table.ibdの上書きが問題を引き起こしていることを確認しました
cp -a innodb_table2.frm innodb_table.frm
cp -a innodb_table2.ibd innodb_table.ibd
systemctl restart mariadb
mysqlコンソールに戻って、両方のテーブルで正常にドロップコマンドを発行しました
MariaDB [database_name]> drop table innodb_table;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 8
Current database: database_name
Query OK, 0 rows affected (0.08 sec)
MariaDB [database_name]> drop table innodb_table2;
Query OK, 0 rows affected (0.25 sec)
これですべてが正方形になり、1つのテーブルを再作成できます...
MariaDB [database_name]> create table innodb_table (`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.08 sec)
編集:私は追加するつもりでした
restorecon -Rv /var/lib/mysql/database_name
ほとんどすべてのselinuxコンテキストをデータベースから削除する場合でも、データベースをコピーした後にコマンドを実行して、すべてのselinuxコンテキストを本来の方法で取得しますが、代わりに--archiveまたは-aオプションを2つのcpに追加することもできます。コマンドなので、はい、実際にはアーカイブオプションはこれを短くします:
cp innodb_table2.frm innodb_table.frm
cp innodb_table2.ibd innodb_table.ibd
chown mysql:mysql innodb_table.frm innodb_table.ibd
chmod 660 innodb_table.frm innodb_table.ibd
restorecon -Rv /var/lib/mysql/database_name
systemctl restart mariadb
私がより良いと思う次のようにして、すでに作成されたテーブルに設定されているselinuxコンテキストを保持します。
cp -a innodb_table2.frm innodb_table.frm
cp -a innodb_table2.ibd innodb_table.ibd
systemctl restart mariadb
上記のコマンドの長いリストを短いリストに置き換えましたが、短くすることもできます*