以下では、「AccessとMySQL/MariaDB連携:WebサービスのDBとも統合管理」をテーマに、Microsoft AccessをフロントエンドとしてMySQL/MariaDBをバックエンドに利用する方法・注意点について解説します。WebアプリケーションやCMSなどがMySQL系のデータベースを使っているケースは多いですが、Access側で簡易的な管理画面や帳票出力を行うニーズがある場合に便利です。ぜひ参考にしてみてください。
1. なぜMySQL/MariaDBとAccessを連携するのか?
- Webサービスで使われているDBをオフライン管理したい
- WordPressや社内WebアプリがMySQL/MariaDBをバックエンドにしているケースが多い
- Accessで追加の帳票レポートや管理画面を作り、データを活用したい
- Accessのフォームで簡易GUIを提供
- 現場スタッフがブラウザより慣れ親しんだAccess画面で操作したい場合、フロントエンドとしてAccessを使う
- 大量データでもMySQL/MariaDBがサーバー側で処理
- AccessのJet/ACEエンジンで大規模運用するより、MySQL/MariaDBに任せた方が安定・高速
2. 連携の基本:ODBCドライバを介したリンクテーブル
2.1 ODBCドライバのインストール
- MySQL Connector/ODBC や MariaDB Connector/ODBC をWindowsに導入
- バージョンが利用中のMySQL/MariaDBサーバーと互換性があるかチェック(32bit/64bitにも注意)
2.2 DSN設定 or DSNレス
- DSN (Data Source Name)
- Windowsの「ODBCデータ ソース アドミニストレーター」でシステムDSNやユーザーDSNを作成
- サーバー名、ポート(3306など)、データベース名、ユーザーID、パスワードを設定
- DSNレス接続
- DSNを使わずに、文字列で
Driver={MySQL ODBC 8.0 Driver};Server=...;Database=...;Uid=...;Pwd=...;Port=3306;
を指定
3. Accessでリンクテーブルを作成する手順
- [外部データ]→[新しいデータソース]→[ODBCデータベース] をクリック
- 「リンク テーブルを作成してデータソースに接続する」を選択
- DSNがあればDSNを選択、または DSNレスで接続文字列を入力
- MySQL/MariaDBのテーブル一覧が表示されるので、連携したいテーブルを選び、Access内にリンクテーブルを作成
- Accessのナビゲーションウィンドウに**「dbo_テーブル名」**などの名前でリンクテーブルが生成される
4. 主な注意点とハマりどころ
4.1 データ型のマッピング
- MySQL/MariaDB側のVARCHAR / TEXT → Accessの短いテキスト/長いテキストにマッピング
- 数値型(
INT
, DECIMAL
) と AccessのLong
, Double
の差に留意
- Date/Time:
DATETIME
or TIMESTAMP
は Accessの日付型に対応。ただしマイクロ秒は切り捨てられるなど細かい差がある
4.2 主キーやオートナンバーの扱い
- MySQL/MariaDBのAUTO_INCREMENTカラムを主キーにし、リンクテーブル時にAccess側が更新できるようにする
- 主キーがないテーブルをリンクすると、書き込みができないケースが多い
4.3 SQL文・クエリの違い
- AccessがJet/ACE向けに書いた
Like "*abc*"
等は、MySQLには通じない場合がある
- 大量データや複雑JOINは、パススルークエリ(AccessクエリのSQLパススルーモード)を使い、MySQLサーバー側で実行させると高速
4.4 Collation/文字コード問題
- MySQL/MariaDBがutf8mb4、AccessがANSI/Shift-JISといった不一致で文字化けが起きる場合がある
- ODBCドライバの設定で「charset=utf8mb4」や「auto-detect」を指定して文字列変換を行う必要あり
- 特殊文字(絵文字など)はutf8mb4でないと扱えない → Accessがどう対応するか要検証
5. WebサービスDBと統合管理する例
- WordPressのテーブルをAccessでリンク
- WPの
wp_posts
, wp_users
テーブルを取り込み、Accessでレポートを作る
- Blog投稿データやユーザー情報を可視化し、社内向けに簡易GUIを作りたい
- 自作Webアプリ( LAMP環境 )
- 受注テーブル(
orders
), 商品テーブル(products
)をMySQLで管理
- Accessで在庫管理フォームを作り、SKUなどを編集 → WebアプリのDBに即時反映
- クラウドホスティング上のMySQL
- Remote MySQLサーバーにSSL接続してリンクテーブル化
- ファイアウォール設定やIP制限を行い、セキュアにアクセス
6. 運用&セキュリティ上のポイント
- 接続認証情報
- DSNファイルや.accdb接続文字列にユーザーID/パスワード平文が残らないように注意
- 必要に応じてMySQLユーザー権限を最小限(SELECT/UPDATEなど)に絞る
- VPNやSSHトンネル
- 直接Internet越しにMySQLポート(3306)を開けるのはリスク大。VPNやSSHトンネルを経由するなど安全策を取る
- ローカルキャッシュとパフォーマンス
- 大規模データをリンクテーブルで全部引っ張ると遅い
- 重要なクエリはパススルークエリやサーバーサイドVIEWでMySQL側に処理させる
- バックアップ
- MySQL/MariaDBはmysqldumpやMariaDB Backup等をサーバーサイドで定期実行
- Accessフロントエンド(.accdb)もローカルに配布しているなら、それぞれのバージョン管理が必要
7. まとめ:AccessとMySQL/MariaDB連携のメリットと成功のカギ
- メリット
- 既存Web DB(MySQL/MariaDB)を活用しつつAccessのGUI/レポートを利用
- 大量データや同時アクセスはサーバーが処理 → Accessは画面・簡易ロジックに集中
- 中小規模の企業など、ローコードで追加管理機能を作りやすい
- ハマりどころ
- 文字コード(UTF-8 vs Shift-JIS)の調整
- SQL文の方言差 (
%
vs *
、Auto Increment
vs オートナンバー
)
- Accessのリンクテーブルではパススルークエリを使わないと遅い場合がある
- 成功のカギ
- 正しいODBCドライバをセットアップし、DSN or DSNレス接続を安定稼働させる
- セキュリティ面でVPNやSSHトンネル、MySQLユーザー権限を最低限に
- フロントエンド分割やパススルークエリで運用効率とパフォーマンスを両立
Access × MySQL(MariaDB) はWebアプリのDBを社内でGUI管理したいシナリオにうってつけです。ODBCリンクテーブルかパススルークエリを駆使し、運用上の文字コード・セキュリティ・権限に気を配れば、便利なハイブリッド運用を実現できるでしょう。
関連記事
今後もAccessフロント + MySQL/MariaDBバックエンドを利用する場面は増えるかもしれません。構成のメリットとデメリットを理解しつつ、WebサービスDBとAccessを統合管理する試みに挑戦してみてください。
ABOUT ME

入社した会社では、Accessを活用した基幹システムが長年運用されていました。しかし、開発者の高齢化により保守が困難となり、システムの維持・更新が急務に。
ほぼAccessに触れたことのなかった私は、ゼロから学びながら基幹システムを再構築してみることに。ついにはAccessによるシステム開発エンジニアとしてのスキルを身につけるまでに成長。
元々の業務のノウハウとそれを効率化するためのツール(Access)によって業務効率化システムをいくつも開発してきました。
みなさんの”なにか(業務のノウハウ)”とAccessで業務効率化を実現するお役に立てれば幸いです。
月30万の高配当投資も行っています。最新の銘柄情報もお届けしていきます。