#はじめに
MicrosoftAccess2003のデータ(*.mdb) をPostgreSQL12に移行してみたのでその備忘録として残しておきます。
データ移行は、「MDB Tools」でCSVファイルに変化後、データのインポートを行った。
※MDB Toolsは、mdbファイルからCSVファイルやSQLファイルに変換できるツールです(その他にも色んな機能があります)。
#前提条件
・OS環境は、Virtualboxで稼働中のCentOS8.1です。以下、OS詳細情報となります。
# cat /etc/centos-release
CentOS Linux release 8.1.1911 (Core)
・Virtualboxのネットワーク設定は、「NAT」「ホストオンリーアダプター」で構成。
・OSの初期設定が完了していること。
・MDB Toolsのインストールは、Linuxbrew経由でおこなう。
ソースからのインストールは、以下をご参照ください。
https://github.com/brianb/mdbtools
#手順概要
手順は、以下の順におこなっていきます。
(1)Linuxbrewをインストール
(2)MDB-Toolsをインストール
(3)PostgreSQL12をインストール
(4)PostgreSQL12にデータをインポート
#(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」をPostgreSQL12に移行する想定で、記述します。
▼MDBファイルのバージョンを確認
# mdb-ver /tmp/mdb/会員情報.mdb
※MDBファイルのバージョンが出力される。
#(3)PostgreSQL12をインストール
▼既存環境のPostgreSQLが入っていないことを確認
# rpm -qa | grep postgres
▼PostgreSQL12のリポジトリをインストール
# dnf -y install https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-8-x86_64/pgdg-redhat-repo-42.0-6.noarch.rpm
▼リポジトリ情報を確認
# dnf info pgdg-redhat-repo
▼既存のPostgreSQLモジュールを削除
# dnf -y module disable postgresql
▼PostgreSQL12をインストール
# dnf -y install postgresql12-server
▼ログイン時の読み込みファイルにPostgreSQL12の設定を追記(末尾に追記)
export PATH=/usr/pgsql-12/bin/:$PATH
▼設定ファイルの再読み込みを実施
# source /etc/profile
▼バージョン確認
# postgres --version
※PostgreSQLのバージョンが12であること
▼データベースの初期化
# postgresql-12-setup initdb
▼PostgreSQL12の起動・自動起動
# systemctl start postgresql-12 && systemctl enable postgresql-12
▼PostgreSQLのログイン確認
# sudo -u postgres psql -U postgres
※ログインができればOK!!
▼PostgreSQLから抜ける
postgres=# \q
#(4)PostgreSQL12にデータをインポート
####(4.1)mdbファイルからCSVファイルを生成
▼エクスポートする前にテーブル構造を確認
# 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」内にある「会員テーブル」のデータをCSVファイルにエクスポート
# mdb-export -D '%Y-%m-%d %H:%M:%S' -H /tmp/mdb/会員情報.mdb "会員テーブル" > /tmp/mdb/MemberTable.csv
※mdb-exportコマンドで、mdbファイルからCSVファイルを生成している。(SQLファイルで生成することも可能)
※上記コマンドで使用したオプションは、以下のとおり。
オプション | 意味 |
---|---|
-D | 日付書式を指定 |
-H | 出力時にカラム名を除去して出力 |
####(4.2)データベース作成/環境確認
▼postgresユーザに切り替え
# su - postgres
▼データベースに接続
$ psql
▼データベース「qiita」を作成
CREATE DATABASE qiita;
▼データベース「qiita」に切り替える
\c qiita
▼現在のデータベースの文字エンコーディングを確認
\encoding
↓出力結果
UTF8
※本環境では、「UTF8」であればOKとする!!
▼クライアント側の文字エンコーディングを確認
show client_encoding;
↓以下出力結果
client_encoding
-----------------
UTF8
(1 行)
※本環境では、「UTF8」であれば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),
"生年月日" timestamp,
"退会" Boolean NOT NULL,
"DM" Boolean NOT NULL
);
▼作成したテーブルのテーブル構造を確認
\d "会員テーブル"
▼CSVファイルのインポートを実施
copy "会員テーブル" from '/tmp/mdb/MemberTable.csv' with csv;
▼データインポート後の確認
SELECT * FROM "会員テーブル";
※ここでデータが表示されていれば完了!!
#最後に
MySQL8への移行はこちらを参考に
MicrosoftAccess2003のデータをMySQL8に移行してみた