* [[MySQL]]

#contents

** インストール
mysqlはインストールされている可能性がありますので、
 rpm -qa | grep mysql
で確認します。バージョンが怪しかったので、とりあえずけしておきました。
 rpm -qa | grep mysql| xargs rpm -e
消えなかった場合は、--nodepsでインストールしました。http://dev.mysql.com/downloads/から4.1.7をダウンロードして、
 rpm -Uvh --nodeps MySQL-server-4.1.7-0.i386.rpm
 rpm -Uvh --nodeps MySQL-client-4.1.7-0.i386.rpm
 rpm -Uvh --nodeps MySQL-devel-4.1.7-0.i386.rpm
もししくはソースからのコンパイルです。http://dev.mysql.com/downloads/mysql/4.1.html#Sourceから落として、
 ./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql
 --with-charset=sjis --with-extra-charsets=all --with-berkeley-db
 --with-innodb --without-readline --with-named-thread-libs="-lpthread"
この --with-named-thread-libs="-lpthread"は、CentOS5にインストールしたときに(MySQL4.0.25)
 configure: error:This is a linux system and LinuxThreads was not found.
とエラーが出ちゃったので、指定してます。
また他にエラーがでるときは
 --without-readline
をはずしてみましょう。
 make
CentOS5で下記のエラーが
 mysqld.o: In function `main':
 mysqld.cc:(.text+0x3ee0): undefined reference to `my_fast_mutexattr'
 mysqld.o:mysqld.cc:(.text+0x4143): more undefined references to `my_fast_mutexattr' follow
 collect2: ld returned 1 exit status
んーー http://bbs.fedora.jp/read.php?FID=9&TID=3606を参考にmysql-4.0.25/sql/sql_class.ccを修正します。39行目あたりに
 #include <assert.h>
がありますので、その下に
 #ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
 pthread_mutexattr_t my_fast_mutexattr;
 #endif
を追加します。するとmakeは通りました。
opensuse11.1で
 mysql.cc:1641: error: expected primary-expression before '?' token 
とでたので、gccとg++を4.1にしてやるといけました。~
また他のディストリビューションでやっている時に
 ld: cannot find -lstdc++
とのエラーが..
 ln -s /usr/lib/libstdc++.so.5.0.7 /usr/lib/libstdc++.so
として再びmakeでいけました。
 make install
このとき、/usr/local/mysql/share/mysqlにmy-???.cnfがありますので、自分にあったファイルを/etcにmy.cnfでコピーしましょう。また/usr/local/mysql/binにパスをとおしておきましょう。~
展開したディレクトリのsupport-filesに
 mysql-server.sh
がありますので、自動起動する場合は使用しましょう。~
mysql-server.shを開いて、@で囲ってあるところを編集します。
 basedir=/usr/local/mysql
 bindir=/usr/local/mysql/bin
 if test "$datadir" != "/usr/local/mysql/var"
 pid_file=$datadir/`/bin/hostname`.pid
RedHatの場合
 cd support-files
 cp mysql.server.sh /etc/rc.d/init.d/mysqld
 chmod 755 /etc/rc.d/init.d/mysqld 
 chkconfig --add mysqld 
 chkconfig --level 345 mysqld on
FreeBSDの場合
 cd support-files
 cp mysql.server.sh /usr/local/etc/rc.d/
 chmod 755 /usr/local/etc/rc.d/mysql.server.sh
次にDBD::mysqlをインストールします。これはperl用のドライバです。http://www.cpan.org/modules/by-module/DBD/から
DBD-mysql-2.9004.tar.gzをダウンロードしました。では解凍してコンパイルです。(20070618時点ではDBD-mysql-4.005.tar.gz)
 perl Makefile.PL
 make
 make test
 make install
ここでエラーが
 failed: Can't load '/root/DBD-mysql-4.005/blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.12
とか出る場合は、
 cd /usr/local/lib
 ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.12 libmysqlclient.so.12
で作っておきました。

次にPHPで使用するにはPHPのソースを展開しているディレクトリで(4.3.9)
 ./configure --with-mysql
 make
 make install
ユーザがないときは作成しておきます。
 groupadd mysql
 useradd -g mysql -d /dev/null -s /bin/false mysql
もしくはもう一度[[PHP]]をインストールしてください。ではMySQLを初期化します。
 scripts/mysql_install_db
/usr/local/mysql/varにできてました。これは、my.cnfのdatadirのところです。また権限を変更しておきます。
 chown -R mysql:mysql /usr/local/mysql/var
/etcにmy.cnfがいます。では起動して、パスワードを変更しておきましょう。
 mysqld_safe --user=mysql &
 /usr/local/mysql/bin/mysqladmin -u root password 'new-password'
 /usr/local/mysql/bin/mysqladmin -u root -h localhost password 'new-password'
たまたまwindows版でもやってみたんですが、password 'new-password'の'までパスワードとして登録されてしまいました。ほんま? さらにmy.iniにパスワードがそのまま書いてあるけど、なんだこれ?
では接続してみましょう。
 mysql -u root -p
windowsの場合はsetup.exeで終わり。インストールディレクトリのbin\winmysqladmin.exe
を実行しましょう。userとpasswordを設定してログインすると、my.iniがWINDOWS配下にできております。
http://www.nihon-eng.co.jp/c-break/TechNote/mysql/MySQL5_Inst.htm
を参考にしてみてください。サービスはbin\mysqld-nt --install-manualで登録できます。
またよく/etc/my.cnfとありますが、my.cnfはここにおく必要があるのでしょうか。別にここでなくてもよく、最初に参照するのが、/etc/my.cnfで、次にデータディレクトリの下のmy.cnf、次に--defaults-extra-fileで指定されたファイルとなります。ではこれらに複数存在する場合は、内容が加算されるようなので、注意しましょう。

http://web.kuicr.kyoto-u.ac.jp/manual/mysql/manual.ja_Access_denied.html

** インストール Ver5
http://dev.mysql.com/downloads/mysql/5.0.htmlから5.0.13をダウンロードしました。~
5.1も同じでした。
 wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.13-rc.tar.gz/from/http://www.softagency.co.jp/MySQL/
 tar xzvf mysql-5.0.13-rc.tar.gz
 cd mysql-5.0.13-rc
どのようなオプションがあるか見ておきます。
 ./configure --help
 ./configure --prefix=/usr/local/mysql5 --with-mysqld-user=mysql
 --with-charset=binary --with-extra-charsets=all --with-berkeley-db
このとき
 checking for termcap functions library... configure: error: No curses/termcap library found
ってエラーが出た場合は、
 yum install ncurses-devel
で入れてやりました。
 make
あれ?
 exec: g++: not found
なんでいれてないんだろ?
 yum install gcc-c++ 
でインストール
 make install
ではデータディレクトリの権限を変更しておきましょう。ユーザmysqlがない場合は作成しておきます。
 groupadd mysql
 useradd -g mysql -d /dev/null -s /bin/false mysql
またcnfファイルをコピーしておきます。
 cp support-files/my-large.cnf /etc/my.cnf
my.cnfのmysqldにdefault-character-set=ujisを追加して、
 [client]
  default-character-set=ujis
 [mysqld]
  default-character-set = ujis
  skip-character-set-client-handshake
 [mysqldump]
  default-character-set = ujis
 [mysql]
  default-character-set = ujis
また[mysqld]にinnodb_file_per_tableを追加しておくと、ibdata1にデータが保存されずに、テーブル毎に.ibdファイルが作成されます。~
ではデータベースを初期化します。
 scripts/mysql_install_db
おっ?5.1の時エラーがでたぞ
 unknown option '--skip-federated'
my.cnfにskip-federatedってあるからか。とりあえずコメント
 chown -R mysql:mysql /usr/local/mysql5/var/
では起動させてパスワードを変えておきます。
 /usr/local/mysql5/bin/mysqld_safe --user=mysql &
 /usr/local/mysql5/bin/mysqladmin -u root password 'new-password'
 /usr/local/mysql5/bin/mysqladmin -u root -pnew-password  -h localhost.localdomain password 'new-password'
文字化けについてはこちらを参考にさせていただきました。http://wota.jp/ac/?date=20061011#c15~
また起動用のファイルは上記で説明しているRedHatの場合と同じです。~
GUIのツールはhttp://dev.mysql.com/downloads/gui-tools/5.0.htmlにあります。
参考:[[【MySQLウォッチ】第36回 文字化けのメカニズム>http://itpro.nikkeibp.co.jp/article/COLUMN/20070614/274802/?P=1&ST=oss]]
** アップグレード
[[www.mysql.gr.jp4.1以上(含む5) への移行支援>http://www.mysql.gr.jp/frame/modules/bwiki/?Contrib]]

4.1に移行する場合はパスワードの長さに対応するためにmysql_fix_privilege_tablesというスクリプトがあるらしい。
また
 [mysqld]
 old-passwords
で逃げるかです。しかし、これ以上に問題なのは、VARCHARとCHARの長さがはバイトから文字になってしまったことです。ですので、いったん
mysql5を止めた後、mysql5のデータディレクトリにmysql4.0のデータをコピーして、mysql5を起動します。その後、
長さを変更していきます。変更後myisamchk -r *.MYIでリペアして、mysql5を起動させます。んーーー~
varcharとcharの長さの変更は、http://www.mysql.gr.jp/frame/modules/bwiki/?Contrib#content_1_2にある、mysql_change_char_len.shを使わせていただきました。
 ./mysql_change_char_len.sh --fix --user=hogeuser --password=hogepass -h127.0.0.1 -P3307
ポートを3306から3307に変更している場合です。そのままであれば、-P3307はいりません。若干桁数が1増えている項目があったりします。
参考~
[[http://private.ceek.jp/archives/001772.html]]~
[[http://www.klab.org/media/mysql/]]~
[[http://tech.feedforce.jp/mysql_40_to_50.html]]~
[[MYSQL 4.0.x から 5.X系への移行>http://questionbox.jp.msn.com/qa4075662.html]]~
/usr/local/mysql5/varにコピーするだけでいけるんだ。おっいけた... mysqlすげー ん?でもデータはみれているけど、sqlの結果がおかしい...~
ん?5.1はだめっぽいな。もうちょっと試してみよ。5.0から5.1はいけたな。
**複数バージョンを共存
起動時(mysqld)に --defaults-fileオプションで、my.cnfを指定してやります。もしくはMYSQL_HOME/varにmy.cnfをコピーしてやります。また各バージョンのmy.cnfのpid-file,port,socketがぶつからないように(当然データも)設定しておきます。

**デーモンでの起動
 cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
でコピーしてやります。あとは
 chmod 755 /etc/init.d/mysqld
 chkconfig --add mysqld


** コマンド
パスワードを設定している場合は -u root -pを付加しましょう。パスワードを聞かれるのがいやな場合は、-u root --password=passとしましょう。もしくは -uroot -ppassです。~
書き方は知っているだけも3通りで、下記はみな同じです。
 mysql -u root -p rootpassword
 mysql -uroot -prootpassword
 mysql -user=root --password=rootpassword
-起動
 mysqld_safe --user=mysql &
-停止
 mysqladmin shutdown
 mysqladmin shutdown -uroot -phogepass
-生存確認
 mysqladmin ping 
-バージョン確認
 mysqladmin version
 mysqladmin version -uroot -phogepass
-接続
 mysql -u root --password=passwd database名
ポートを指定する場合は、ホストも指定してやって、
 /usr/local/mysql5/bin/mysql -h127.0.0.1 -P3307 -uroot -phogepass
としないと
 /usr/local/mysql5/bin/mysql -P3307 -uroot -phogepass
だけではポートが無視されちゃいました。
-パラメータ確認
 mysqladmin -uroot -phoge variables
** MySQLコマンド
-データベース選択
 USE hogedb;
-データベースを見る
 SHOW DATABASES;
-設定値をみる
 show variables;
-プロセスを見る
 SHOW PROCESSLIST;
連続で見る場合は、
 watch -n1 'mysql -h192.168.1.1 -P3306 -uhogeuser -phogepass -e"show processlist"'
参考[[12.5.4.24. SHOW PROCESSLIST 構文>http://dev.mysql.com/doc/refman/5.1/ja/show-processlist.html]]~
-スレッドの情報を表示させる。(実行中のSQLを見る)
 SHOW [FULL] PROCESSLIST
またIDを指定して、KILL idで終了させることができる。
-テーブルの一覧
 SHOW TABLES;
-ユーザ権限表示
 SHOW GRANTS FOR hoge@'localhost';
-サーバの状態表示
 SHOW STATUS [LILE pattern]
-テーブルの状態表示
 SHOW TABLE STATUS
サイズとか更新された日付とかわかります。
** SQL
-ユーザ作成 権限を変更した場合は、FLUSH PRIVILEGESを実行してください。権限に関する情報はメモリによみこまれていますので、再度読み込み直します。
 grant create,drop,select,insert,update,delete on *.* to test@localhost identified by 'passwd';
onは{テーブル名 | * | *.* | データベース名.*}です。
 grant all privileges on *.* to user@'192.168.1.0/255.255.255.0' identified by 'passwd';
-ユーザ削除
 delete from mysql.user where User='a';
-パスワード変更
 SET PASSWORD FOR root=PASSWORD('hoge');
もしくは
 SET PASSWORD FOR root@localhost=PASSWORD('hoge');
-ユーザの一覧
 select User,Host from mysql.user;
-データベース作成
 create database aaa;
文字コードを指定する場合は、
 create database aaa character set sjis;
他にもutf8,ujis (EUC-JP)
-データベース削除
 drop database aaa;
-項目追加
 ALTER TABLE hogetable ADD COLUMN hogekoumoku VARCHAR(100) NOT NULL;
-項目削除
 ALTER TABLE hogetable DROP hogekoumoku;
-長さ変更
 ALTER TABLE hogetable MODIFY COLUMN hogekoumoku VARCHAR(30);
** 型
|~データ型|~内容|~データ範囲|
|int|4バイト整数|-2147483648~2147483647|
|int unsigned|4バイト整数|0~4294967295|
|bigint|8バイト整数|-9223372036854775808~9223372036854775807|
|float|不動小数点数|-3.402823466E+38~-1.175494351E-38|
|double|倍精度不動小数点数|-1.7976931348623157E+308~-2.2250738585072014E-308|
|char( )|固定長文字列|最大長255バイト|
|varchar( )|可変長文字列|最大長255バイト |
|text|可変長文字列|最大長65535バイト|
|date|日付|1000-1-1~9999-12-31|
|datetime|日付時刻|1000-1-1 00:00:00~9999-12-31 23:59:59|
|enum(' ', ' ', ...)|列挙|最大65535個の固有値|
|set(' ', ' ', ...)|リスト|最大64個の要素|

** my.cnf
mysqladmin -u root variables -pで値を確認してからいろいろさわってみましょう。
あとmysql --helpも
-key_buffer=256M~
検索に使われるインデックスをバッファに保存する際のメモリサイズです。
メモリに余裕がある場合増やすとパフォーマンスが向上します。
-table_cache=256~
データのキャッシュサイズです。
値を大きくすることでディスクのI/Oが減りパフォーマンスが向上します。
-max_allowed_packet=1M~
入力データ保持のための最大バッファサイズです。
画像など、大きなデータ挿入をおこなう際に増やします。
-sort_buffer=1M~
ソートをおこなう際に使用するバッファサイズです。
値を大きくすることでORDER BYやGROUP BYをクエリーに用いた場合のパフォーマンスが向上します。
-record_buffer=1M~
値を大きくすることでインデックスを含まないクエリーの実行速度が上がります。
-long_query_time=1~
mysqladmin statusコマンドで表示されるSlow queriesにカウントされる場合のしきい値(単位は秒)を指定します。
-log-slow-queries=ファイル名~
遅いクエリのログの出力先を指定
-join_buffer = 131072~
大量のjoin が発行される場合はjoin_bufferを増やします。
-log=ファイル名~
クエリのログをはきます。SQLの確認や開発の時などに

** ODBC
http://dev.mysql.com/からMySQL Connector/ODBCのGenerally Available (GA) 3.51.09 
を選択してダウンロードします。
** JDBC
http://dev.mysql.com/downloads/からMySQL Connector/JのGenerally Available (GA) 3.1.6を選択してダウンロードします。
その中にmysql-connector-java-3.1.6-bin.jarがありますので、これをCLASSPATHに追加します。ドライバクラスは、
 org.gjt.mm.mysql.Driver
URLは
 jdbc:mysql://hogeserver/hogedb?useUnicode=true&characterEncoding=SJIS
もしくは文字コードによってはSJISにeuc-jpなんですが、これをxmlファイルにかくとこの&でエラーになるはずです。ですので、
 & → &amp;
として、
 jdbc:mysql://hogeserver/hogedb?useUnicode=true&amp;characterEncoding=SJIS
とします。また全角-が化けるとか~が化ける場合は、
 jdbc:mysql://hogeserver/hogedb?useUnicode=true&amp;characterEncoding=MS932
とします。これはあくまでSJISでDBを作成しており、pageEncodingをMS932にしている場合です。またSetCharacterEncodingFilter.javaもつかって、web.xmlに
 <filter>
   <filter-name>Set Character Encoding</filter-name>
   <filter-class>filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>MS932</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>
としてます。MySQL4.0の場合です。他のバージョンは試していません。しかし[[Oracle]]もそうですが、正直どうにかならんもんでしょうか。これ。

** MySQL Control Center
http://dev.mysql.com/downloads/other/mysqlcc.html

** ダンプ・リストア
 mysqldump -F -l hogedb > dump.sql
オプションの-Fはすべてのログをflushします。 -lはREAD LOCALロックをかけます。
 mysql hogedb < dump.sql

** mytop
topコマンド風にMySQLの負荷状況がみれます。http://jeremy.zawodny.com/mysql/mytop/からダウンロードしました。
 tar xzvf mytop-1.4.tar.gz
 perl Makefile.PL
おっと
 Warning: prerequisite Term::ReadKey 2.1 not found.
とでました。[[CPAN]]を参考にして、
 perl -MCPAN -e shell
 install Term::ReadKey
再度mytop-1.4.tar.gzを解凍したディレクトリで、
 perl Makefile.PL
 make
 make install
ここでDBD::mysql 1 not found.と出る場合は、上のほうの記述にしたがってDBD::mysqlをインストールしておきましょう。インストールが終わったんで、実行してみます。
 mytop -uhogeuser -phogepass -ddatabase -s1
hogeuser,hogepassはユーザ、パスワードです。-dでデータベース、-sは画面のリフレッシュ時間です。遅いSQLがあればfを押してIDを入力するとSQL全体が見えます。http://jeremy.zawodny.com/mysql/mytop/mytop.htmlにマニュアルがあります。
** チューニング
まず時間がかかっているSQLをEXPLAIN を頭につけて実行します。すると、
 table,type,possible_key,key,key_len,ref,rows,Extra
に値が設定されているかと思います。まずkeyが適切に使われているか、またrowsの値が小さいかを確認しましょう。またkeyについては5.0以前は1テーブルについてひとつしかインデックスは使われないそうです。ですので、異なる項目でORとかを使うような検索は注意しましょう。また!=は使わないように。EXPLAINでrowsをみてみよう。~
んー5にあげてindex_mergeが使われているかどうか調べているですが、さっぱり使ってくれない。
もしやMyISAMはだめなの?
[[MySQL の最大性能を得る方法は?>http://www.mysql.gr.jp/Manual/mysql-3.21.31/manual_Performance.html]]~
[[第6章 最適化>http://aqua.sun.ddns.vc/free/docs/mysql5.1/optimization.html#mysql-indexes]]~
[[ mysqlを高速化したいときのチューニング方法 >http://it.kndb.jp/entry/show/id/5]]~
** バイナリログ
以前からvarの下にマシン名-bin.001とかいうようなファイルが複数できていたので、気にになって調べてみると、バイナリログ というもので、更新するステートメントが入ってます。mysqldを--log-bin=logfilenameで起動するとできるようです。ここでファイル名を指定してなければ、マシン名-binでファイルが作成されます。RESETコマンドで消すことができるようです。
 RESET MASTER;
もし部分的に消したい場合は、
 PURGE MASTER LOGS TO 'machine-bin.005';
として、
 SHOW MASTER LOGS;
を見てみると005より小さいバイナリログが削除されます。時間を指定るする場合は、
 PURGE MASTER LOGS BEFORE '2005-01-01 01:01:01';
とすると2005-01-01 01:01:01より古いデータが消されます。
またバイナリログがvarの下にたまってきましたので、場所を変えておきます。
 log-bin         = /usr/local/mysql/binlog/binlog
また
 max-binlog-size=256M <=バイナリログの最大ファイルサイズ
 expire-log-days=7  <=ログの保持期間
 binlog-do-db=dbname  <=バイナリログを取るdb
 binlog-ignore-db=dbname <=バイナリログを取らないdb
も指定できます。

http://www.softagency.co.jp/mysql/Manual/4.1.1/html-split/manual_4.html#SEC314~

** 移行
別のマシンに同じ環境を作るとき、/usr/local/mysql/varの中の対象のデータをコピーしてやる。その後、データベースmysqlのuserとdbをエクスポートして、移行先で、必要なデータをインポート~
innodbの場合は、
 ib_logfile0
 ib_logfile1
 ibdata1
もコピーします。~
参考:~
[[7.5.5.3. 複数テーブルスペース - 各テーブルを独自の .ibd ファイルに入れる>http://dev.mysql.com/doc/refman/4.1/ja/multiple-tablespaces.html]]~
[[【MySQLウォッチ】第23回 押さえておきたいバックアップとリストアのポイント>http://itpro.nikkeibp.co.jp/article/COLUMN/20060122/227654/?ST=oss&P=2]]~

** TOOL
MySQL提供の[[MySQL GUI Tools>http://dev.mysql.com/downloads/gui-tools/]]か[[Navicat>http://www.navicat.jp/]]が便利。ただしnavicatは有償
他にも[[つみきウェブへ!!>http://www.hi-ho.ne.jp/tsumiki/]]のCommon SQL Environment ver1.59(http://www.fiberbit.net/user/mo880d4/cse/winclients-3_22_28_sjis.zipもしくはhttp://www.fiberbit.net/user/mo880d4/cse/winclients-3_22_28_euc.zipがいる)があります。~
あれ?[[navicat Lite版>http://www.navicat.jp/mysql/download/index_lite.html]]ってあるんだ。これでいいか。

** TIPS
***別のDBにコピー
 mysqlhotcopy -u root -p hoge dbmoto dbsaki
なぜかDBD-mysql-4.005.tar.gzでは駄目で、DBD-mysql-2.9008.tar.gzではうまくいけました。mysqlは4.0です。
スペースは空けないといけない。
***PHPが違うsocketを見ているとき
php.iniのmysql.default_socket = "/tmp/mysql.sock"に記述してやりましょう。
***ERROR 1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client
http://dev.mysql.com/doc/mysql/ja/Old_client.htmlから
 mysql> UPDATE user SET Password = OLD_PASSWORD('mypass')
    -> WHERE Host = 'some_host' AND User = 'some_user';
や
 SET PASSWORD FOR hoge@localhost = OLD_PASSWORD('hogepass');
後は
 mysql> FLUSH PRIVILEGES;
つまり以前はパスワードのハッシュが、16バイトだったのに4.1からは40バイトに変更されているためにこのエラーがおこっている。普段から、16バイトで作成したい場合は、my.cnfに
 [mysqld]
 old-passwords
としておけばいい。これはどうかと思いますが... もしくはwhich mysqlでmysqlの居所をみてみましょう。もしかしたら、ver3のコマンドが動いてるかもしれません。
***SQL実行
mysql -u root -pyourpassword database < hoge.sql
***テーブル最適化
削除を繰り返していると肥大化してくるので、最適化しておきましょう。
 optimize table hogetable;
***javaで全角カナのパをlikeでとるとケもとってくる。
dbをujisでやっていると、なぜか、where koumoku like 'パ%'とするとケもとってきます。アとかは大丈夫。なんだこりゃ。sjisにするととりあえず動きました。
***漢字の十で落ちた
文字列に漢字の十がある場合にinsertが失敗しました。この場合は、
 [mysqld]
 default-character-set=sjis
 [mysql]
 default-character-set=sjis
のあたりを見直しましょう。ソ、申などもそれにあたります。
***likeで検索されない
例えば
 hoge like '%ほ%'
とかしても検索されない場合があります。そのときは、
 hoge like binary '%ほ%'
***1030: Got error 127 from table handler
対象のテーブルが壊れているようなので、
 repair table hogetbl;
を実行。チェックだけの場合は、
 check table hogetbl;
***ログ
safe_mysqld --log=/var/log/mysql
logオプションで出力したいログファイル名を指定します。
***日付加算
日付を1日koumoku1に加算
 koumoku1 + interval "1" DAY
日付を1日5時間koumoku1に加算
 koumoku1 + interval "1 5" DAY_HOUR
***java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00'
JDBCで日付のデータを取得しようとしたら、SQLExceptionが投げられました。そもそもこの問題はJava側で"0000-00-00 00:00:00"の値を持てないことに発端しているとのことです。~
参考:[[皆さんの使っているJDBCドライバのバージョン>http://www.mysql.gr.jp/mysqlml/mysql/msg/12214]]
***AUTO_INCREMENTで生成された値の取得方法
last_insert_id()で取得可能
***年月で集計
 select date_format(datekoumoku,'%Y-%m') ,count(*) from table1 where group by date_format(datekoumoku,'%Y-%m')
** 調べ物
[[SQLインジェクションを防ぐプロキシ「GreenSQL」>http://www.moongift.jp/2007/10/greensql/]]
** リンク
http://www.mysql.gr.jp/ FAQはためになります。~
http://dev.mysql.com/doc/mysql/ja/Upgrading-from-4.0.html バージョン 4.0 から 4.1 へのアップグレード~
[[第4章 データベース管理>http://dev.mysql.com/doc/mysql/ja/MySQL_Database_Administration.html]]~
http://www.atmarkit.co.jp/flinux/rensai/mysql01/mysql01b.html~
http://www.y-kit.jp/saba/xp/mysqllinuxinst.htm~
http://digibot.jp/tips/linux/004.html~
http://perldoc.jp/docs/modules/DBD-mysql-2.1026/DBD/mysql/INSTALL.pod~
http://tsuttayo.sytes.net/mysql/~
[[MySQLクイック・リファレンス(osCommerce)>http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html]]~
[[phpMyAdmin]]~
[[MySQLノウハウ>http://txqz.net/blog/2006/12/13/0943]]~
[[【MySQLウォッチ】第14回 サーバー設定を見直してMySQLの性能を引き出す>http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050213/156109/]]~
[[MySQLクイック・リファレンス>http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html]]~
** 参考書籍
[[MySQL全機能リファレンス>http://www.amazon.co.jp/exec/obidos/ASIN/477412169X/worried-22]]~
[[実践ハイパフォーマンスMySQL>http://www.amazon.co.jp/exec/obidos/ASIN/4873112095/worried-22]]~

** コメント
-#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS