質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

XAMPP上でWPの稼働するMySQLに外部から接続できなくなる

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 849

score 8

前提・実現したいこと

XAMPP上のWordPressが稼働しているMySQL(MariaDB)サーバに、LAN上にある外部PCから接続したい
(目的)

  1. WordPressのDBにEXCELファイルから直接データをインポートしたい
  2. ユーザにWPの画面を操作させたくないので、EXCEL上の操作だけで完結したい
  3. その為、EXCEL(VBA)の動作するPCから直接 MariaDBのデータをCRUDしたい

発生している問題・エラーメッセージ

  1. サーバ起動直後は、以下2通りの方法で外部PCから接続を確認できている
    A. Powershellで Test-NetConnectionを実行すると TcpTestSucceededがTrueと返ってくる
    B. MySQLAdministratorで、MariaDBに接続しテーブル等を確認することができる
  2. ところが、サーバあるいは外部PCから以下の操作(のいずれか)を行うと、上の接続確認ができなくなる
    A. phpMyAdminを使ってDBを表示する
    B. WPの操作画面を表示する
    C. WPで作成されたサイトを表示する
  3. Powershellで入力したコマンドとエラー内容は次の通り
PS C:\WINDOWS\system32> test-netconnection 192.168.1.79 -port 3306
警告: TCP connect to (192.168.1.79 : 3306) failed

ComputerName           : 192.168.1.79
RemoteAddress          : 192.168.1.79
RemotePort             : 3306
InterfaceAlias         : VPN3
SourceAddress          : 192.168.1.152
PingSucceeded          : True
PingReplyDetails (RTT) : 13 ms
TcpTestSucceeded       : False


(InterfaceAliasはVPN3になっているが、イーサネットでもWiFiでも同様)

  1. クライアント側で ODBCデータソースアドミニストレーター(64ビット)を使って新しいMariaDB ODBC 3.1 Driverを追加し「Test DSN」ボタンをクリックすると、次のようなエラー画面が表示される
    (設定画面)
    ODBCデータソースアドミニストレーター追加画面
    (エラー画面)
    Connectionテストエラー画面
  2. 一方、サーバ上では2)接続後でも Test-NetConnectionで正常に接続確認が行える
  3. 外部PC側からmySQLコマンドでサーバに接続(-hオプションでIPアドレスを指定)を試みると、以下の現象が発生する
  • サーバ起動直後には正常に接続できる
  • 一旦サーバ上にWordPressで構築されているサイトを表示すると、正常に接続できなくなる(尚、外部からrootで接続できるよう、サーバ側でroot@%に変更している)
    (正常接続時)
    接続正常時のコマンド画面
    (接続エラー時)
    接続エラー時のコマンド画面

エラー発生手順

  1. サーバを再起動させる
  2. 外部PCからmySQLコマンドでサーバに接続する
  3. 上記(正常接続時)画面が外部PC側に表示される
  4. 外部PCから、Webブラウザで以下アドレスにアクセスし、Webサイトを表示する
    http://192.168.1.79/SiteName
    ("SiteName"はXAMPP上に載っているWordPressで実装したサイト)
  5. 外部PCからmySQLコマンドでサーバに再接続する
  6. 上記(接続エラー時)画面が外部PC側に表示される
  7. 外部PCから接続不可になった場合でも、サーバ側でmysqlコマンドを実施すると、正常動作を確認できる
    (サーバ側接続正常画面 -ローカル接続なので -hオプションの指定なし)
    サーバ側接続正常画面
    (WordPressではいくつかのサイトを構築しており、どのサイトでも、最終的には同様のエラーに至る、含 phpMyAdmin)
    (サーバ側でブラウザを使ってアクセスしても、最終的には同様のエラーに至る)
  8. サーバ側で mysqlコマンドを -hオプションを使って接続する場合、'localhost' '127.0.0.1' '192.168.1.79' の3通りにおいて、いずれも下記画面のように正常に接続できることを確認できる
    (サーバ側で -hオプションで接続した際のコマンドと実行結果)
    サーバ側ホスト名指定

これまで試したこと(今は戻した部分あり)

my.ini
  1. skip-name-resolve を追加
  2. enable-named-pipe のコメントを外す
  3. bind-address を①削除 ②0.0.0.0を指定 の2通り試す
  4. connect_timeout=30 を追加
  5. interactive_timeout=30 を追加
  6. max_connections=100 を追加
[client]
# password       = your_password 
port=3306
socket="C:/xampp/mysql/mysql.sock"

