MicrosoftAccess2003のデータをMySQL8に移行してみた

#はじめに
MicrosoftAccess2003のデータ(*.mdb) をMySQL8に移行してみたのでその備忘録として残しておきます。
データ移行は、「MDB Tools」でSQLファイルに変化後、データのインポートを行った。
※MDB Toolsは、mdbファイルからCSVファイルやSQLファイルに変換できるツールです(その他にも色んな機能があります)。

#前提条件

・OS環境は、Virtualboxで稼働中のCentOS8.1です。以下、OS詳細情報となります。

```php
# cat /etc/centos-release
CentOS Linux release 8.1.1911 (Core)
```

・Virtualboxのネットワーク設定は、「NAT」「ホストオンリーアダプター」で構成。


・OSの初期設定が完了していること。


・Mariadbがインストールがされていないこと。

・MDB Toolsのインストールは、Linuxbrew経由でおこなう。
ソースからのインストールは、以下をご参照ください。
https://github.com/brianb/mdbtools

#手順概要
手順は、以下の順におこなっていきます。

(1)Linuxbrewをインストール
(2)MDB-Toolsをインストール
(3)MySQL8をインストール
(4)MySQL8にデータをインポート


#(1)Linuxbrewをインストール

####(1.1)Linuxbrewのインストールユーザの設定

▼「qiita」ユーザを作成

```
# useradd qiita
```

▼「qiita」ユーザのパスワードを設定

```
# passwd qiita
```


▼「qiita」ユーザにsudo権限を付与(末尾に追記)

```php:visudo
qiita        ALL=(ALL)       NOPASSWD: ALL
```


▼「qiita」ユーザに切り替える

```
# su - qiita
```

※「Linuxbrew」のインストールは、一般ユーザでないと失敗する。


####(1.2)Linuxbrewをインストール
▼Linuxbrewの必須パッケージをインストール

```
$ sudo dnf -y groupinstall 'Development Tools' && sudo dnf -y install curl file git
```

▼Linuxbrewをインストール

```
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
```

※「Warning:/home/linuxbrew/.linuxbrew/bin is not in your PATH」が表示されるが無視してよい。


▼Linuxbrew関連の設定を定義(末尾に追記)

```$HOME/.bash_profile
export PATH=/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH
export MANPATH=/home/linuxbrew/.linuxbrew/share/man:$MANPATH
export INFOPATH=/home/linuxbrew/.linuxbrew/share/info:$INFOPATH
```

▼設定ファイルの再読み込みを実施

```
$ source $HOME/.bash_profile
```

▼Linuxbrewバージョン確認

```
$ brew -v
```

※ここでバージョンが表示されればOK



#(2)MDB Toolsをインストール

####(2.1)MDB Tools　インストール

▼MDB-Toolsをインストール

```
$ brew install mdbtools
```

▼「root」ユーザに切り替える

```
$ exit
```

▼MDB-Toolsのパスを設定

```php:/etc/profile
export PATH=/home/linuxbrew/.linuxbrew/Cellar/mdbtools/0.7.1_3/bin/:$PATH
```

▼設定ファイルの再読み込みを実施

```
# source /etc/profile
```

※MDB-Toolsをインストールしたことで、以下のコマンドが使えるようになる。

```
# ls /home/linuxbrew/.linuxbrew/Cellar/mdbtools/0.7.1_3/bin/
mdb-array   mdb-header   mdb-parsecsv  mdb-schema  mdb-tables
mdb-export  mdb-hexdump  mdb-prop      mdb-sql     mdb-ver
```

####(2.2)MDBファイルのバージョン確認

▼作業ディレクトリ「/tmp/mdb」を作成

```
# mkdir /tmp/mdb
```

▼FTPツールでMDBファイル「会員情報.mdb」を「/tmp/mdb」以下にコピー
※本環境では、「会員情報.mdb」をMySQL8に移行する想定で、記述します。

▼MDBファイルのバージョンを確認

```
# mdb-ver /tmp/mdb/会員情報.mdb
```

※MDBファイルのバージョンが出力される。

#(3)MySQL8をインストール

▼既存にMariadb環境があれば以下を実施

```
# dnf remove mariadb-libs
# rm -rf /var/lib/mysql/
```

▼既存のMariadbモジュールを削除

