query: tag:mysql

 Ruby on Rails で普通にプロジェクトを作成すると sqlite3 が使われるようになっていますが、mysql を使用するにはプロジェクト作成時に -d オプションで mysql を指定します。

sh>>
$ rails new turntable_test -d mysql
create
create README.rdoc
create Rakefile
create config.ru
create .gitignore
create Gemfile
create app
create app/assets/javascripts/application.js
create app/assets/stylesheets/application.css
create app/controllers/application_controller.rb
create app/helpers/application_helper.rb
create app/views/layouts/application.html.erb
create app/assets/images/.keep
create app/mailers/.keep
create app/models/.keep
create app/controllers/concerns/.keep
create app/models/concerns/.keep
create bin
create bin/bundle
create bin/rails
create bin/rake
create config
create config/routes.rb
create config/application.rb
create config/environment.rb
create config/environments
create config/environments/development.rb
create config/environments/production.rb
create config/environments/test.rb
create config/initializers
create config/initializers/backtrace_silencers.rb
create config/initializers/filter_parameter_logging.rb
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/initializers/secret_token.rb
create config/initializers/session_store.rb
create config/initializers/wrap_parameters.rb
create config/locales
create config/locales/en.yml
create config/boot.rb
create config/database.yml
create db
create db/seeds.rb
create lib
create lib/tasks
create lib/tasks/.keep
create lib/assets
create lib/assets/.keep
create log
create log/.keep
create public
create public/404.html
create public/422.html
create public/500.html
create public/favicon.ico
create public/robots.txt
create test/fixtures
create test/fixtures/.keep
create test/controllers
create test/controllers/.keep
create test/mailers
create test/mailers/.keep
create test/models
create test/models/.keep
create test/helpers
create test/helpers/.keep
create test/integration
create test/integration/.keep
create test/test_helper.rb
create tmp/cache
create tmp/cache/assets
create vendor/assets/javascripts
create vendor/assets/javascripts/.keep
create vendor/assets/stylesheets
create vendor/assets/stylesheets/.keep
run bundle install
Enter your password to install the bundled RubyGems to your system:
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.1.0)
Installing i18n (0.6.9)
Using minitest (4.7.5)
Using multi_json (1.8.2)
Using atomic (1.1.14)
Using thread_safe (0.1.3)
Using tzinfo (0.3.38)
Using activesupport (4.0.1)
Using builder (3.1.4)
Using erubis (2.7.0)
Using rack (1.5.2)
Using rack-test (0.6.2)
Using actionpack (4.0.1)
Installing mime-types (1.25.1)
Using polyglot (0.3.3)
Using treetop (1.4.15)
Using mail (2.5.4)
Using actionmailer (4.0.1)
Using activemodel (4.0.1)
Using activerecord-deprecated_finders (1.0.3)
Using arel (4.0.1)
Using activerecord (4.0.1)
Using bundler (1.3.5)
Using coffee-script-source (1.6.3)
Using execjs (2.0.2)
Using coffee-script (2.2.0)
Using thor (0.18.1)
Using railties (4.0.1)
Using coffee-rails (4.0.1)
Using hike (1.2.3)
Installing jbuilder (1.5.3)
Using jquery-rails (3.0.4)
Using json (1.8.1)
Installing mysql2 (0.3.14)
Using tilt (1.4.1)
Installing sprockets (2.10.1)
Using sprockets-rails (2.0.1)
Using rails (4.0.1)
Using rdoc (3.12.2)
Using sass (3.2.12)
Using sass-rails (4.0.1)
Using sdoc (0.3.20)
Installing turbolinks (2.0.0)
Installing uglifier (2.3.2)
Your bundle is complete!
Use bundle show [gemname] to see where a bundled gem is installed.
<<--

 オプションなしでプロジェクトを作成したときとの違いは、作成時の出力で下記のように示されている通り、mysqlのgemが使用されます。

sh>>
Installing mysql2 (0.3.14)
<<--

 また、sqlite3は使用されなくなるので、下記のようなsqlite3に関する出力はなくなります。

sh>>
Using sqlite3 (1.3.8)
<<--

 作成される config/database.yml の差分は下記の通りです。

