Ubuntu10.10 自宅サーバ構築手順:DB実行環境(MySQL5.1)インストール

この作業前に、以前までVirtualBox仮想環境上で行っていた環境を実サーバに移行。作業自体は仮想環境でも問題無かったんですがVirtualBox利用後OS(Windows7)再起動を掛けるとかなりの確率でブラックスクリーン(?)が頻発するようになったので、これを機にサクッと移行しちまいました。

んで、以下は導入記録となります。



MySQLサーバインストール

  • apt-getコマンドで『mysql-server』をインストール。
absj31@absj31-MyHomeServer:/$ sudo apt-get install -y mysql-server
  • 途中、ルートユーザ(root)のパスワード設定を求められます。任意のパスワードを設定し先へ進む。



  • インストール完了後、導入パッケージ内容を確認。
absj31@absj31-MyHomeServer:/$ dpkg -l | grep mysql | less
ii  libdbd-mysql-perl          4.016-1                Perl5 database interface to the MySQL database
ii  libmysqlclient16           5.1.49-1ubuntu8.1      MySQL database client library
ii  mysql-client-5.1           5.1.49-1ubuntu8.1      MySQL database client binaries
ii  mysql-client-core-5.1      5.1.49-1ubuntu8.1      MySQL database core client binaries
ii  mysql-common               5.1.49-1ubuntu8.1      MySQL database common files, e.g. /etc/mysql/my.cnf
ii  mysql-server               5.1.49-1ubuntu8.1      MySQL database server (metapackage depending on the latest version)
ii  mysql-server-5.1           5.1.49-1ubuntu8.1      MySQL database server binaries and system database setup
ii  mysql-server-core-5.1      5.1.49-1ubuntu8.1      MySQL database server binaries

MySQLサーバ 設定変更

  • インストール完了後、以下のファイルに設定追記・変更を行う。
absj31@absj31-MyHomeServer:/$ sudo vi /etc/mysql/my.cnf
※[mysqld]セクションの以下の行をコメントアウト
#bind-address           = 127.0.0.1
※[mysqld]セクションに以下の内容を追加
default-character-set=utf8
skip-character-set-client-handshake
  • サービスを再起動、設定を反映。
absj31@absj31-MyHomeServer:/$ sudo service mysql restart

MySQLサーバ 各種環境作成

absj31@absj31-MyHomeServer:/$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 55
Server version: 5.1.49-1ubuntu8.1 (Ubuntu)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

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

mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql>
  • DB領域作成。
mysql> create database db_ubuntu10mysql;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_ubuntu10mysql   |
| mysql              |
+--------------------+
3 rows in set (0.00 sec)

mysql> 
  • 利用DB環境を選択後、テーブル作成。
mysql> use db_ubuntu10mysql;
Database changed
mysql> create table MST_PREF ( PREF_CODE CHAR(2) unique, PREF_NAME VARCHAR(20), PREF_CAP  VARCHAR(20), POPULATION integer );
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+----------------------------+
| Tables_in_db_ubuntu10mysql |
+----------------------------+
| MST_PREF                   |
+----------------------------+
1 row in set (0.00 sec)

mysql> 
  • 接続ユーザ許可設定を行う。取り敢えず、指定ユーザからの接続はオールOKにしておいた。
mysql> grant all privileges on db_ubuntu10mysql.* to (作成ユーザ名)@"%" identified by '(作成ユーザのパスワード)' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on db_ubuntu10mysql.* to (作成ユーザ名)@"XXX.XXX.XXX.%" identified by '(作成ユーザのパスワード)' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host,password from mysql.user;
+------------------+---------------------+-------------------------------------------+
| user             | host                | password                                  |
+------------------+---------------------+-------------------------------------------+
| root             | localhost           | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| root             | absj31-MyHomeServer | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| root             | 127.0.0.1           | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| debian-sys-maint | localhost           | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| (作成ユーザ名)   | %                   | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| (作成ユーザ名)   | XXX.XXX.XXX.%       | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
+------------------+---------------------+-------------------------------------------+
6 rows in set (0.00 sec)

mysql> 
  • 確認用データの投入。上記で作成したテーブル(MST_PREF)は都道府県の簡単な情報を定義した物なので、それに合う内容を投入。(注:ファイルの文字コードに注意。今回投入する環境はutf-8なので、ファイルもutf-8で保存)

insert_mst_pref.sql 直

