ラベル Mysql の投稿を表示しています。 すべての投稿を表示
ラベル Mysql の投稿を表示しています。 すべての投稿を表示

2017-02-14

MySQLでユーザーに設定したパスワードが効かなくて嵌った件

Amazon Linuxでyumを使ってMySQL56をインストールし起動し、データベースとユーザーを作成して
ログインしてみると設定したパスワードでログインできないではありませんか(;゜〇゜)

mysql> create database mydb character set utf8;
mysql> grant all on mydb.* to user identified by 'xxxxx';

$ mysql -u user -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'user '@'localhost' (using password: YES)

ところが、パスワードなしでログインを試みるとは入れてしまいましたΣ(゜д゜;)

プロセスを確認してみると指定したユーザーでログインしています。

$ mysql -u user
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 5.6.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show processlist;
+----+-----------+-----------+------+---------+------+-------+------------------+
| Id | User  | Host      | db   | Command | Time | State | Info  |
+----+-----------+-----------+------+---------+------+-------+------------------+
| 28 | user      | localhost | NULL | Query   |    0 | init  | show processlist |
+----+-----------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)

ユーザーテーブルどーなってるか確認してみるとユーザー名なし、パスワードなしの登録が入っていました

あやしいです(;一_一)

mysql> select user,host from user;
+-----------+------------------+-------------------------------------------+
| user     | host        | password       |
+-----------+------------------+-------------------------------------------+
| user      | %         | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| root     | 127.0.0.1        |                                           |
| root     | ::1        |                                           |
|     | ip-xxx-xx-xx-xxx |                                           |
| root     | ip-xxx-xx-xx-xxx |                                           |
|     | localhost        |                                           |
| root     | localhost        |                                           |
+-----------+------------------+-------------------------------------------+

mysql> select host from user where user="";
+------------------+
| host     |
+------------------+
| ip-xxx-xx-xx-xxx |
| localhost    |
+------------------+
2 rows in set (0.00 sec)

怪しいので消してしまいましょうヽ(´ー`)/
mysql> delete from user where user="";
Query OK, 2 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

そしたら、次の通り入れました!ヾ(*・∀・)ノ"
$ mysql -u user -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 5.6.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

2014-12-15

MySQLで例外発生時にロールバック処理をさせる

前提条件:テーブルのエンジンがinnodb等、トランザクションに対応したエンジンであること

■サンプルテーブルの作成
mysql> create table test.tbl1(str text) engine=innodb;
Query OK, 0 rows affected (0.02 sec)

mysql> create table test.tbl2(num int unique) engine=innodb;
Query OK, 0 rows affected (0.01 sec)
■既存ストアドプロシージャがあったら削除
mysql> DROP PROCEDURE IF EXISTS test.p;
Query OK, 0 rows affected (0.00 sec)
■デリミタを変更しストアド作成→デリミタを元に戻す
mysql> DELIMITER //
mysql> CREATE PROCEDURE test.p ()
    ->  BEGIN
    ->    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    ->      BEGIN
    ->        ROLLBACK;
    ->        CALL rollback_occured;
    ->      END;
    ->    START TRANSACTION;
    ->      insert into test.tbl1() values('val1');
    ->      insert into test.tbl2() values(1);
    ->    COMMIT;
    ->  END//
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;

■ストアド呼び出し(1回目)…成功パターン
mysql> call test.p;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from test.tbl1;
+------+
| str  |
+------+
| val1 |
+------+
1 row in set (0.00 sec)

mysql> select * from test.tbl2;
+------+
| num  |
+------+
|    1 |
+------+
1 row in set (0.00 sec)
■ストアド呼び出し(2回目)…失敗パターン
mysql> call test.p;
ERROR 1305 (42000): PROCEDURE test.rollback_occured does not exist

mysql> select * from test.tbl1;
+------+
| str  |
+------+
| val1 |
+------+
1 row in set (0.00 sec)

mysql> select * from test.tbl2;
+------+
| num  |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

2回目の呼び出しでtbl1にinsertした後、tbl2へのinsertで失敗し見事rollbackされてますねヾ(*・∀・)ノ"

2014-11-20

mysqlのユーザ作成で、ホスト名%にlocalhostは含まれない

そんな落とし穴があったんですね・・・


grant文でホスト名指定なしのユーザを作成して

mysql> grant all on test.* to user1 identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for user1;
+------------------------------------------------------------------------------------------------------+
| Grants for user1@%                 |
+------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
| GRANT ALL PRIVILEGES ON `test`.* TO 'user1'@'%'             |
+------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

いざ接続!と思ったら蹴られました・・・(´・ω・`)
$ mysql -uuser1 -ppassword
ERROR 1045 (28000): Access denied for user 'user1'@'localhost' (using password: YES)