diff>>
$ diff test_app/config/database.yml turntable_test/config/database.yml
1,2c1
< # SQLite version 3.x
< # gem install sqlite3

MySQL. Versions 4.1 and 5.0 are recommended.

4,5c3,10
< # Ensure the SQLite 3 gem is defined in your Gemfile
< # gem 'sqlite3'


Install the MYSQL driver

gem install mysql2

Ensure the MySQL gem is defined in your Gemfile

gem 'mysql2'

And be sure to use new-style password hashing:

http://dev.mysql.com/doc/refman/5.0/en/old-client.html

7,8c12,14
< adapter: sqlite3
< database: db/development.sqlite3


adapter: mysql2
encoding: utf8
database: turntable_test_development
10c16,18
< timeout: 5000


username: root
password:
socket: /tmp/mysql.sock
16,17c24,26
< adapter: sqlite3
< database: db/test.sqlite3


adapter: mysql2
encoding: utf8
database: turntable_test_test
19c28,30
< timeout: 5000


username: root
password:
socket: /tmp/mysql.sock
22,23c33,35
< adapter: sqlite3
< database: db/production.sqlite3


adapter: mysql2
encoding: utf8
database: turntable_test_production
25c37,39
< timeout: 5000


username: root
password:
socket: /tmp/mysql.sock
<<--

 sqlite3 の設定が mysql 用の設定に変更されているのがわかります。username, password などは適宜変更します。
 binstubsを実行してから、rake でDBを作成します。

sh>>
$ bundle --binstubs
$ bin/rake db:create
<<--

 mysqlにログインしてDBが作成されていることを確認します。

sql>>
mysql> show databases;
+----------------------------+
| Database |
+----------------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| turntable_test_development |
| turntable_test_test |
+----------------------------+
6 rows in set (0.00 sec)
<<--

 動作確認用のサンプルとしてUserModelを作成します。

sh>>
$ bin/rails generate model User name:string email:string
invoke active_record
create db/migrate/20131211224446_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
<<--

 migrate を実行してDBにテーブルを作成します

sh>>
$ bin/rake db:migrate
== CreateUsers: migrating ====================================================
-- create_table(:users)
-> 0.0110s
== CreateUsers: migrated (0.0111s) ===========================================
<<--

 下記のようにテーブルが作成されていれば成功です。

sh>>
mysql> desc users;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
<<--

posted by akanuma akanuma on Thu 12 Dec 2013 at 08:03 with 0 comments

 私物のMacBook AirにMySQLをインストールしました。せっかくなので手順をメモしておきます。

 インストール自体はHomebrewでコマンド一発です。

sh>>
$ brew install mysql
Warning: It appears you have MacPorts or Fink installed.
Software installed with other package managers causes known problems for
Homebrew. If a formula fails to build, uninstall MacPorts/Fink and try again.
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/mysql-5.6.1
######################################################################## 100.0%
==> Pouring mysql-5.6.15.mavericks.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 mysql at login:
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
Then to load mysql now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Or, if you don't want/need launchctl, you can just run:
mysql.server start
==> /usr/local/Cellar/mysql/5.6.15/bin/mysql_install_db --verbose --user=akanuma
==> Summary
/usr/local/Cellar/mysql/5.6.15: 9410 files, 349M
<<--

 インストール後の各手順については上記のインストール時の出力に示されています。
 まずOS起動時にMySQLが起動するように設定します。

sh>>
$ ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
/Users/akanuma/Library/LaunchAgents/homebrew.mxcl.mysql.plist -> /usr/local/opt/mysql/homebrew.mxcl.mysql.plist
<<--

 launchctlコマンドで起動します。

sh>>
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$ ps aux | grep mysql
akanuma 2558 0.0 0.0 2423468 332 s000 R+ 10:54PM 0:00.00 grep mysql
akanuma 2555 0.0 5.3 3081112 448512 ?? S 10:54PM 0:00.40 /usr/local/Cellar/mysql/5.6.15/bin/mysqld --basedir=/usr/local/Cellar/mysql/5.6.15 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql/5.6.15/lib/plugin --bind-address=127.0.0.1 --log-error=/usr/local/var/mysql/Hiroakis-MacBook-Air.local.err --pid-file=/usr/local/var/mysql/Hiroakis-MacBook-Air.local.pid
akanuma 2467 0.0 0.0 2436436 1008 ?? S 10:54PM 0:00.02 /bin/sh /usr/local/opt/mysql/bin/mysqld_safe --bind-address=127.0.0.1
<<--

 mysqlコマンドで接続できることを確認します。

