色々調べてアクセスに成功したのでメモ。
サーバー環境: Vine Linux 4.2、MySQL 5.0.27-0vl6
クライアント環境: WindwsXP SP3、Ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
RubyはOne-Click Ruby Installerでインストールしたもの。
MySQLサーバーのアクセス設定
まず、Linuxにログインし、MySQLサーバーにアクセス権を設定しておく
$ mysql -u [MySQLユーザー名] -p mysql> grant all privileges on [データベース名].* to [ユーザー名]@'192.168.0.xxx'; mysql> flush privileges;
[MySQLユーザー名]はMySQLの設定を変更する権限のあるユーザー名(rootとか)。[ユーザー名]はクライアントからアクセスするときにRuby-MySQLに渡すユーザー名。'192.168.0.xxx'にはクライアントのIPアドレス。
クライアントにRuby-MySQLライブラリをインストール
RubyでMySQLサーバーに接続するために、MySQLライブラリを使う。
MySQLライブラリはGemでインストールできる。
C:\> gem install mysql
場合によっては複数の選択肢から選ばなければならないらしいが、自分の環境では選択肢は無く、しかもRDocの処理でエラーが出た。けど、さしあたり問題なく動作している。
クライアントにlibmysql.dllをインストール
libmysql.dllをRubyのパスの通った場所(\ruby\binなど)に置いておく必要がある。libmysql.dllはぐぐってダウンロードする。
アクセスしてみる
MySQLサーバーにアクセスしてテーブルの中身を全て表示するRubyスクリプトは次のようになる。
require 'mysql' SERVER_IP = "[サーバーのIPアドレス]" USER_NAME = "[ユーザー名]" # <- MySQLにgrantでアクセスを許可したユーザー名 PASSWORD = "[データベースパスワード]" DATABASE_NAME = "[データベース名]" TABLE_NAME = "[テーブル名]" begin # 接続 my = Mysql::new(SERVER_IP, USER_NAME, PASSWORD, DATABASE_NAME) # 送信するSQL文の文字コードがShift-JISであることを知らせておく # これをしないと結果の文字コードが変になる my.query("set names sjis") # テーブルの要素を全て取得 res = my.query("select * from #{TABLE_NAME}") # 結果を表示 res.each do |col| col.each do |item| puts item end end resucue puts $! # エラーを表示 end
参考:
http://vm.selfip.com/20061127-1238_52.html
mysql4.02のサーバで外部からのアクセスを許可する設定の仕方を… - 人力検索はてな