2020-03-03

初心者コピペで簡単!データベースサーバー(MySQLとphpMyAdmin)の構築手順の実録メモまとめ

CODELinux 初心者コピペで簡単!データベースサーバー(MySQLとphpMyAdmin)の構築手順の実録メモまとめ

初心者向け!MySQLをインストールする方法【データベースサーバの構築手順】

DB(データベースサーバー)は、サーバー上のデータベースをクライアントサイドから操作できるようにするためのサーバー。
データベースサーバーの構築手順として「MySQLのインストール方法」を初心者向けに解説した記事です。
Wordpress使用する際はデータベースを使う必要があるので、リレーショナル型データベースであるMySQLの導入手順を紹介します。

目次
    1. MySQLでの構築
      1. MySQLとは・・・
      2. MySQLのインストール
      3. MySQLの初期設定
      4. データベースを操作してみる
      5. こんな時は・・・
    2. phpMyAdminインストール
      1. php-mysqlインストール
      2. phpMyAdmin設定
      3. Apache設定
      4. phpMyAdmin確認
      5. ランダムなパスワードを生成するには

MySQLでの構築

MySQLとは・・・

【MySQLとは・・・・・・・】
MySQLとは世界的に広く利用されているRDBMSで、マルチスレッドをサポートし数千万のレコードを持つデータベースも高速に処理を行えます。
また、CGIやJava・PHPなどの言語よりMySQLに手軽にアクセスが可能です。

MySQLのインストール

# yum -y install mysql-server

・MySQL設定ファイルの変更
# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
・出力メッセージを日本語にする(追加)
language=/usr/share/mysql/japanese/

old_passwords=1
default-character-set = utf8 追加

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[safe_mysqld]
err-log=/var/log/mysqld.log
以下も追加(MySQLクライアントの文字コードをUTF-8にする)
[mysql]
default-character-set = utf8
:wqで書き換え


・MySQLの起動
# /etc/rc.d/init.d/mysqld start

MySQL データベースを初期化中:  Installing all prepared tables
Fill help tables

To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h fedora.kajuhome.com password 'new-password'
See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
cd sql-bench ; perl run-all-tests

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
                                                          [  OK  ]
MySQL を起動中:                                            [  OK  ]

上記のメッセージはmysql-serverインストール後にはじめて起動した時に出力されます
「MySQL のrootのパスワードが未設定の為、パスワードを設定して下さい」と言う文言です。


・2回目以降の起動は下記の様に、メッセージ出力されません
# /etc/rc.d/init.d/mysqld start
MySQL を起動中:                                            [  OK  ]


・MySQLの停止
# /etc/rc.d/init.d/mysqld stop
MySQL を停止中:                                            [  OK  ]

MySQLの初期設定

MySQLを使用するには、上記の「MySQLの起動」を行ってから操作してください。

・MySQL monitorに接続
# mysql -u root
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 3.23.58

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

・インストール直後のデータベース表示
mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
| test               | 
+--------------------+
3 rows in set (0.00 sec)
・データベースが「mysql」と「test」の2つが存在している。
FedoraCore5 以降は MySQL Versionが 5 の為、「information_schema」も存在しています。


・「mysql」データベースのテーブル名表示
mysql> show tables from mysql;

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              | 
| db                        | 
| func                      | 
| help_category             | 
| help_keyword              | 
| help_relation             | 
| help_topic                | 
| host                      | 
| proc                      | 
| procs_priv                | 
| tables_priv               | 
| time_zone                 | 
| time_zone_leap_second     | 
| time_zone_name            | 
| time_zone_transition      | 
| time_zone_transition_type | 
| user                      | 
+---------------------------+
17 rows in set (0.00 sec)

columns_priv    :フィールドについてのアクセス制限
db              :各データベースについてのアクセス制限
func            :システムテーブル(ユーザ定義関数)
host            :ホストによる制限
tables_priv     :テーブルについてのアクセス制限
user            :ユーザによりアクセスを制限


・MySQLアカウントのrootが自動的に作成されているがパスワードが設定されていないので設定する。
rootにパスワードを設定する(パスワードを"himichu"とする場合)
mysql> SET PASSWORD FOR root@localhost=PASSWORD('himichu');
Query OK, 0 rows affected (0.00 sec)


・MySQL monitorの終了
mysql> exit
Bye


・MySQL monitorにrootで接続する(この時、"-p"オプションを指定しパスワード入力をする)
mysql> mysql -u root -p
・上記で設定したパスワード"himichu"を入力
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 3.23.58

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


・「use」コマンドで「mysql」データベースに切り替える。
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