```
# dnf -y module disable mariadb
```

▼MySQL8をインストール

```
# dnf -y install @mysql:8.0
```

▼バージョン確認

```
# mysqld --version
```

※MySQLのバージョンが8であること

▼MySQL8の起動・自動起動

```
# systemctl start mysqld && systemctl enable mysqld
```

▼MySQLのログインパスワード設定


```
# mysql_secure_installation

※パスワード以外の設定値は以下とする。
Remove anonymous users(匿名ユーザを削除するか)?：y
Disallow root login remotely(リモートからのrootログインを無効化にするか)?：n
Remove test database and access to it(テスト用のデータベースを削除するか)?：y
Reload privilege tables now(アクセス権のデータベースをリロードするか)? ：y
```

▼MySQLのログイン確認

```
# mysql -u root -p
```

※ログインができればOK！！

▼MySQLから抜ける

```
quit
```


#(4)MySQLにデータをインポート

####(4.1)mdbファイルからSQLファイルを生成

▼エクスポートする前にテーブル構造を確認

```
# mdb-schema /tmp/mdb/会員情報.mdb
↓以下、出力結果
-- ----------------------------------------------------------
-- MDB Tools - A library for reading MS Access database files
-- Copyright (C) 2000-2011 Brian Bruns and others.
-- Files in libmdb are licensed under LGPL and the utilities under
-- the GPL, see COPYING.LIB and COPYING files respectively.
-- Check out http://mdbtools.sourceforge.net
-- ----------------------------------------------------------

-- That file uses encoding UTF-8

CREATE TABLE [会員テーブル]
 (
        [会員NO]                        Text (8),
        [名前]                  Text (60),
        [フリガナ]                      Text (60),
        [〒]                    Text (16),
        [住所1]                 Text (100),
        [住所2]                 Text (100),
        [TEL]                   Text (24),
        [生年月日]                      DateTime,
        [退会]                  Boolean NOT NULL,
        [DM]                    Boolean NOT NULL
);
```

※「mdb-schema」コマンドを用いることでテーブル構造の確認ができます。


▼「会員情報.mdb」内にある「会員テーブル」のデータをSQLファイルにエクスポート

```
# mdb-export -D "%Y-%m-%d %H:%M:%S" -H -I mysql /tmp/mdb/会員情報.mdb "会員テーブル" > /tmp/mdb/MemberTable.sql
```

※mdb-exportコマンドで、mdbファイルからSQLファイルを生成している。(CSVファイルで生成することも可能)
※上記コマンドで使用したオプションは、以下のとおり。

|オプション|意味|
|:---|:---|
|-D|日付書式を指定|
|-H|出力時にカラム名を除去して出力|
|-I mysql|sqlファイルで生成(INSERT文)|

####(4.2)データベース作成/環境確認

▼データベースに接続

```
# mysql -u root -p
```

▼データベース「qiita」を作成

```
CREATE DATABASE qiita;
```

▼データベース「qiita」に切り替える

```
use qiita
```

▼現在の文字コードを確認

```
show variables like "chara%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.02 sec)
```

※本環境では、上記であればOKとする！！


####(4.3)テーブル作成/データのインポート

▼手順4.1で確認したテーブル構造をもとにテーブルを作成

```
CREATE TABLE `会員テーブル`
 (
        `会員NO` VARCHAR(510),
        `名前` VARCHAR(510),
        `フリガナ` VARCHAR(510),
        `〒` VARCHAR(510),
        `住所1` VARCHAR(510),
        `住所2` VARCHAR(510),
        `TEL` VARCHAR(510),
        `生年月日` DATETIME,
        `退会` Boolean NOT NULL,
        `DM` Boolean NOT NULL
);
```

▼作成したテーブルのテーブル構造を確認

```
show columns from `会員テーブル`;
```

▼sqlファイルのインポートを実施

```
source /tmp/mdb/MemberTable.sql
```

▼データインポート後の確認

```
SELECT * FROM `会員テーブル`;
```

※ここでデータが表示されていれば完了！！

#最後に
PostgreSQL12への移行はこちらを参考に
[MicrosoftAccess2003のデータをPostgreSQL12に移行してみた](https://qiita.com/yes_dog/items/bd2b61b574199c190c1a)