2015年12月31日木曜日

Scala + Play から MariaDB への接続

Scala + Play から MariaDB への接続

Playでサイト作成するために、最近話題のMariaDBを使うことにしました。

接続の際の手順を残しておきます。

環境

  • OS X 10.11.2
  • scala 2.11.7
  • play 2.4.6

mysqlのアンインストール

過去にMySQLを入れていると色々と引きずってしまうため、最初にアンインストールします。

https://coderwall.com/p/os6woq/uninstall-all-those-broken-versions-of-mysql-and-re-install-it-with-brew-on-mac-mavericks

ps -ax | grep mysql

出てきたプロセスを全て落としてください。

brew remove mysql
brew cleanup
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/var/mysql
sudo rm -rf /usr/local/mysql*
sudo rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
edit /etc/hostconfig and remove the line MYSQLCOM=-YES-
rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /private/var/db/receipts/*mysql*

実行後に、PCを再起動してください。

MariaDBのインストール

私はbrewでインストールしました。

brew install mariadb

==> Installing dependencies for mariadb: openssl
==> Installing mariadb dependency: openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2e.el_capitan.b
######################################################################## 100.0%
==> Pouring openssl-1.0.2e.el_capitan.bottle.tar.gz
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
/usr/local/etc/openssl/certs
and run
/usr/local/opt/openssl/bin/c_rehash
This formula is keg-only, which means it was not symlinked into /usr/local.
Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries
Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:
LDFLAGS:  -L/usr/local/opt/openssl/lib
CPPFLAGS: -I/usr/local/opt/openssl/include
==> Summary
/usr/local/Cellar/openssl/1.0.2e: 465 files, 17M
==> Installing mariadb
==> Downloading https://homebrew.bintray.com/bottles/mariadb-10.1.9.el_capitan.b
######################################################################## 100.0%
==> Pouring mariadb-10.1.9.el_capitan.bottle.tar.gz
==> Caveats
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.
To connect:
mysql -uroot
To have launchd start mariadb at login:
ln -sfv /usr/local/opt/mariadb/*.plist ~/Library/LaunchAgents
Then to load mariadb now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
Or, if you don't want/need launchctl, you can just run:
mysql.server start
==> Summary
/usr/local/Cellar/mariadb/10.1.9: 563 files, 133M

これでインストール完了です。

初期設定はmysqlと同じようにできるようです。

http://qiita.com/kozmats/items/ac32f1ac1d676a09e3b2

MariaDBの初期設定

mysql_secure_installationを実行します。

mysql_secure_installation

最初に現在のrootのパスワードを確認されます。初回はパスワードを設定していないので、そのままenterを押します。

In order to log into MariaDB to secure it, we'll need the current 
password for the root user.  If you've just installed MariaDB, and 
you haven't set the root password yet, the password will be blank, 
so you should just press enter here.

Enter current password for root (enter for none): 

次に、rootのパスワードを変えるか選択します。私は空白のままにしました。

... skipping 

匿名ユーザを削除するか確認されます。必要ないので削除します。

By default, a MariaDB installation has an anonymous user, allowing anyone 
to log into MariaDB without having to have a user account created for 
them.  This is intended only for testing, and to make the installation 
go a bit smoother.  You should remove them before moving into a 
production environment. 
  
Remove anonymous users? [Y/n] Y 
  ... Success! 

localhost以外からrootで接続できるようにするか確認されます。localhostだけに留めたいので、Yにします。

Normally, root should only be allowed to connect from 'localhost'.  This 
ensures that someone cannot guess at the root password from the network. 
  
Disallow root login remotely? [Y/n] Y 
  
  ... Success! 

デフォルトで存在しているtestというDBを削除するか確認されます。不要なため削除します。 By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment.

Remove test database and access to it? [Y/n] Y 
- Dropping test database... 
... Success! 
- Removing privileges on test database... 
... Success! 

権限テーブルについて確認されます。使用するのでYを押します。

Reloading the privilege tables will ensure that all changes made so far 
will take effect immediately. 
  
Reload privilege tables now? [Y/n] Y 
  ... Success! 

Cleaning up... 
  
All done!  If you've completed all of the above steps, your MariaDB 
installation should now be secure. 
  
Thanks for using MariaDB! 

これでMariaDBの設定は終わりです。

設定ファイルに関して

引用元: homebrew から MariaDB をインストールする方法 | homebrew でインストールした mariadb の my.conf の場所https://qiita.com/kozmats/items/ac32f1ac1d676a09e3b2

コマンドでパスを調べると、以下の通り

mysql --help | grep cnf

/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf 
                  order of preference, my.cnf, $MYSQL_TCP_PORT,

実際に homebrew でインストールした mariadb の設定ファイルは /usr/local/etc/my.cnf に存在はしている

実際に中身を見てみると…

#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

#
# include all files from the config directory
#
!includedir /usr/local/etc/my.cnf.d

お作法として /usr/local/etc/my.cnf.d のフォルダに設定ファイルを入れてくれとなっている

DB接続

この記事ではslick無しで接続しています。slickを使う方はこちらの記事を参考にしてください。

slickとはPlay2.4から標準になったデータベースラッパーのことです

依存関係にMariaDBのJDBCを追加

LibraryDependencies ++= Seqのところに

"org.mariadb.jdbc" % "mariadb-java-client" % "1.3.3" を追加します。

設定ファイル書き換え

プロジェクト直下/conf/application.confの下記部分を書き換えます。デフォルトではコメントアウトになっています。

db.default.driver=org.mariadb.jdbc.Driver
db.default.url="jdbc:mariadb://localhost:3306/データベース名"
db.default.user=ユーザ名
db.default.password="パスワード"

# 実行されたSQLを出力するように指定
db.default.logStatements=true

DBに接続してみる

app/Applicationに下記を追加します。

//import文のところに下記を追加
import play.api.db.DB

//def indexに下記を追加
val source = DB.getDataSource()

アクセスしてみる

activator runの実行後にいつものアドレスを開きます。

http://localhost:9000

何かエラーが出ました。

You do not have an implicit Application in scope. If you want to bring the current running Application into context, just add import play.api.Play.current

import play.api.Play.current を追加してくれ というエラーが出ているので

app/Applicationに追加してから再度アクセス

http://localhost:9000

エラー無しで開けました。

0 件のコメント: