//php the_content_rss('', FALSE, '', 68); ?>
最近MacでRailsの環境を行っているのですが、Rails3にアップデート( たしかMacPortでアップデートしたような)
して、Mysqlで開発を行おうとしたらエラーがでたので、そのメモを書いておきます。
下記のようなコマンドでプロジェクト?を生成して、さっそく走らしてみる下記のエラー
$ rails new hoge -d mysql
$ cd /hoge/
$ rails s
dyld: lazy symbol binding failed: Symbol not found: _mysql_get_client_info
Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.3.2/ext/mysql2/mysql2.bundle
Expected in: flat namespace
dyld: Symbol not found: _mysql_get_client_info
Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.3.2/ext/mysql2/mysql2.bundle
Expected in: flat namespace
検索してみていろいろ試してみるが、どれもうまく行かず、最終的に下記のページの内容で解決
http://stackoverflow.com/questions/5894102/bundle-command-the-wrong-mysql2-gem-always-0-3-2
gemのmysqlのライブラリの上げて解決
$ sudo gem uninstall mysql2 -i /Library/Ruby/Gems/1.8
$ gem 'mysql2','0.2.7'
$ bundle install
//php the_content_rss('', FALSE, '', 68); ?>
本日Mysqlにトラブルがありました、その際の復旧方法をメモしておきます。
さっそくサーバにログインして、確認してみるとMysqlのプロセスは確認できました。
Mysqlに接続を試みるものも接続できず。
とにかく、一度再起動を行ってみました。
#/etc/rc.d/init.d/mysqld restart
Stopping MySQL: [ OK ]
Timeout error occurred trying to start MySQL Daemon.
Starting MySQL: [FAILED]
停止はできるが起動ができませんでした。
解決方法
こういう時は、かならずログにヒントが隠されているのでさっそくログを確認する。
ログの場所はこちら:/var/log/mysqld.log
やはりログに答えは書いてありました、mysqlslow.log に問題ありとのこと。
このログファイルは、SQLの実行が5秒以上かかった場合に残すようにように設定していたログです。
# tail /var/log/mysqld.log
110312 17:01:13 [ERROR] /usr/libexec/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28)
110312 17:01:13 [ERROR] Can't start server: can't create PID file: No space left on device
Number of processes running now: 0
110312 17:01:13 mysqld restarted
/usr/libexec/mysqld: Error writing file '/var/log/mysqlslow.log' (Errcode: 28)
110312 17:01:13 [ERROR] Could not use /var/log/mysqlslow.log for logging (error 28). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it.
さっそくmysqlslow.logを調査してみる。
mysqlslow.logのサイズが4GB以上になっている。。。。。
とりあえず、ファイルを退避させる。
その後Mysqlの起動を試みる。
# /etc/rc.d/init.d/mysqld start
Starting MySQL: [ OK ]
見事に起動。
課題
上記の対応で、サービスは稼動しましたが、いろいろと課題あります。
- 1.ログファイルにローテションを組むようにしとけ!!
- 2.Nagiosで監視してるけど、今回の現象はプロセスは生きているので発見できず、、、監視体制の見直し
- 3.SQLが5秒以上もかかっているプログラムを潰さないと。。。
恐らく、ログは一時期サーバに高負荷に陥ったときに増産されたと思うんんですが、でも対策しないと
//php the_content_rss('', FALSE, '', 68); ?>
CakephpでMysqlで取得したデータのみだけ文字化けの現象がおきましたので、その時の解決法をメモしておきます。
解決法
/app/config/database.phpに文字コードを指定
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'pass',
'encoding' => 'utf8' , ← 文字コードを指定
'database' => 'dbname',
'prefix' => '',
);
上記の設定で解決できました。
2月
23
- Mysqlの大文字と小文字の区別
-
2月 23, 2010
//php the_content_rss('', FALSE, '', 68); ?>
CakephpでWindowsのローカル環境で開発して、Linuxのサーバに公開したときにひかかったので記載しておきます。
Windowsなど、一部のOSはMysqlは、テーブル名など名前の大文字・小文字は区別しないようです。
Linuxの環境下では、大文字・小文字の区別はするのでCakephpでエラーがでた次第です。
(³ɤ…)
8月
11
- MySQL のER図作成方法
-
8月 11, 2009
//php the_content_rss('', FALSE, '', 68); ?>
SQL Mk-2を選択した理由は、日本語に対応していること、開発が頻繁に行われていることを理由に選択しました。
ほかにも「DBDesigner」なども試そうかと思いましたが、時間もあまりなかったので、諦めました。
上記のリンクから、ダウンロードしてきて、インストールします。
MySQL ODBCのインストール
MYSQLで接続する場合は、ODBCから接続しないといけないようなので、「MySQL ODBC」をインストールしました。
http://dev.mysql.com/downloads/connector/odbc/3.51.html#win32
上記のURLからダウンロードしてきて、インストールします。
SQL Mk-2のMYSQLの接続方法の詳細はこちらのURLにあります。
http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/tips/mysql_connect/
動作画面