sh>>
$ mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.15 Homebrew

Copyright (c) 2000, 2013, 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.
<<--

posted by akanuma akanuma on Tue 10 Dec 2013 at 23:19 with 0 comments

show processlist だとすべてのDBのコネクションが表示されるので、
show processlist コマンドで出力される情報のもとになっている、
information_schema.processlist テーブルにクエリを発行して確認する。

sql>>
mysql> desc information_schema.processlist;
+---------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| ID | bigint(4) | NO | | 0 | |
| USER | varchar(16) | NO | | | |
| HOST | varchar(64) | NO | | | |
| DB | varchar(64) | YES | | NULL | |
| COMMAND | varchar(16) | NO | | | |
| TIME | int(7) | NO | | 0 | |
| STATE | varchar(64) | YES | | NULL | |
| INFO | longtext | YES | | NULL | |
| TIME_MS | bigint(21) | NO | | 0 | |
| ROWS_SENT | bigint(21) unsigned | NO | | 0 | |
| ROWS_EXAMINED | bigint(21) unsigned | NO | | 0 | |
| ROWS_READ | bigint(21) unsigned | NO | | 0 | |
+---------------+---------------------+------+-----+---------+-------+
12 rows in set (0.00 sec)

mysql>select * from information_schema.processlist where db = ;
<<--

posted by akanuma akanuma on Fri 20 Sep 2013 at 11:35 with 0 comments

前回(uninitialized constant MysqlCompat::MysqlResの対処法参照)はSnow Leopard でしたが、
今回はLionです。
OSのバージョンが変わるたびに問題が起こる気がします。
今回は、以下で回避できるようです。

pre>>
% install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /path/to/rubygems/gems/mysql-2.8.1/lib/mysql_api.bundle
<<--

See Also

posted by genki genki on Wed 31 Aug 2011 at 03:46 with 0 comments

ActiveRecordを使っている場合、
YamlDb
を使うと比較的簡単にデータの移行ができるようです。
script/consoleあたりから、

ruby>>
YamlDb.dump "/path/to/data.yml" # dump
YamlDb.load "/path/to/data.yml" # load
<<--

という感じに使えます。structureは作ってくれないので、migrationなどであらかじめ用意しておきます。

posted by genki genki on Mon 20 Jun 2011 at 16:04 with 0 comments

my.cnfの中で、clientとserver両方max_allowed_packet を適当に大きな数値に指定する。

pre>>
max_allowed_packet = 16M
<<--

config/database.yml でコネクション切断時に再接続する設定をする。

yaml>>
production:
reconnect: true
<<--

これで多分大丈夫。

posted by genki genki on Sat 11 Jun 2011 at 10:01 with 0 comments

MacOS 10.6でmysql gemを使っていると発生するようだ。

pre>>
% sudo ARCHFLAGS="-arch x86_64" gem install mysql
<<--

こんな感じにgemをインストールすればokでした。

posted by genki genki on Wed 13 Oct 2010 at 20:12 with 0 comments

Snow LeopardでMySQLの64-bitバイナリのインストールまではメモなしでできてしまうけど、その後のmysql gemのインストールするためのおまじないはなかなか覚えられないからメモ書きする。

shell-unix-generic>>
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
<<--

なぜARCHFLAGSが必要かというと、gem installする時に32-bitと64-bit両方に対応するgemをビルドしようとするけど、mysqlのバイナリは64-bitのみ(つまりUniversalじゃない)からARCHFLAGSでx86_64を明示的に指定しないとビルドが失敗する。mysql gemは例外的なケースらしいから、tmtmさんに早く直してほしいな。

参考リンク

posted by lchin lchin on Tue 8 Sep 2009 at 16:42 with 0 comments

