[Ruby] gems: ruby-mysql, inifile – .my.cnf の設定をロードして、Ruby から MySQL へ接続する
sql チェックを定期的に行うために、Ruby から利用する方法を調べました。
このあたりでやったことをチェックするスクリプトを作りたい。
Contents
Ruby から MySQL へ接続する
ruby-mysql
gem を利用します。
$ gem update
$ gem install ruby-mysql
Fetching: ruby-mysql-2.9.12.gem (100%)
Successfully installed ruby-mysql-2.9.12
Parsing documentation for ruby-mysql-2.9.12
Installing ri documentation for ruby-mysql-2.9.12
Done installing documentation for ruby-mysql after 1 seconds
1 gem installed
こんな使い方をするそう。
# Ruby/MySQL を読み込みます。
require 'mysql'
# MySQL に接続します。
my = Mysql.new('hostname', 'username', 'password', 'dbname')
# SQL クエリを実行します。
res = my.query('SELECT * from table_heteml')
# 結果を表示します。
res.each do |row|
puts row[0]
end
hostname
には、localhost
が使えないようなので、127.0.0.1
などに変更します。
.my.cnf の設定をロードする
.my.cnf に設定している user, password, host, database の情報を読み込んで利用したい。
こんな形式。
[client_host1]
user=myuser
password=mypass
database=dbname
host=127.0.0.1
inifile
という gem で実現できそう。
$ gem install inifile
Fetching: inifile-2.0.2.gem (100%)
Successfully installed inifile-2.0.2
Parsing documentation for inifile-2.0.2
Installing ri documentation for inifile-2.0.2
Done installing documentation for inifile after 0 seconds
1 gem installed
スクリプト
require 'mysql'
require 'inifile'
# 設定
mycnf = IniFile.load('/home/****/.my.cnf')['client_host1']
sqls = {
default: "SELECT count(*) FROM wp_posts LEFT JOIN wp_postmeta ON wp_posts.id = wp_postmeta.post_id WHERE post_type = 'post' AND post_status = 'publish' AND post_content_filtered = '' AND post_content NOT LIKE '%[/markdown]%' AND meta_key = '_sd_is_markdown' AND meta_value = 1;",
osi: "SELECT count(*) FROM wp_posts LEFT JOIN wp_postmeta ON wp_posts.id = wp_postmeta.post_id WHERE post_type = 'post' AND post_status = 'publish' AND post_content_filtered != '' AND post_content NOT LIKE '%[/markdown]%' AND meta_key = '_sd_is_markdown' AND meta_value = '';",
gfm: "SELECT count(*) FROM wp_posts LEFT JOIN wp_postmeta ON wp_posts.id = wp_postmeta.post_id WHERE post_type = 'post' AND post_status = 'publish' AND post_content LIKE '%[/markdown]%' AND meta_key = '_sd_is_markdown' AND meta_value = 1;"
}
# MySQL に接続します。
my = Mysql.new(mycnf['host'], mycnf['user'], mycnf['password'], mycnf['database'])
sqls.each do |key, sql|
# SQL クエリを実行します。
result = my.query(sql)
# 結果を表示します。
result.each do |row|
count = row[0].to_i
print key, ": ", count, "\n" #if count > 0
end
end
my.close
実行結果
$ ruby mysql.rb
default: 0
osi: 0
gfm: 0