ホスト部は%になってるからどこからでもOKなのだとばかり思っていたら

localhostは%には含まれないそうなんですね(;´Д`)

なので改めて、ホスト部をlocalhostと指定したユーザも作成してあげます

mysql> grant all on test.* to 'user1'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'user1'@'localhost';
+--------------------------------------------------------------------------------------------------------------+
| Grants for user1@localhost                 |
+--------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
| GRANT ALL PRIVILEGES ON `test`.* TO 'user1'@'localhost'             |
+--------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

これで再度ためしてみると
$ mysql -uuser1 -ppassword
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 24
Server version: x.x.xx Source distribution

Copyright (c) 20xx, 20xx, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
繋がりました!

めでたしめでたしヾ(*・ω・)シ

2013-08-05

mysqldumpでバックアップ on MySQL5.5.32

5.6.xだとすんなり行けたのだけど、5.5.32だと工夫が要るらしい



まずは、5.6.xの方ではうまくいっていたdumpに必要最低限な権限でユーザを作成
mysql> GRANT SELECT, FILE, LOCK TABLES, SHOW VIEW ON *.* TO 'dump'@'localhost'
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

そして、mysqldumpを試してみると・・・怒られた
$ mysqldump -udump --all-databases | grep "\`event\`"
-- Table structure for table `event`
DROP TABLE IF EXISTS `event`;
CREATE TABLE `event` (
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

--eventsを明示的に指定しろってことなのでくっつけてみると・・・また怒られた
$ mysqldump -udump --all-databases --events | grep "\`event\`"
mysqldump: Couldn't execute 'show events': Access denied for user 'dump'@'localhost' to database 'xxx' (1044)

event権限が必要っぽいので権限再設定
mysql> GRANT SELECT, FILE, LOCK TABLES, SHOW VIEW, EVENT ON *.* TO 'dump'@'localhost'
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

そして、リトライ・・・いけたヾ(*・ω・)シ
$ mysqldump -udump --all-databases --events | grep "\`event\`"
-- Table structure for table `event`
DROP TABLE IF EXISTS `event`;
CREATE TABLE `event` (
-- Dumping data for table `event`
LOCK TABLES `event` WRITE;
/*!40000 ALTER TABLE `event` DISABLE KEYS */;
/*!40000 ALTER TABLE `event` ENABLE KEYS */;

2013-06-19

MySQLのslow logに過去n分間に出力されたクエリ数をカウントする

MySQL5.6.12の場合こんな感じでslow logが出力されていました

# Time: 130619 11:11:44
# User@Host: root[root] @ localhost [] Id:  5189
# Query_time: 2.001664 Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1371607904;
select sleep(2);

SET timestamp=1371607904;
のところがユリウス秒になっているのでこの値が10分前のユリウス秒よりも大きい行をカウントしてあげれば良さそうです
tailとawkを使って実現してみました

tail -50 /var/log/mysql/slow.log | awk -F'[=;]' "BEGIN{c=0} /^SET timestamp/ {if(\$2>\"`date --date "10 min ago" +%s`\"){c++}} END{print c}"

tail -50として最新の50行しか見ないようにしていますが環境によって変更すれば良いと思います
とりあえず過去10分ということでdate --date "10 min ago" +%sの値と比較しています
状況によって1 min agoとか1 days agoのように変更すれば過去1分間、過去1日間の出力クエリ数をカウントできます

2012-12-10

Amazon RDS(MySQL)とのクライアント接続でSSLを利用してみた

まずは、クライアントマシンで公開鍵を入手
https://rds.amazonaws.com/doc/rds-ssl-ca-cert.pemからダウンロード
でもって、クライアント起動時にSSL通信を行う旨指示して接続
mysql -h [RDSサーバのホスト名] --ssl_ca=[公開鍵のパス] -u[接続ユーザ名] -p[接続パスワード]
あとは、本当にSSL通信できているか確認
まずは、サーバ側でSSL通信に対応しているかを確認(接続時にエラーになってないから不要だとは思うけど・・・)
mysql> show variables like '%have_%ssl%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl  | YES   |
| have_ssl      | YES   |
+---------------+-------+
2 rows in set (0.02 sec)
次に、SSL通信されているかを確認
mysql> SHOW STATUS LIKE 'Ssl_cipher';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| Ssl_cipher    | AES256-SHA |
+---------------+------------+
1 row in set (0.01 sec)
値が空白でなければSSLで通信されてるそうですヾ(*・ω・)シ

2012-08-17

MySQLのload data infileでcsvを読み込もうとすると失敗する

csvファイルで一気にデータを読み込んでやろうと、カンマ区切りでダブルクォーテーションで囲われたデータですよっと指定してあげて読み込もうとしました
load data infile 'C:\\data\\hoge.csv' replace into table usages fields terminated by ',' enclosed by '"' ignore 1 lines (col1,col2,col3);
すると
ERROR 1265 (01000): Data truncated for column 'col3' at row 1
てな感じで怒られてしまいました(´・ω・`) データファイルの中身の改行コードが問題だったようで、CRLF→LFにしたら読み込めましたヾ(*・ω・)シ