MySQLのbackupデータの復旧の際、掲題のエラーが発生したので、
対処法をメモしておきます。

このエラーに関する詳しい情報は以下のサイトにまとまっています。

とくに後者では、

段階 4: 非常に困難な修復

などと脅かされるのですが、my.cnfでInnoDB関係の設定が抜けている場合にも同じエラーがでるようです。その場合はInnoDBの設定を書き足せばなおります。

posted by genki genki on Tue 2 Jun 2009 at 08:46 with 0 comments

via http://dev.mysql.com/doc/refman/5.0/en/timestamp.html

自分用MySQLメモ:
デフォルト値を指定する場合、NOW()ではなくてCURRENT_TIMESTAMPというお話。

shell>>
CREATE TABLE items (
id INTEGER NOT NULL PRIMARY KEY,
title VARCHAR(255) NOT NULL DEFAULT('title'),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
<<--

###mysql.comより

CREATE TABLE t (
ts1 TIMESTAMP DEFAULT 0,
ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);

http://dev.mysql.com/doc/refman/5.0/en/timestamp.html

posted by satoko satoko on Fri 6 Feb 2009 at 10:17 with 0 comments

MySQLでInnoDBを使っているとdata_dirの下にibdata1というファイルが出来て、このファイルサイズがだんだん大きくなっていきます。
大分肥大化してきていたので、テーブル毎に分割する設定を行いました。

/etc/mysql/my.cnf

pre>>
(snip)
[mysqld]
innodb_file_per_table
(snip)
<<--

あとはDBへのアクセスを止めて、mysqlを再起動します。
再起動したら、

sql>>
ALTER TABLE articles TYPE=InnoDB;
<<--

を実行すると、data_dirの下のデータベース名のディレクトリの下に、
いままであったarticles.frmの他にarticles.ibdのようなファイルができています。

See Also

posted by genki genki on Thu 18 Dec 2008 at 12:24 with 0 comments

WordPressとRailsを動かすためにMySQLとRuby/gem/Railsをインストールする。

mysql5のインストール

aptitude install mysql-server mysql-client libmysqlclient15-dev

aptitude install libmysql-ruby1.8

文字コードをUTF8に設定

/etc/mysql/my.cnf に下記内容を追記。

[client]

default-character-set=utf8

[mysqld]

default-character-set=utf8

/etc/init.d/mysql restart

mysql> status

でlatin1が混じっていないか確認する。

mysqladminのインストール

aptitude install mysql-admin

Ruby1.8.7インストール

aptitude install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8 libopenssl-ruby sqlite3 libsqlite3-ruby1.8

sudo ln -s /usr/bin/ruby1.8 /usr/bin/ruby

sudo ln -s /usr/bin/ri1.8 /usr/bin/ri

sudo ln -s /usr/bin/rdoc1.8 /usr/bin/rdoc

sudo ln -s /usr/bin/irb1.8 /usr/bin/irb

ruby -v

ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]

gem1.3.1のソースインストール

cd /usr/local/src/

wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz

tar xvf rubygems-1.3.1.tgz

cd rubygems-1.3.1

ruby setup.rb

ln -s /usr/bin/gem1.8 /usr/bin/gem

gem -v

1.3.1

gem update

gem install rails

Railsのインストール

rails -v

Rails 2.2.2

ImageMagickのインストール

aptitude install imagemagick librmagick-ruby1.8 librmagick-ruby-doc libfreetype6-dev xml-core -y

aptitude install libmagick9-dev

export GEM_HOME=/var/lib/gems/1.8

export RUBY_LIB=/usr/lib

gem install rmagick

Successfully installed rmagick-2.8.0

posted by ysakaki ysakaki on Sun 14 Dec 2008 at 03:21 with 0 comments

MacportsでMySQLをインストールしているという前提で。
普通に

pre>>
sudo gem install msyql
<<--

をすると、libmysqlclientが見つからずにインストールが失敗します。
そこで、/opt/local/lib/ruby/gems/1.8/gems/mysql-2.7に移動し、

pre>>

ruby extconf.rb --with-mysql-config=/usr/local/mysql/bin/mysql_config

make

make install

<<--

でOK。

