こんにちは続けてMySQLを導入してperlから実行できるようにしたいと思います。
データベースはユーザーデータの管理や、商品の管理な様々な用途に使えます。
はじめに
今回はrpmのMySQLパッケージをインストールして、まずはコマンドから実行しDatabaseとTableを作成したいと思います。その後、PerlからDBIを通じてデータベースをいじってみたいと思います。
MySQLのインストール
以下のサイトを参考にしました。
qiita.com
まずはじめに、既存にMySQLがインストールされているかを確認します。
yum list installed | grep mysql
入っていれば消してください。
yum erase mysql-libs
wget http://downloads.mysql.com/archives/get/file/MySQL-client-5.6.20-1.linux_glibc2.5.x86_64.rpm wget http://downloads.mysql.com/archives/get/file/MySQL-server-5.6.20-1.linux_glibc2.5.x86_64.rpm wget http://downloads.mysql.com/archives/get/file/MySQL-shared-compat-5.6.20-1.linux_glibc2.5.x86_64.rpm wget http://downloads.mysql.com/archives/get/file/MySQL-devel-5.6.20-1.linux_glibc2.5.x86_64.rpm yum install MySQL-client-5.6.20-1.linux_glibc2.5.x86_64.rpm yum install MySQL-server-5.6.20-1.linux_glibc2.5.x86_64.rpm yum install MySQL-shared-compat-5.6.20-1.linux_glibc2.5.x86_64.rpm yum install MySQL-devel-5.6.20-1.linux_glibc2.5.x86_64.rpm
インストールが確認できたら起動します。
service mysql start
次に初期化を行うのですが、パスワードが必要になります。パスワードは以下で確認してください。
view /root/.mysql_secret
それでは、初期化を行います。
mysql_secure_installation
実行すると初めに現在のパスワードを聞いてきます。次に新しいパスワードを設定するか、などいくらか質問が来るので答えてください。
これでインストールと初期化が完成です。
MySQLのログインは以下のコマンドで行います。
mysql -u root -p
実行するとSQLを打てるモードになります。抜ける時は
\q
で抜けてください。
(tips)InnoDBに関するエラー対策
もしかすると、初期化の際に以下のようなエラーが出てしまうかもしれません。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
これは何らかの原因でmysql start した時にsockが生成されなかったためです。
僕の場合は/var/lib/mysql/user.errに以下のようなErrorが出ていました。
[ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
理由はmysqlがもう裏で起動していたためです。プロセスをキルして、再起動することで解決しました。
以下に参考にしたURLを貼っておきます。
データベースとテーブルの作成(コマンド)
それでは用意ができたところで、DBとtableをコマンドで作成します。
参考にしたサイトは以下のサイトです。
Perl/DBIを使ってMySQLでSELECT文を実行する - 調べる.DB
MySQLでログインしたあと、以下のコマンドを入力します。
mysql> create database db; mysql> use db; mysql> create table t1 (a int, b varchar(10)); mysql> insert into t1 values(1,'aaaa'),(2,'bbbb'),(3,'cccc'); mysql> select * from t1; mysql> \q
実行結果は以下のようになります。
+------+------+ | a | b | +------+------+ | 1 | aaaa | | 2 | bbbb | | 3 | cccc | +------+------+ 3 rows in set (0.00 sec)
データの閲覧(perl)
それではいま作成したデータをperlで表示したいと思います。
ですがその前にperlからMySQLを操作するDBIとDBDをインストールします。
DBIはData Base Interface
DBDはData Base Driver
です。以下のコマンドで行います。
yum -y install perl-DBI perl-DBD-MySQL
それでは、実際に表示を行うperlのコードをいかに示します。
test.pl
#!/usr/bin/perl use strict; use DBI; our $DB_NAME = "db"; our $DB_USER = "root"; our $DB_PASS = "自分の指定したパスワード"; our $DB_HOST = "localhost"; our $DB_PORT = "3306"; my $dbh = DBI->connect( "dbi:mysql:dbname=$DB_NAME;host=$DB_HOST;port=$DB_PORT", "$DB_USER", "$DB_PASS") or die "$!\n Error: failed to connect to DB.\n"; my $sth = $dbh->prepare("SELECT * FROM t1;"); $sth->execute(); while (my $ary_ref = $sth->fetchrow_arrayref) { my ($a, $b) = @$ary_ref; print "$a, $b\n"; } $sth->finish; $dbh->disconnect;
参考サイトとほぼ同じですが。。。
実行は以下のコマンドで行います。
perl test.pl
以上で終了となりましす。
(tips)DBパスワードに関する注意
パスワードを設定するときの注意点なのですが、@などの文字をパスワードに含める時は以下のように\をしっかりつけてください。
僕はコレのせいでなんでデータベースにつながらないのかをかなりまよいました。
our $DB_PASS = "nantoka\@nantoka";
終わりに
終わってみるとあっという間ですが、perlソースを実行するのに二時間くらいかかってしまいました。これを経て学んだことは
- エラーログをしっかり見る
- わからない時は基本的なことを確認する
です。皆さんも参考にしてください。