2012-07-15

Can't connect to MySQL server on 'localhost' (10061)

Windows7マシンでRails環境を構築していたら嵌ったのでメモ コマンドプロンプトからは
mysql -uroot -p
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.25a MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
とちゃんと繋がってくれるのに、rakeコマンドで接続しようとすると
rake db:create
Can't connect to MySQL server on 'localhost' (10061)
Couldn't create database for ...
てな感じで怒られてしまい何がなんやら┐('~`;)┌
繋がらないって言ってるし、localhostが解決できていないのか!?
と思って、config/database.ymlのhost: localhostをhost: 127.0.0.1に変更してみると...
繋がった(・・;
でも、mysqlクラインとからは-h localhostとやっても繋がるという
とりあえずpingかけてみると
ping localhost
localhost [::1]に ping を送信しています 32 バイトのデータ:
::1 からの応答: 時間 <1ms
あれ、IP V6のループバックアドレスになってるっ!?
てことで、C:\Windows\System32\drivers\etc\hostsに
127.0.0.1       localhost
という記述を追加。再度pingしてみると
ping localhost
localhost [127.0.0.1]に ping を送信しています 32 バイトのデータ:
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
とIP V4のループバックアドレスが帰ってきてくれました。
この状態にしておけばhost: localhostでもrakeからMySQLに繋がりましたよヾ(*・∀・)ノ"

2012-07-04

Amazon RDSから取得したdumpデータを通常のMySQLサーバへリストア

Amazon RDSをmysqldumpでバックアップで作成したダンプファイルを復元しようと、単純に
zcat hoge.zip | mysql -uxxxx -pxxxx
で良いのかと思ったのですがシステムテーブル関連でエラーが出て、1つ1つ対処していこうかとも思ったのですが量が多かったので-fオプションつけちゃいました(ノ゚⊿゚)ノ
zcat hoge.gz | mysql -f
ERROR 1465 (HY000) at line 8860: Triggers can not be created on system tables
ERROR 1465 (HY000) at line 8884: Triggers can not be created on system tables
ERROR 1465 (HY000) at line 9274: Triggers can not be created on system tables
ERROR 1465 (HY000) at line 9309: Triggers can not be created on system tables
ERROR 1465 (HY000) at line 9344: Triggers can not be created on system tables
ERROR 1142 (42000) at line 9395: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'cond_instances'
ERROR 1044 (42000) at line 9396: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9397: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9431: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'events_waits_current'
ERROR 1044 (42000) at line 9432: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9433: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9467: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'events_waits_history'
ERROR 1044 (42000) at line 9468: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9469: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9503: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'events_waits_history_long'
ERROR 1044 (42000) at line 9504: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9505: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9530: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'events_waits_summary_by_instance'
ERROR 1044 (42000) at line 9531: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9532: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9557: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'events_waits_summary_by_thread_by_event_name'
ERROR 1044 (42000) at line 9558: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9559: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9583: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'events_waits_summary_global_by_event_name'
ERROR 1044 (42000) at line 9584: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9585: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9606: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'file_instances'
ERROR 1044 (42000) at line 9607: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9608: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9631: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'file_summary_by_event_name'
ERROR 1044 (42000) at line 9632: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9633: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9657: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'file_summary_by_instance'
ERROR 1044 (42000) at line 9658: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9659: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9680: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'mutex_instances'
ERROR 1044 (42000) at line 9681: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9682: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9704: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'performance_timers'
ERROR 1044 (42000) at line 9705: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9706: INSERT command denied to user 'root'@'localhost' for table 'performance_timers'
ERROR 1044 (42000) at line 9707: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9729: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'rwlock_instances'
ERROR 1044 (42000) at line 9730: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9731: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9752: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9753: INSERT command denied to user 'root'@'localhost' for table 'setup_consumers'
ERROR 1044 (42000) at line 9754: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9776: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9777: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9798: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9799: INSERT command denied to user 'root'@'localhost' for table 'setup_timers'
ERROR 1044 (42000) at line 9800: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1142 (42000) at line 9821: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'threads'
ERROR 1044 (42000) at line 9822: Access denied for user 'root'@'localhost' to database 'performance_schema'
ERROR 1044 (42000) at line 9823: Access denied for user 'root'@'localhost' to database 'performance_schema'
と、大量にエラーが発生したものの自分で作成したデータなどはリストアされているみたいですヽ(´ー`)/

2012-06-28

Amazon RDSをmysqldumpでバックアップ

何も考えずにmysqldumpを行うとアクセスできないテーブルがあるために怒られてしまいました(´・ω・`)
mysqldump --all-databases  -uxxxx -pxxxx -h xxxx | gzip -c > dump.gz
mysqldump: Got error: 1142: SELECT,LOCK TABL command denied to user 'xxxx'@'hoge.com' for table 'cond_instances' when using LOCK TABLES
そんなときは--skip-lock-tablesを指定してあげると良いみたいです
ついでに--debug-infoをくっつけてデバッグ情報も表示しちゃいます
mysqldump --all-databases --skip-lock-tables --debug-info -uxxxx -pxxxx -h xxxx | gzip -c > dump.gz

User time 4.43, System time 0.35
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 1092, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 10625, Involuntary context switches 182
で行けましたよヾ(*・ω・)シ

2012-06-04

MySQLで抽選処理を行う

+--------+---------+------+-----+---------+-------+
| Field  | Type    | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| number | double  | NO   | PRI | NULL    |       |
| rank   | int(11) | YES  | MUL | NULL    |       |
+--------+---------+------+-----+---------+-------+
number:くじ番号
rank:当選順位

みたいな感じのスキーマのデータがあったとします。
これに対してランダムにレコードを選ぶことで抽選を行い、当選順位をセットしてあげるという処理がSQL一発で出来たのでメモ

1位を3本選んでrankに1をセットするという場合はこんな感じ。
update table1 set rank=1 where rank=NULL order by rand() limit 3;
同様に、2位を10本選んでrankに2をセットするという場合はこんな感じ。
update table1 set rank=2 where rank=NULL order by rand() limit 10;
簡単ですねヾ(*・ω・)シ

2011-11-16

Windows7でMySQL 5.5.17 Ruby1.9.3 Rails3.1.1な環境構築

新しい情報はこっち

またRails案件を担当することになったので、開発環境を最近のものに更新しました。
そのインストールメモをば。
MySQLから
Windows (x86, 32-bit), MSI Installer:mysql-5.5.17-win32.msi
をダウンロードしてインストール
※64bit版ではrails3標準のmysql2アダプタが対応していないので必ず32bit版!
と思ったけど、あとで入れるMySQL Connector/Cが32bit版なら本体は64bit版でも良いみたい(´・ω・`)

rubyinstaller.orgから
RubyInstallers:rubyinstaller-1.9.3-p0.exe
Development Kit:DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe
をダウンロード
rubyinstaller-1.9.3-p0.exeを実行してrubyをインストール
※「PATHにbinディレクトリを追加」にチェックを忘れずに

DevKit-tdm-32-4.5.2-20110712-1620-sfx.exeを実行して適当なディレクトリへ解凍
cmd.exeなどで解凍したディレクトリへ移動
ruby dk.rb init
ruby dk.rb install
でインストール

RubyGemsから
rubygems-1.8.11.zip
をダウンロードして適当なディレクトリへ解凍
cmd.exeなどで解凍したディレクトリへ移動
ruby setup.rb
でインストール

gem install rails --no-ri --no-rdoc -v 3.1.1
で、Rails3.1.1をインストール

gem install mysql2 --no-ri --no-rdoc -v 0.3.9
で、mysql2アダプタをインストール
※0.3.10以降だとエラーになるので0.3.9を使う
MySQL用のDLLをインストール 開発版MySQLライブラリのページへ行き No thanks, just take me to the downloads! をクリックしてmirrorを選択してmysql-connector-c-noinstall-6.0.2-win32.zipをダウンロード zipの中身のmysql-connector-c-noinstall-6.0.2-win32\lib\libmysql.dllをc:\ruby\binへコピーする
そして、早速アプリケーションの作成
rails new app1 -d mysql
作成したディレクトリの中のGemfileを編集する
gem 'mysql2', '~> 0.x.x'
を削除して、次を追加
gem 'mysql2', '0.3.9'

config/database.yml
にmysqlのユーザーとパスワードをセット
※ユーザー名:root パスワード空欄の状態でrakeを実行するとルートのパスワードが変更されてmysqlに接続できなくなったので注意!!

あとは、関連モジュールのインストールとscaffoldで雛型の作成、DBの作成、サーバーの起動
bundle install
rails g scaffold task name:string memo:string
rake db:create
rake db:migrate
rails s

あとは
http://localhost:3000/tasks
にアクセスすればアプリケーションにアクセスできますよヾ(*・∀・)ノ"

2011-06-08

Windows7でRuby1.9.2+Rails3+MySQL5.5な環境を構築

※最近インストールした情報をまとめたこちらもどうぞ!

MySQLから
Windows (x86, 32-bit), MSI Installer:mysql-5.5.13-win32.msi
をダウンロードしてインストール
※64bit版ではrails3標準のmysql2アダプタが対応していないので必ず32bit版!
と思ったけど、あとで入れるMySQL Connector/Cが32bit版なら本体は64bit版でも良いみたい(´・ω・`)

rubyinstaller.orgから
RubyInstallers:rubyinstaller-1.9.2-p180.exe
Development Kit:DevKit-tdm-32-4.5.1-20101214-1400-sfx.exe
をダウンロード
rubyinstaller-1.9.2-p180.exeを実行してrubyをインストール
※「Add Ruby executables to your PATH(PATHにbinディレクトリを追加)」にチェックを忘れずに

DevKit-tdm-32-4.5.1-20101214-1400-sfx.exeを実行して適当なディレクトリへ解凍
cmd.exeなどで解凍したディレクトリへ移動
ruby dk.rb init
ruby dk.rb install
でインストール

RubyGemsから
rubygems-1.8.5.zip
をダウンロードして適当なディレクトリへ解凍
cmd.exeなどで解凍したディレクトリへ移動
ruby setup.rb
でインストール

gem install rails
で、Rails3.0.8をインストール

gem install mysql2 -v 0.2.6
で、mysql2アダプタをインストール
※0.2.7以降だとエラーになるので0.2.6を使う
You've installed the binary version of mysql2.
It was built using MySQL Connector/C version 6.0.2.
It's recommended to use the exact same version to avoid potential issues.

At the time of building this gem, the necessary DLL files where available
in the following download:

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick

And put lib\libmysql.dll file in your Ruby bin directory, for example C:\Ruby\bin
とメッセージが出るので、素直に従う
このgem作った時は必要なDLLファイルは次のダウンロードにあったよ!
lib\libmysql.dllをC:\Ruby\binとかに入れてね!
ってことだけど、URLは無効なようなので
http://dev.mysql.com/downloads/connector/c/6.0.html
へ行って
mysql-connector-c-noinstall-6.0.2-win32.zip
をダウンロードしましょう
あとは展開して、Rubyをインストールしたディレクトリのbin配下へコピーすればOK

そして、早速アプリケーションの作成
rails new app1 -d mysql
作成したディレクトリの中のGemfileを編集する
gem 'mysql2', '~> 0.2.6'
を削除して、次を追加
gem 'mysql2', '0.2.6'
gem 'rake' , ' 0.8.7'

config/database.yml
にmysqlのユーザーとパスワードをセット
※ユーザー名:root パスワード空欄の状態でrakeを実行するとルートのパスワードが変更されてmysqlに接続できなくなったので注意!!

あとは、関連モジュールのインストールとscaffoldで雛型の作成、DBの作成、サーバーの起動
bundle install
rails g scaffold task name:string memo:string
rake db:create
rake db:migrate
rails s

あとは
http://localhost:3000/tasks
にアクセスすればアプリケーションにアクセスできますよヾ(*・∀・)ノ"



チラシの裏:試行錯誤してる途中で出会ったエラーあれこれ(´・ω・‘)
Please install the mysql2 adapter: `gem install activerecord-mysql2-adapter` (no such file to load -- active_record/connection_adapters/mysql2_adapter)

collect2: ld returned 1 exit status
make: *** [mysql2.so] Error 1

uninitialized constant Rake::DSL