*.mdb からデータを mysql 8.0 へ移行する

内視鏡のデータベースは mmr.mdb というもので、いわゆるアクセスというオフィスファミリーのデータベースです。

これではいかにも貧弱なので、データを mysql 8.0 に移行します。

Oracle は mysql のハードルをどんどん上げてきて、そのため素人にはどんどん使いにくくなってきているので mysql の 8.0 なんて使いたくないのですが、linux mint 20.3 に mysql をインストールするとデフォルトで 8.0 になります。

*.mdb からエクセルに書き出す

*.mdb をアクセスで開いて目的のテーブルをエクセルに書き出します。
csv というオプションはありませんでした。

そうして、エクセルで必要な部分だけにしてから、それを csv で出力します。

mysql へのインポート

mysql 側でデータベースを作成し、構造も決定しておきます。

普通であれば以下のようにしてインポートできるはずですが、


LOAD DATA LOCAL INFILE "mmr01.csv"
INTO TABLE mmr 
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';

いろいろとエラーが出ます。


ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides

local-infile を ON に設定する

mysql 8.0 では「LOAD DATA LOCAL INFILE」はデフォルトでは無効になったようで、手動で有効にする必要があります。

mysql> 
SET GLOBAL local_infile=on;

mysql ログイン時に local-infile を有効にする

再度 csv をインポートしようとすると以下のようなエラーが。


ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.

次のようにして、ログイン時に local-infile を有効にします。


mysql -u root -p --enable-local-infile

そしてインポート


LOAD DATA LOCAL INFILE "mmr01.csv"
INTO TABLE mmr 
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';

やっとできました。

今後も Oracle は mysql のハードルをどんどん上げ続けるでしょうね。
どこまでついていけるやら。