delete from MST_PREF;
commit;
insert into MST_PREF values('01','北海道','札幌市',5644504);
insert into MST_PREF values('02','青森県','青森市',1452977);
insert into MST_PREF values('03','岩手県','盛岡市',1396005);
insert into MST_PREF values('04','宮城県','仙台市',2369489);
insert into MST_PREF values('05','秋田県','秋田市',1161298);
insert into MST_PREF values('06','山形県','山形市',1224811);
insert into MST_PREF values('07','福島県','福島市',2106232);
insert into MST_PREF values('08','茨城県','水戸市',2991976);
insert into MST_PREF values('09','栃木県','宇都宮市',2012585);
insert into MST_PREF values('10','群馬県','前橋市',2034368);
insert into MST_PREF values('11','埼玉県','さいたま市',7057365);
insert into MST_PREF values('12','千葉県','千葉市',6042667);
insert into MST_PREF values('13','東京都','東京(新宿区)',12439663);
insert into MST_PREF values('14','神奈川県','横浜市',8726087);
insert into MST_PREF values('15','新潟県','新潟市',2449511);
insert into MST_PREF values('16','富山県','富山市',1116163);
insert into MST_PREF values('17','石川県','金沢市',1177353);
insert into MST_PREF values('18','福井県','福井市',826240);
insert into MST_PREF values('19','山梨県','甲府市',887115);
insert into MST_PREF values('20','長野県','長野市',2212392);
insert into MST_PREF values('21','岐阜県','岐阜市',2115795);
insert into MST_PREF values('22','静岡県','静岡市',3795025);
insert into MST_PREF values('23','愛知県','名古屋市',7187079);
insert into MST_PREF values('24','三重県','津市',1866282);
insert into MST_PREF values('25','滋賀県','大津市',1370803);
insert into MST_PREF values('26','京都府','京都市',2646715);
insert into MST_PREF values('27','大阪府','大阪市',8839055);
insert into MST_PREF values('28','兵庫県','神戸市',5589566);
insert into MST_PREF values('29','奈良県','奈良市',1431358);
insert into MST_PREF values('30','和歌山県','和歌山市',1052849);
insert into MST_PREF values('31','鳥取県','鳥取市',610260);
insert into MST_PREF values('32','島根県','松江市',749833);
insert into MST_PREF values('33','岡山県','岡山市',1950249);
insert into MST_PREF values('34','広島県','広島市',2878475);
insert into MST_PREF values('35','山口県','山口市',1506921);
insert into MST_PREF values('36','徳島県','徳島市',816163);
insert into MST_PREF values('37','香川県','高松市',1019335);
insert into MST_PREF values('38','愛媛県','松山市',1477307);
insert into MST_PREF values('39','高知県','高知市',803838);
insert into MST_PREF values('40','福岡県','福岡市',5056173);
insert into MST_PREF values('41','佐賀県','佐賀市',869922);
insert into MST_PREF values('42','長崎県','長崎市',1494985);
insert into MST_PREF values('43','熊本県','熊本市',1851157);
insert into MST_PREF values('44','大分県','大分市',1214563);
insert into MST_PREF values('45','宮崎県','宮崎市',1160161);
insert into MST_PREF values('46','鹿児島県','鹿児島市',1768095);
insert into MST_PREF values('47','沖縄県','那覇市',1352496);
commit;
  • 上記ファイルをサーバにアップしておき、MySQLログイン実行後sourceコマンドでインポート。
mysql> source /XXX/XXX/insert_mst_pref.sql;
  • データ確認。
mysql> select * from MST_PREF;
+-----------+--------------+-------------------+------------+
| PREF_CODE | PREF_NAME    | PREF_CAP          | POPULATION |
+-----------+--------------+-------------------+------------+
| 01        | 北海道    | 札幌市         |    5644504 |
| 02        | 青森県    | 青森市         |    1452977 |
| 03        | 岩手県    | 盛岡市         |    1396005 |
| 04        | 宮城県    | 仙台市         |    2369489 |
| 05        | 秋田県    | 秋田市         |    1161298 |
| 06        | 山形県    | 山形市         |    1224811 |
| 07        | 福島県    | 福島市         |    2106232 |
| 08        | 茨城県    | 水戸市         |    2991976 |
| 09        | 栃木県    | 宇都宮市      |    2012585 |
| 10        | 群馬県    | 前橋市         |    2034368 |
| 11        | 埼玉県    | さいたま市   |    7057365 |
| 12        | 千葉県    | 千葉市         |    6042667 |
| 13        | 東京都    | 東京(新宿区) |   12439663 |
| 14        | 神奈川県 | 横浜市         |    8726087 |
| 15        | 新潟県    | 新潟市         |    2449511 |
| 16        | 富山県    | 富山市         |    1116163 |
| 17        | 石川県    | 金沢市         |    1177353 |
| 18        | 福井県    | 福井市         |     826240 |
| 19        | 山梨県    | 甲府市         |     887115 |
| 20        | 長野県    | 長野市         |    2212392 |
| 21        | 岐阜県    | 岐阜市         |    2115795 |
| 22        | 静岡県    | 静岡市         |    3795025 |
| 23        | 愛知県    | 名古屋市      |    7187079 |
| 24        | 三重県    | 津市            |    1866282 |
| 25        | 滋賀県    | 大津市         |    1370803 |
| 26        | 京都府    | 京都市         |    2646715 |
| 27        | 大阪府    | 大阪市         |    8839055 |
| 28        | 兵庫県    | 神戸市         |    5589566 |
| 29        | 奈良県    | 奈良市         |    1431358 |
| 30        | 和歌山県 | 和歌山市      |    1052849 |
| 31        | 鳥取県    | 鳥取市         |     610260 |
| 32        | 島根県    | 松江市         |     749833 |
| 33        | 岡山県    | 岡山市         |    1950249 |
| 34        | 広島県    | 広島市         |    2878475 |
| 35        | 山口県    | 山口市         |    1506921 |
| 36        | 徳島県    | 徳島市         |     816163 |
| 37        | 香川県    | 高松市         |    1019335 |
| 38        | 愛媛県    | 松山市         |    1477307 |
| 39        | 高知県    | 高知市         |     803838 |
| 40        | 福岡県    | 福岡市         |    5056173 |
| 41        | 佐賀県    | 佐賀市         |     869922 |
| 42        | 長崎県    | 長崎市         |    1494985 |
| 43        | 熊本県    | 熊本市         |    1851157 |
| 44        | 大分県    | 大分市         |    1214563 |
| 45        | 宮崎県    | 宮崎市         |    1160161 |
| 46        | 鹿児島県 | 鹿児島市      |    1768095 |
| 47        | 沖縄県    | 那覇市         |    1352496 |
+-----------+--------------+-------------------+------------+
47 rows in set (0.00 sec)