# Here follows entries for some specific programs 

# The MySQL server
default-character-set=utf8mb4
[mysqld]
port=3306
socket="C:/xampp/mysql/mysql.sock"
basedir="C:/xampp/mysql"
tmpdir="C:/xampp/tmp"
datadir="C:/xampp/mysql/data"
pid_file="mysql.pid"
enable-named-pipe
key_buffer=16M
max_allowed_packet=1M
sort_buffer_size=512K
net_buffer_length=8K
read_buffer_size=256K
read_rnd_buffer_size=512K
myisam_sort_buffer_size=8M
log_error="mysql_error.log"
skip-name-resolve

# Change here for bind listening
bind-address = 0.0.0.0
# bind-address = ::1          # for ipv6
php.ini
  1. mysqli.allow_persistent=0 に変更
  2. mysqli.default_host=localhost に変更
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
;extension=pdo_pgsql
extension=pdo_sqlite
;extension=pgsql
;extension=shmop

; The MIBS data available in the PHP distribution must be installed.
; See http://www.php.net/manual/en/snmp.installation.php
;extension=snmp

;extension=soap
;extension=sockets
;extension=sodium
;extension=sqlite3
;extension=tidy
;extension=xmlrpc
;extension=xsl

[MySQLi]

mysqli.max_persistent= -1
;mysqli.allow_local_infile = On
mysqli.allow_persistent=1
mysqli.max_links=-1
mysqli.default_port=
mysqli.default_socket=
mysqli.default_host=
mysqli.default_user=
mysqli.default_pw=
mysqli.reconnect=0
httpd-xampp.conf
  1. Alias /phpmyadmin "C:/xampp/phpMyAdmin/" を Require all granted に変更
#
# XAMPP settings
#

<IfModule env_module>
    SetEnv MIBDIRS "C:/xampp/php/extras/mibs"
    SetEnv MYSQL_HOME "\\xampp\\mysql\\bin"
    SetEnv OPENSSL_CONF "C:/xampp/apache/bin/openssl.cnf"
    SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php"
    SetEnv PHPRC "\\xampp\\php"
    SetEnv TMP "\\xampp\\tmp"
</IfModule>

#
# PHP-Module setup
#
LoadFile "C:/xampp/php/php7ts.dll"
LoadFile "C:/xampp/php/libpq.dll"
LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

#
# PHP-CGI setup
#
#<FilesMatch "\.php$">
#    SetHandler application/x-httpd-php-cgi
#</FilesMatch>
#<IfModule actions_module>
#    Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
#</IfModule>


<IfModule php7_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

<IfModule mime_module>
    AddType text/html .php .phps
</IfModule>

ScriptAlias /php-cgi/ "C:/xampp/php/"
<Directory "C:/xampp/php">
    AllowOverride None
    Options None
    Require all denied
    <Files "php-cgi.exe">
          Require all granted
    </Files>
</Directory>

<Directory "C:/xampp/cgi-bin">
    <FilesMatch "\.php$">
        SetHandler cgi-script
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler None
    </FilesMatch>
</Directory>

<Directory "C:/xampp/htdocs/xampp">
    <IfModule php7_module>
        <Files "status.php">
            php_admin_flag safe_mode off
        </Files>
    </IfModule>
    AllowOverride AuthConfig
</Directory>

<IfModule alias_module>
    Alias /licenses "C:/xampp/licenses/"
    <Directory "C:/xampp/licenses">
        Options +Indexes
        <IfModule autoindex_color_module>
            DirectoryIndexTextColor  "#000000"
            DirectoryIndexBGColor "#f8e8a0"
            DirectoryIndexLinkColor "#bb3902"
            DirectoryIndexVLinkColor "#bb3902"
            DirectoryIndexALinkColor "#bb3902"
        </IfModule>
        Require local
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
   </Directory>

    Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
    <Directory "C:/xampp/phpMyAdmin">
        AllowOverride AuthConfig
        #Require local
    Require all granted
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
    </Directory>

    Alias /webalizer "C:/xampp/webalizer/"
    <Directory "C:/xampp/webalizer">
        <IfModule php7_module>
            <Files "webalizer.php">
                php_admin_flag safe_mode off
            </Files>
        </IfModule>
        AllowOverride AuthConfig
        Require local
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
    </Directory>
</IfModule>
ファイアウォール
  1. サーバ側、クライアント側ともに、3306の受信許可を追加
  2. サーバ側、クライアント側ともにFWを無効に設定
netstat
  1. サーバ側で netstat -an で 0.0.0.0:3306 Listening を確認