・データベースが変更された
Database changed


・MySQLに接続できるユーザの表示
mysql> select host,user,password from user;
+--------------------------+------+------------------+
| host                     | user | password         |
+--------------------------+------+------------------+
| localhost                | root | 213c744c40ba5e05 | 
| hogehoge.classic.co.jp   | root |                  | 
| 127.0.0.1                | root |                  | 
| localhost                |      |                  | 
| hogehoge.classic.co.jp   |      |                  | 
+--------------------------+------+------------------+
5 rows in set (0.00 sec)


・パスワード無しのユーザ(匿名ユーザ)の削除
mysql> delete from user where user="";
Query OK, 0 rows affected (0.00 sec)


・パスワード無しのユーザが削除されたホスト「hogehoge.classic.co.jp」にもパスワードを設定する
mysql> SET PASSWORD FOR root@hogehoge.classic.co.jp=PASSWORD('himichu');
Query OK, 0 rows affected (0.00 sec)


・MySQLに接続できるユーザの表示
mysql> select host,user,password from user;
+--------------------------+------+------------------+
| host                     | user | password         |
+--------------------------+------+------------------+
| localhost                | root | 213c744c40ba5e05 | 
| hogehoge.classic.co.jp   | root | 213c744c40ba5e05 | 
| 127.0.0.1                | root | 213c744c40ba5e05 | 
+--------------------------+------+------------------+
3 rows in set (0.00 sec)


・「use」コマンドで「test」データベースに切り替える。
mysql> use test
Database changed


・テーブルが存在しない(「test」データベースは試験用の為不要)「test」データベースの削除
mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)


・データベースの表示
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)


・「test」データベースが削除されたMySQL monitorの終了
mysql> exit;
Bye

データベースを操作してみる

MySQL monitorに接続
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 3.23.58

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


「meibo」データベースを作成
mysql> create database meibo;
Query OK, 1 row affected (0.00 sec)


データベースの表示
mysql> show databases;
+----------+
| Database |
+----------+
| meibo    |
| mysql    |
+----------+
2 rows in set (0.00 sec)
「meibo」データベースが作成された


「meibo」データベースを操作する"linux"ユーザの作成
mysql> grant all on meibo.* TO linux@localhost identified BY 'himichu';
Query OK, 0 rows affected (0.00 sec)
上記は「meibo」データベースにローカルからの接続ですべての操作を許す
ユーザ"lunux"をパスワード"himichu"で作成しています


設定を反映する
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)


作成した"linux"ユーザで操作できるか、ログインし直す
MySQL monitorの終了
mysql> exit
Bye


"linux"ユーザでログイン
# mysql -u linux -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14 to server version: 3.23.58


Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


「meibo」データベースに「user」テーブルを作成
(この時、「Num」と「Name」フィールドを作成する)
mysql> create table meibo.user (
    -> Num int NOT NULL primary key auto_increment,
    -> Name varchar(32) NOT NULL
    -> );
Query OK, 0 rows affected (0.01 sec)


「meibo」データベースの「user」テーブルを表示
mysql> show fields from meibo.user;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| Num   | int(11)     |      | PRI | NULL    | auto_increment |
| Name  | varchar(32) |      |     |         |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
「user」テーブルが作成され、指定したフィールドも作成された


レコードの挿入(値を"linux"にする)
mysql> insert into meibo.user (Name) values ('linux');
Query OK, 1 row affected (0.00 sec)


レコードの表示
mysql> select * from meibo.user;
+-----+-------+
| Num | Name  |
+-----+-------+
|   1 | linux |
+-----+-------+
1 row in set (0.00 sec)
"linux"のレコードが登録された


レコードの挿入(値を"hogehoge"にする)
mysql> insert into meibo.user (Name) values ('hogehoge');
Query OK, 1 row affected (0.00 sec)


レコードの表示
mysql> select * from meibo.user;
+-----+----------+
| Num | Name     |
+-----+----------+
|   1 | linux    |
|   2 | hogehoge |
+-----+----------+
2 rows in set (0.00 sec)
"hogehoge"のレコードが登録された


レコードの削除(キー「Num」が2のレコードを削除)
mysql> delete from meibo.user where Num=2;
Query OK, 1 row affected (0.00 sec)


レコードの表示
mysql> select * from meibo.user;
+-----+-------+
| Num | Name  |
+-----+-------+
|   1 | linux |
+-----+-------+
1 row in set (0.00 sec)
"hogehoge"のレコードが削除された