//php the_content_rss('', FALSE, '', 68); ?>
今開発中のシステムの開発方法を明記しておきます。
PHPで開発しております。
- フレームワーク
- symfony まだまだ使いこなせていない
- テンプレートエンジン
- Smarty
ドキュメント、まだまだ知らないことがたくさんあります。
- データベースのコネクション
- PDO
はじめはやっかいだったが、今はないともう離れられない。
- テスト
- PHPUnit
まだ開発途中なので、これから検証してみる感じです。
- OS
- CentOS 5 final
- データベース
- MySQL 5.0.45
phpMyAdminとかで管理してるけど、あんまりセキュリティ上あんまりよくないとかで使ってない人が多いのを最近よく聞く。
- エディタ
- Emacs 22.1
Meadowは重いのがなぁ。。。早くなる方法ないのかな
//php the_content_rss('', FALSE, '', 68); ?>
phpMyAdminを落としてきます・
wget http://prdownloads.sourceforge.net/phpmyadmin/phpMyAdmin-2.11.8.1-all-languages.tar.gz
ファイルの移動
mv phpMyAdmin-2.11.8.1-all-languages.tar.gz /home/document/www/
解凍します。
xf phpMyAdmin-2.11.5.1-all-languages.tar.gz
わかりやすい名前にリネーム
mv ./phpMyAdmin-2.11.8.1-all-languages /phpMyAdmin
php-mysqlが入っていなければインストール
[root@localhost ~]# yum install php php-mysql
設定ファイルのコピー
[root@localhost ~]# cp /home/document/www/phpMyAdmin/config.sample.inc.php /home/document/www/config.inc.php
パーミッションの変更
[root@localhost ~]# chmod 660 /home/document/www/phpMyAdmin/config.inc.php
config.inc.phpを変更
[root@localhost ~]# vi /home/document/www/phpMyAdmin/config.inc.php
$cfg['blowfish_secret'] = '';パスワードを追加
$cfg['Lang'] = 'ja-utf-8';日本語のために追加
php-mbstringとphp-mcryptのインストール
これをインストールしておかないと警告がでるので
mbstring
文字のエンコーディングなどに使用します。
警告内容
「PHP の mbstring 拡張が見つかりませんでした。マルチバイト文字セットを使用しているようですが、mbstring拡張がないと
phpMyAdmin は文字列を正しく分割できないため予期しない結果になることがあります」
[root@localhost ~]# yum -y install php-mbstring
mcrypt
暗号の処理に使用します。
警告内容
「mcrypt 拡張をロードできません。PHP の設定を確認してください」
[root@localhost ~]# yum -y install php-mcrypt
上記の内容で、phpMyAdminの設置が完了
//php the_content_rss('', FALSE, '', 68); ?>
CentOSにMysqlをインストール
yumでMysqlをインストール
[root@localhost ~]# yum -y install mysql-server
MySQL設定ファイル編集
[root@localhost ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
#aracter-set = utf8←コメントアウト+
default-character-set=utf8←追加
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=utf8←追加
Mysqlを立ち上げてみる
[root@localhost ~]# /etc/rc.d/init.d/mysqld start
Timeout error occurred trying to start MySQL Daemon.
MySQL を起動中: [失敗]
失敗したので原因をさぐるためログを確認
[root@localhost ~]# vi /var/log/mysqld.log
InnoDB: Apply batch completed
080819 18:05:21 InnoDB: Started; log sequence number 0 43655
080819 18:05:21 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
080819 18:05:21 mysqld ended
MySQL データを初期化し、システム テーブルを作成さしてみる
[root@localhost ~]# mysql_install_db
もう一度起動してみる
[root@localhost ~]# /etc/rc.d/init.d/mysqld start
Timeout error occurred trying to start MySQL Daemon.
MySQL を起動中: [失敗]
またまた失敗したのでログを確認
エラーが変わる。
[root@localhost ~]# vi /var/log/mysqld.log
080819 18:25:48 [ERROR] /usr/libexec/mysqld: Can't find file: './mysql/host.frm' (errno: 13)
080819 18:25:48 [ERROR] /usr/libexec/mysqld: Can't find file: './mysql/host.frm' (errno: 13)
080819 18:25:48 [ERROR] Fatal error: Can't open and lock privilege tables: Can't find file: './mysql/host.frm' (errno: 13)
調べると”/var/lib/mysql”のアクセス権が正しくないらしい
ぼくはすべてがrootユーザの権限になっていた。
mysqlに権限を与える
[root@localhost ~]# chown -R mysql:mysql /var/lib/mysql
見事に機動・・・時間かかった。
[root@localhost ~]# /etc/rc.d/init.d/mysqld start
MySQL を起動中: [ OK ]