ページ 11

レンタルサーバーで構築したMySQLをローカル環境でも接続したい

Posted: 2015年5月16日(土) 00:46
by HDD
さくらのレンタルサーバーにあるphpMyadminを使ってWebサーバ上でゲーム攻略のためのDBとして利用してphpと組み合わせてWebサイトを作っています。
そのレンタルサーバー側にファイルマネージャーでそのMySQLを使ったphpファイルを送っていちいちレンタルサーバ側でうまく表示できているか「送って→確認」の繰り返しで作業しています。

私はOS:Mac OS X Yosemiteを使っており、そのローカル環境にMAMPを導入しています。

phpのプログラムに

コード:

/*DSN.php*/
<?php
$dsn = array(
    'host' => 'レンタルサーバのphpMyadminのサーバ',
    'user' => 'レンタルサーバのphpMyadminのユーザ名',
    'pass' => 'レンタルサーバのphpMyadminのパスワード'
);
$db = array('db' => 'レンタルサーバのphpMyadminのDB' );
?>

/*Webサイトで使うphp*/
<?php
require_once 'DSN.php';
$link = mysql_connect($dsn['host'],$dsn['user'],$dsn['pass']);
$sdb = mysql_select_db($db['db'],$link);
if (!$link){
die("mysql接続失敗".mysql_error());
}
  :
  :/*SQLを使い、echoで内容表示(レンタルサーバ側ではうまくいく)*/
  :
$close_flag = mysql_close($link);
?>
と書いています。レンタルサーバ側では通常通りにエラーなく動作しますが、同じようにローカル環境のMAMPでやるとMySQLの内容を表示することができません。(if文の内容が返ってくる)
ローカル環境でもレンタルサーバ側と同じようにレンタルサーバ側のMySQLを使用して同じように動作させることはできますでしょうか?

ちょっと質問の内容が分かりづらいかもしれませんが、よろしくお願いします。m(__)m
ちなみにサイトを構築してphp,MySQLを使い始めて2ヶ月くらいです。

Re: レンタルサーバーで構築したMySQLをローカル環境でも接続したい

Posted: 2015年5月16日(土) 01:21
by みけCAT
完全な実験はしていませんが、サーバーにSSHで接続できる場合は、ポート転送を利用してレンタルサーバーのMySQLに接続できるかもしれません。
※PHPにおけるhostの設定のみ書き換える必要があります

Debian → Raspberry Piで、直接mysqlコマンドを用いた実験には成功し、localhostにしか権限を与えていないデータベースに接続できました。
ssh-mysql-test.png
実験結果

Re: レンタルサーバーで構築したMySQLをローカル環境でも接続したい

Posted: 2015年5月16日(土) 04:16
by HDD
ターミナルからsshでさくらのサーバにアクセスして、mysqlにログインできたのですが、

mysql> select user,host from mysql.user;
ERROR 1142 (42000): SELECT command denied to user 'ユーザ名'@'IPアドレス' for table 'user'

でユーザを確認しようとしてもエラーが出てしまいます。



mysql> CREATE USER 'root'@'localhost' IDENTIFIED by 'password';
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

localhostでもデータベースにアクセスするためrootのユーザを設定しようとしても上記のエラーから進みません。

Re: レンタルサーバーで構築したMySQLをローカル環境でも接続したい

Posted: 2015年5月16日(土) 07:00
by みけCAT
HDD さんが書きました:ターミナルからsshでさくらのサーバにアクセスして、mysqlにログインできたのですが、

mysql> select user,host from mysql.user;
ERROR 1142 (42000): SELECT command denied to user 'ユーザ名'@'IPアドレス' for table 'user'

でユーザを確認しようとしてもエラーが出てしまいます。
セキュリティのため、そのDBの全ユーザーの列挙は許可されていないのでしょう。
HDD さんが書きました:mysql> CREATE USER 'root'@'localhost' IDENTIFIED by 'password';
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

localhostでもデータベースにアクセスするためrootのユーザを設定しようとしても上記のエラーから進みません。
設定の方法がおかしいと思います。
これはどこ(さくらのサーバ上orローカルのMac)のクライアントからどこ(さくらのサーバ上orローカルのMac)のデータベースにアクセスするための操作ですか?

Re: レンタルサーバーで構築したMySQLをローカル環境でも接続したい

Posted: 2015年5月16日(土) 08:41
by daive
質問する前に、
 外部からMySQLデータベースサーバに接続できますか?
 https://help.sakura.ad.jp/app/answers/detail/a_id/1129
 抜粋:
   「さくらのマネージドサーバ」では外部からデータべースサーバに接続することが可能です。
   「さくらのレンタルサーバ」の各プランでは接続することができません。
 【さくらのマネージドサーバ】データベースの利用方法
 https://help.sakura.ad.jp/app/answers/detail/a_id/2195
位は、確認したのかなぁ?
検索ワード:さくらサーバー DB 外部使用

他社の、レンタルサーバー、VPSでは、明確に禁止している場合もあります。
外部接続行為で、会員資格停止とする場合も。(WEB API によるDB操作に対する、明示が無い場合もあります。)
プランにより、可能としている場合もあります。(VPN接続としたり、パフォーマンスが出るかどうかは、別な話)

>ローカル環境でもレンタルサーバ側と同じようにレンタルサーバ側のMySQLを使用して同じように動作させることはできますでしょうか?
レンタルサーバー側のMySQL の データを
ローカル展開できるかどうか?と云う事であれば、
作業者の能力次第では?

Re: レンタルサーバーで構築したMySQLをローカル環境でも接続したい

Posted: 2015年5月16日(土) 22:46
by HDD
すいません、自己解決しました。
たしかに上記のサイトは確認していませんでした。すいません。m(__)m
もしレンタルサーバーの方に直接接続しても規約違反なので、方針を変えて
レンタルサーバーにあるphpMyadminのDBをエクスポートし、ローカル環境のMAMPに入っているphpMyadminにエクスポートしたsqlのデータをインポートすることでレンタルサーバーとローカル環境のDBをコピーして同じように使用することにしました。
そして、ローカル環境で接続した場合、MAMPにあるphpMyadminに接続するためにDSN.phpを編集し、

コード:

<?php
if ($_SERVER['SERVER_NAME'] === 'レンタルサーバのドメイン') {
       $dsn = array(
    'host' => 'レンタルサーバのphpMyadminのサーバ',
    'user' => 'レンタルサーバのphpMyadminのユーザ名',
    'pass' => 'レンタルサーバのphpMyadminのパスワード'
);
} elseif ($_SERVER['SERVER_NAME'] === 'localhost') {//ローカル環境に接続するためのDSN
	$dsn = array(
    'host' => 'localhost',
    'user' => 'root',
    'pass' => 'root'
);
} 
$db = array('db' => 'レンタルサーバ,MAMPのphpMyadminのDB' );
?>
でうまくいくことができました。
回答してくださった方、ありがとうございました。