補足情報(FW/ツールのバージョンなど)

サーバ

OS:Windows10 Home 64bit
XAMPP : 3.2.4
MariaDB : 10.4.8(port 3306)
Apache : 2.4.41
PHP : 7.3.11
phpMyAdmin : 4.9.1
IP:192.168.1.79(Ethernet)

外部PC

OS : Windows10Home 64bit
MySqlAdministrator : 1.1.9
IP:192.168.1.104 or 109(DHCPによる)
ネット接続:社内LAN(192.168.1.0)
Ethernet、WiFi、VPN 全て同様の症状


以上になります
先週からずっと悩んでおりまして、ネット上でも色々と探したのですが、未だに解決できておりません
どうぞよろしくお願いします

ログ情報・手順

  1. my.iniにログ設定変更を加えない前の、サーバ再起動後からの mysql_err.log の内容
    エラーログ
  2. my.ini [mysqld] に以下の3行を追加
    log_warnings=9
    general_log=1
    general_log_file="mysql_general.log"
  3. サーバを再起動
  4. サーバ再起動直後のログファイル
    1) mysql_err.logに以下が追加される
    エラーログ
    2) mysql_general.logに以下が追加される
    mysql_general
  5. 外部PCから mysqlコマンドでサーバに接続
    mysql -h 192.168.1.79 -u root
    select host, user from mysql.user;
    exit
    1) mysql_err.log
    ログへの追記なし
    2) mysql_general.logに以下が追加される
    mysql_general
  6. 外部PCからサーバ上に構築しているWordPressのサイトを表示する
    サイト名:ProtoWeb
    DB名:protoweb
    DB接頭辞:pw
    1) mysql_err.log
    ログへの追記なし
    2) mysql_general.logに以下が追加される
    mysql_general3
  7. 外部PCから再度mysqlコマンドでサーバに接続するが、エラー表示になる
    mysql -h 192.168.1.79 -u root
    ERROR 2002 (HY000): Can't connect to MySQL server on '192.168.1.79' (10060)
    1) mysql_err.log
    ログへの追記なし
    2) mysql_general.log
    ログへの追記なし
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • token

    2020/08/26 21:11

    すいません、色々と
    本当に長くお付き合い頂いてありがとうございます
    現状、下名のスキルの問題もあって、これ以上の追求は厳しいのだと理解しました

    少し、他の方法を検討してみます
    ①サーバマシンを導入する
    -> と申請したのですが通らず、手元のPCで動かしてしまった...
    ②常時接続しっ放しのマシンを1台作って、そこから作業する
    -> マシンが無いのと、あっても40日問題(?)が...
    ③サーバに使っているマシンで業務を行う
    -> 何と、EXCELが入っていないという...
    ④WordPressのプラグインで対応
    -> 有償のものしか対応できなさそう(会社が出してくれるか?)
    ⑤自分でPHPで組んでみる
    -> 全くできる気がしない
    ⑥いっそ、外部のサーバ(会社のHP用)に作ってSSH接続とかしてみる
    -> さくらインターネットなので、ネット上には情報がありそう

    これらの中から考えて、直接MariaDBに接続したいと思ったのですが、その方がハードルが高いということが良く分かりました

    お付き合い頂いたのにこのような申し上げ方で大変申し訳ないのですが、ご高配に心から御礼申し上げます

    キャンセル

  • dameo

    2020/08/26 21:23

    業務に必要なモノなのであれば、説明の仕方次第で申請は通ると思います。
    通らないなら、鯖マシンなんて古くてもボロくてもいいので、廃棄寸前のものを借りて、Linuxでも入れるのが手っ取り早いです。Windowsで本当に5人以上で使う鯖を立てるなら、Windows Serverでないと厳しいです。開発用のローカルサーバーとか、接続数がちゃんと予測できて3つくらいまでにおさまるならいいんですけどね。

    最後に、そんな気がするというだけで、物事を決めつけると仕事では特に失敗します。確実なエビデンスを元に判断しないと上は心配しますよ。

    キャンセル

  • CHERRY

    2020/08/27 09:43 編集

    (横からですが...)

    Windows 10 の [マイクロソフトソフトウェアライセンス条項]( https://www.microsoft.com/en-us/Useterms/OEM/Windows/10/Useterms_OEM_Windows_10_Japanese.htm ) を読むとサーバー用途での使用は禁止されています。

    その辺りを利用して、サーバーOS を会社に導入しもらうことはできないでしょうか?

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る