再度、レコードの挿入(値を"hogehoge"にする)
mysql> insert into meibo.user (Name) values ('hogehoge');
Query OK, 1 row affected (0.00 sec)


レコードの表示
mysql> select * from meibo.user;
+-----+----------+
| Num | Name     |
+-----+----------+
|   1 | linux    |
|   3 | hogehoge |
+-----+----------+
2 rows in set (0.00 sec)
"hogehoge"のレコードが登録された


レコードの更新(「Name」が"hogehoge"のレコードを"fedora"に変更)
mysql> update meibo.user set Name="fedora" where Name="hogehoge";
Query OK, 1 row affected (0.00 sec)
一致数(Rows matched): 1  変更: 1  Warnings: 0


レコードの表示
mysql> select * from meibo.user;
+-----+--------+
| Num | Name   |
+-----+--------+
|   1 | linux  |
|   3 | fedora |
+-----+--------+
2 rows in set (0.00 sec)
"hogehoge"のレコードが"fedora"に変更された


・MySQL monitorの終了
mysql> exit;
Bye

こんな時は・・・

  • サービスを起動した時に以下のメッセージが出力された場合、新しい MySQL 権限テーブルを生成すれば解決できる場合があります。

「mysql-server」起動時のログ

 Table 'mysql.host' doesn't exist

テーブル生成
# mysql_install_db --user=mysql

phpMyAdminインストール

# cd /usr/local/src/

# svn checkout https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/tags/RELEASE_2_11_9_6/phpMyAdmin phpmyadmin
← phpMyAdminダウンロード

# mv phpmyadmin/ /var/www/html/ ← ダウンロードしたphpMyAdminを所定の場所へ移動

php-mysqlインストール

  • phpMyAdminはPHPで動作するため、PHPからMySQLデータベースへアクセスするためのパッケージであるphp-mysqlをインストールする

・php-mysqlインストール確認
# rpm -q php-mysql
パッケージ php-mysql はインストールされていません。

・php-mysqlインストール
# yum -y install php-mysql ← ※インストールされていない場合のみ

phpMyAdmin設定

サンプル設定ファイルをコピー
# cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php
# chmod 660 /var/www/html/phpmyadmin/config.inc.php ← 設定ファイルのパーミッションを変更
# mkpasswd -l 46 ← mkpasswdコマンドでランダムな46桁の文字列を取得
※mkpasswdコマンドはこちらを参照
ojwelolk6gmsswpgqosameeBmtxswelzamM4wdfcfolbz ← ランダムな46桁の文字列

# vi /var/www/html/phpmyadmin/config.inc.php ← 設定ファイル編集
$cfg['blowfish_secret'] = 'ojwelolk6gmsswpgqosameeBmtxswelzamM4wdfcfolbz'; ← mkpasswdコマンドで取得したランダムな46桁の文字列を指定
※上記はログイン時のパスワード暗号化の際に内部的に利用されるパスフレーズであり、ユーザに入力要求されるものではない

$cfg['Servers'][$i]['auth_type']     = 'cookie'; ← 認証モードを「クッキー」にする
$cfg['Lang']     = 'ja-utf-8'; ← 追加(日本語化)
/*
 * End of servers configuration
 */

# chown -R root.apache /var/www/html/phpmyadmin/ ← phpMyAdminの所有者を変更

Apache設定

# vi /etc/httpd/conf.d/phpmyadmin.conf ← phpMyAdmin用Apache設定ファイル作成
Alias /phpmyadmin /var/www/html/phpmyadmin

以下は内部からのみアクセスできるようにする場合のみ指定する

    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 192.168.1 ← 内部ネットワークアドレスを指定


# /etc/rc.d/init.d/httpd reload ← Apache設定反映
httpd を再読み込み中:         [  OK  ]

phpMyAdmin確認

  • http://サーバー名/phpmyadmin/へアクセスして、phpMyAdminのログイン画面が表示されること
    MySQLに登録されているアカウントでログインできること

※http://サーバー名/phpmyadmin/にアクセスして、
「mcrypt 拡張をロードできません。PHP の設定を確認してください」
と表示された場合は、mcryptパッケージをインストールします

# yum -y install php-mcrypt 
# reboot  ← 念の為にサーバーの再起動

もう一度http://サーバー名/phpmyadmin/にアクセスして、ログイン画面が表示されることを確認します。

※CENTOS5での構築環境になります!現バージョンでは違う部分もあるかと思います。

ランダムなパスワードを生成するには

・mkpasswdコマンドインストール
# yum -y install expect

・ランダムなパスワードを生成
# mkpasswd -s 0
kCOjklr83