#はじめに
MicrosoftAccess2003のデータ(*.mdb) をMySQL8に移行してみたのでその備忘録として残しておきます。
データ移行は、「MDB Tools」でSQLファイルに変化後、データのインポートを行った。
※MDB Toolsは、mdbファイルからCSVファイルやSQLファイルに変換できるツールです(その他にも色んな機能があります)。
#前提条件
・OS環境は、Virtualboxで稼働中のCentOS8.1です。以下、OS詳細情報となります。
# 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権限を付与(末尾に追記)
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関連の設定を定義(末尾に追記)
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のパスを設定
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に移行してみた