2015年12月31日木曜日

Scala + Play から MariaDB への接続

Scala + Play から MariaDB への接続

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

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

構築環境
OS X 10.11.2
scala 2.11.7
play 2.4.6

1. 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再起動……

2. 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


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の設定ファイルに関しては、下記を参考にしてください。
(参考元リンクより引用)
>コマンドでパスを調べると、以下の通り
>> 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 のフォルダに設定ファイルを入れてくれとなっている

======================================
※ここから下 slick無しでの接続のため、
slickを使う方はこちらの記事を参考にしてください。
slickとはPlay2.4から標準になったデータベースラッパーのことです
======================================

3. 依存関係にMariaDBのJDBCを追加

LibraryDependencies ++= Seqのところに

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



4. 設定ファイル書き換え

プロジェクト直下/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

5. DBに接続してみる


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

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

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

6. アクセスしてみる

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


エラー無しで開けた。


今回はここまで
次はSQL実行に取り掛かりたい

0 件のコメント: