XAMPPインストールとMySQLへのODBC接続設定メモ

# XAMPPとは
サーバサイドでサービスを提供する複数のプログラムをパッケージ化したもの。この記事はwindowsにインストールします。


# XAMPPインストール
>DownLoad here：https://www.apachefriends.org/jp/index.html


### XAMPP起動
インストール完了後、XAMPPコントロールパネルを開き、ApacheとMySQLを起動します。

![スクリーンショット 2019-03-02 15.41.08.png](https://qiita-image-store.s3.amazonaws.com/0/342467/2af482e8-db04-30b3-63c8-62ee6b3ffc15.png)


### XAMPPの各サービスの起動エラー
サービスが起動できない場合に一番最初に疑うべきは、既存サービスとのポート競合です。同コンピュータ内に既に稼働しているApache/MySQLが存在するか、他のサービスで各サービスと同じポートを使用中しているかです。netstatコマンドでポートの競合を確認し、XAMPPコントロールパネルから各サービスの[config]ボタンから、各サービスに対応した設定ファイルを呼び出し、ポート番号を変更しましょう。この時にウェルノウンポートを避け、他のサービスで利用する可能性のあるものを避けるようにしましょう。
> ウェルノウンポート
https://eng-entrance.com/network-port

### 利用中のポート番号を調べる
サーバで利用中のポートを調べるためにネットスタットアボンする。これから稼働させるサービスが利用中のポートと競合しないように。`netstat -abon`

```Powershell:netstat
C:\WINDOWS\system32>netstat /h
  -a            すべての接続とリッスン ポートを表示します。
  -b            それぞれの接続またはリッスン ポートの作成に使われた実行可能
                ファイルを表示します。場合により、よく知られた実行可能ファイル
                が複数の独立したコンポーネントをホストすることもあり、この
                場合、接続またはリッスン ポートの作成に使われたコンポーネント
                群が表示されます。この場合、実行可能ファイル名は下に [] で表示
                され、上には TCP/IP に到達するまで順に呼び出したコンポーネント
                が表示されます。このオプションには時間がかかり、十分なアクセス
                許可がないとエラーが発生することに注意してください。
  -n            アドレスとポート番号を数値形式で表示します。
  -o            各接続に関連付けられたそれらを所有するプロセス ID を表示しま
                す。

C:\WINDOWS\system32>netstat -abon  | more

アクティブな接続

  プロトコル  ローカル アドレス      外部アドレス           状態            PID
  TCP         0.0.0.0:80             0.0.0.0:0              LISTENING       9588
 [httpd.exe]
  TCP         0.0.0.0:443            0.0.0.0:0              LISTENING       9588
 [httpd.exe]
  TCP         0.0.0.0:3306           0.0.0.0:0              LISTENING       12612
 [mysqld.exe]
  TCP         0.0.0.0:33060          0.0.0.0:0              LISTENING       12612
 [mysqld.exe]

```


### MySQLのパスをとおす
コマンドラインから操作できるようにパスを通しておきます。

- 【Windwos10】の場合、以下のどちらかの方法で。
    -  Winキー＋pause ⇒ システム情報⇒システムの詳細情報⇒詳細設定タブの環境変数
    -  Winキー＋r ⇒ sysdm.cpl⇒詳細設定タブの環境変数
    -  path変数に自分の環境にあったパスを新規登録する。わたしの場合はXamppデフォルト「C:\XAMPP\mysql\bin」
-  コマンドプロンプトから確認。下記のように~~MYSQL~~ MariaDBのプロンプトが返ってきたらOK。

```Powershell
C:\Users\>mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.37-MariaDB mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
```


# Apache
- `C:¥xampp¥apache¥conf¥`以下の設定ファイルの編集
    - `httpd.conf`の設定
        - Xamppの場合`"C:\xampp\apache\conf\httpd.conf"`
        - 他にwebサーバが起動している場合はリッスンポートを競合しないように設定する。
    - `extra¥http-xampp.conf`の設定

```php:http-xampp.conf
Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
    <Directory "C:/xampp/phpMyAdmin">
        AllowOverride AuthConfig
	Require all granted //ここを追記
        #Require local //ここをコメントアウト
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
    </Directory>
```

- 上記を設定しない場合、外部アクセスの時に下記のようにphpmyadminを利用できない。

>![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/342467/c578b4d8-54d9-a885-18f8-170308655f0e.png)



# MySQL
- `my.ini`の編集。


```powershell:login
C:\Users\Administrator>mysql -u root -p
```

```SQL:ユーザの作成
mysql>  username1 IDENTIFIED BY password ,
    ->   username2 IDENTIFIED BY password ;
```

```sql:ポート番号確認
mysql> show variables like 'port';
```

### windowsファイアウォールのポート開放する。（書きかけ）
3306,80開放

### phpMyAdminの設定
- アクセスしてみる。
    - http://localhost/phpmyadmin/index.php?lang=ja
- 初回は下図のようなエラーが表示されることがある。
    - ![2019-02-27 (2).png](https://qiita-image-store.s3.amazonaws.com/0/342467/e926bf1c-bf39-6933-44da-84a5dc11a90f.png)
- rootのパスワード設定を`config.inc.php` に記述する必要があった。
    - rootのパスワードなど。
    - Xamppの場合のデフォルトパス`C:\xampp\phpmyadmin\config.inc.php`

```php3:config.inc.php
/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'ここにぱすわーど';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Lang'] = '';
```







# クライアント側のODBC設定（書きかけ）

```SQL:アクセス権の確認
mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| username1        | %         |
| username2        | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
7 rows in set (0.00 sec)
--「 % 」になっていたらすべてのアクセスが許可されている。
```

```sql:accessken

mysql> GRANT ALL PRIVILEGES ON testdb.* TO username1@'%';
Query OK, 0 rows affected (0.09 sec)
```


![2007odbc.png](https://qiita-image-store.s3.amazonaws.com/0/342467/598d3081-3b78-60e4-ce1d-5eb0bd48af90.png)
ユーザ名とパスワードはmysqlの認証情報


![2007odbc2.png](https://qiita-image-store.s3.amazonaws.com/0/342467/361a194a-deed-f265-ca0e-17afae95daa7.png)

![2007odbc3.png](https://qiita-image-store.s3.amazonaws.com/0/342467/8ba0224e-39ec-74af-ca7e-4997f0ee64d4.png)