posted by genki genki on Fri 12 Sep 2008 at 14:18 with 2 comments

あなたは今までにインストールしたMySQLの数を覚えているだろうか。

何度となくインストールしてきたMySQLですが、
Macの場合は、いくつもインストールする方法があるので、
どれが良いか迷いました。
@shachiさんにアドバイスをいただいて
パッケージ版をインストールしてみたのですが、
Macports版のmysql5-develも捨てがたく、
結局mysql5-devel+GUI Toolsという構成に落ち着きました。

Macportsからインストールした場合、/opt/local
以下にインストールされるので、以下のようにシンボリックリンクを
作成しました。

  • /var/run/mysqld -> /opt/local/var/run/mysql5
  • /etc/my.cnf -> /opt/local/etc/mysql5/my.cnf

だいたいこんな感じです。
非常に快適になりました。

See Also

追記

なぜか不思議なことに、Macを再起動すると、/var/run/mysqld
に作成したシンボリックリンクが消えてしまうことがわかりました。
/private/var/run/mysqldにしてみるなど、
いろいろ試してみたのですが、
結局再起動するとなくなってしまいます。
何が原因なのかまだわからないですが、
とりあえず対処療法として、mysqlの起動スクリプトでシンボリックリンクを作成するようにしてみました。

/opt/local/etc/LaunchDaemons/org.macports.mysql5-devel/mysql5-devel.wrapper(抜粋)

sh>>

Start

Start()
{
ln -s -f /opt/local/var/run/mysql5 /private/var/run/mysqld
/opt/local/share/mysql5/mysql/mysql.server start
}
<<--

これでひとまず大丈夫になりました。
しかし再起動するとシンボリックリンクが無くなってしまうというのは不可解ですね。きっと何か理由があるんでしょうけれど。

posted by genki genki on Fri 12 Sep 2008 at 11:58 with 1 comment

サーバーを再起動したらmysqlが起動していなかった。 サービスとして登録するには以下。
shell-unix-generic>>

chkconfig --list mysqld

mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off
#chkconfig --level 345 mysqld on
#chkconfig --list mysqld
mysqld 0:off 1:off 2:off 3:on 4:on 5:on 6:off
<<shell-unix-generic

posted by ysakaki ysakaki on Wed 6 Aug 2008 at 17:22 with 0 comments

From yesterday to this morning, we had set up two MySQL servers as master-to-master configuration.

One server is located in Tokyo, the other is in Shiga.
They are replicated each other in order to get our system redundant and load-balanced. We had used
OpenVPN
for this purpose.
It is very easy to setup by using tunnelling.

Okey, we agree with that the VPN will become the neck of a bottle if our network get heavy traffic.
But fortunately or unfortunately, it is not so heavy.
So we considered that a performance issue would be still no problem, against a stability issue.

posted by genki genki on Tue 26 Feb 2008 at 08:14 with 0 comments
記事の引越しから漏れていたのでサルベージ。

Ruby on Railsを使ってある程度大きめのアプリケーションを作るようになると、ごく稀に「Lost connection to MySQL server during query」というエラーが発生するようになる事があります。

この問題については、yuguiさんの記事
Lost connection to MySQL server during query
に詳しいです。

結局のところ、はっきりとした解決策も見つからず、ごく稀なので放置気味になっていたのですが、先日解決策を見つけたので改めて紹介します。

解決策:

mysql_retry_lost_connectionというrubygemを使うことで、コネクションのLostが発生した場合に、自動的に再接続を試みるようにActiveRecordの挙動を修正することが出来ます。

詳細はこのGemの作者のTylerさんの記事
Saying goodbye to lost connections in Rails」で説明されています。

使い方:

# sudo gem install mysql_retry_lost_connection

を行い、config/environment.rbの中でrequire 'mysql_retry_lost_connection'をすればOK。
rails
2日ほど使ってみたところ、このGemを導入してから一度もLostConnectionのエラーが発生しなくなりました。このGemが効果を表さない場合もあると思いますが、Lost Connectionでお悩みの方には朗報ではないかと思います。

See Also

posted by genki genki on Wed 21 Nov 2007 at 13:30 with 0 comments