OS環境設定 他

  • ファイアウォール設定でポート:3306を有効化しておく。
  • また、ルータ設定も同様にポート利用可能な状態にしておく。

リモート接続確認(Javaプログラム)

  • Javaプログラムからのリモート接続確認を行う。まずはJDBCドライバの入手。OS(Ubuntu10.10)で以下のコマンドを実行し、JDBCドライバをインストール→ローカルに落とすか、
absj31@absj31-MyHomeServer:/$ sudo apt-get install -y libmysql-java
absj31@absj31-MyHomeServer:/$ cd /usr/share/java
absj31@absj31-MyHomeServer:/usr/share/java$ ls -lt mysql*
lrwxrwxrwx 1 root root     31 2010-12-17 13:00 mysql-5.1.10.jar -> mysql-connector-java-5.1.10.jar
lrwxrwxrwx 1 root root     31 2010-12-17 13:00 mysql-connector-java.jar -> mysql-connector-java-5.1.10.jar
lrwxrwxrwx 1 root root     16 2010-12-17 13:00 mysql.jar -> mysql-5.1.10.jar
-rw-r--r-- 1 root root 754057 2010-01-26 17:02 mysql-connector-java-5.1.10.jar
  • または公式サイトからjarファイルを入手。
  • 上記JARファイルをクラスパスに含めた上で、接続用プログラム作成。
package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MySQLConnectTest {

    public static void main(String[] args) {
        String prefCode = "";
        String prefName = "";
        int population = 0;
        Statement stmt = null;
        ResultSet rs = null;
        Connection con = null;
        System.out.println("START");
        try {
            // JDBCドライバの登録
            String driver = "com.mysql.jdbc.Driver";

            // データベースの指定
            String url = "jdbc:mysql://(設定ホストIPアドレス):3306/(対象DB)?autoReconnect=true";
            // サーバ名またはIPアドレス+データベース名
            String user = "(DB接続ユーザ名)"; // データベース作成ユーザ名
            String password = "(DB接続パスワード)"; // データベース作成ユーザパスワード

            Class.forName(driver);

            // データベースとの接続
            con = DriverManager.getConnection(url, user, password);

            // テーブル照会実行
            stmt = con.createStatement();
            String sql = "SELECT * FROM MST_PREF";
            rs = stmt.executeQuery(sql);

            // テーブル照会結果を出力
            while (rs.next()) {
                prefCode = rs.getString("pref_code");
                prefName = rs.getString("pref_name");
                population = rs.getInt("population");
                System.out.println("都道府県コード:[" + prefCode + "] 都道府県名:[" + prefName + "] 人口:[" + population + "]");
            }
            // データベースのクローズ
            rs.close();
            stmt.close();
            con.close();
        } catch (SQLException e) {
            System.err.println("SQL failed.");
            e.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
    }
}
  • 実行確認。

リモート接続確認(GUI Tools)

  • MySQL Workbench』なるものが公式提供されているようなので、これを使ってみる。以下のURLからmsiファイルを入手、インストール実施。
  • 起動。[SQL Development]→[Open Connection to Start Querying]配下の[New Connection]を選択。

  • 必要事項を入力。入力後は[Store in Valut...]のボタンを押下。

  • パスワードを入力し、[OK]押下。

  • パスワード設定後、[Test Connection]で接続を確認。

  • 作成後、ダブルクリックでエディタを起動。

  • エディタが開き、各種実行が行えるようになる。



最後のWorkBenchツールは色々機能もあって便利そう。

仮想環境下ではリモート接続の箇所でどうにも繋がらず難儀したけれど、今回の件では特に問題無く繋がった。一体何が原因だったんだろう…。謎だ。

ひとまずDB環境構築のうち1つは出来た。後はPostgreSQL/Oracle辺りもこなしていきたい。