MySQLぷちめも

最終更新日時:2014-06-27 00:00:00
MySQL

MySQLのとりとめのないメモです。

パケットサイズの指定


mysqldの最大パケットサイズを指定して起動。
下記の例は16MBに指定。

 # /usr/local/mysql/bin/mysql_safe --set-variable=max_allowed_packet=16M 


SQLファイルを実行


databaseというDBに対してhogehoge.sqlを実行する場合の例:

 # /usr/local/mysql/bin/mysql -u root -p database < hogehoge.sql


DBユーザーの作成


 mysql> grant select,insert,update,delete,create on test_db.* to test@xxx.xxx.xxx identified by 'testpass';


DBユーザーのパスワード変更


以下のようにしてパスワードを変更することが可能です。

 # mysqladmin -u root password testpass2


テーブルのカラムの属性の変更


 mysql> ALTER TABLE table1 MODIFY field1 MEDIUMTEXT;


rootのパスワードを忘れてしまった場合


MySQL のrootのパスワードを忘れてしまった場合、他にスーパーユーザー権限を持つアカウントがなければ、DBの設定変更ができず、下手するとアクセスすらできなくなります。
そのような時は、いったん権限を無効にして MySQL を起動し、パスワードを再設定することにより復旧します。

まずは、MySQL を停止します。
次に、MySQL を起動し直しますが、この時に --skip-grant-tables を指定します。

 # /usr/local/mysql/bin/mysqld_safe --skip-grant-tables 


すると、認証無しで root でアクセスできますので、普通に mysql コマンドで接続し、root のパスワードを再設定します。
設定後は、MySQL を再度停止し、今度は通常の状態で起動します。

デフォルト値を現在日時に設定


いわゆる作成時刻、更新時刻のような日時タイプのデータには、デフォルト値を現在時刻としておくと非常に便利です。
例えば、PostgreSQL では create table 文内で以下のようにカラムを定義します。

 created_on timestamp not null default current_timestamp


MySQLでは、以下のようになりますが、これでは動かない模様。

 created_on datetime not null default current_timestamp


ではどうするかというと、まずは datetime ではなく、MySQL にも timestamp という型があるので、これを使用します。
そして、以下のように、on update 指定を追加します。
※詳細よく分からず(/_\*)

 created_on timestamp not null default current_timestamp on update timestamp


SELECT の結果を CSV 形式で保存


以下のように INTO OUTFILE、FIELDS TERMINATED BY を使用する。

 SELECT * FROM xxx where date_format(access_date,'%Y') = '2010' INTO OUTFILE '/tmp/xxx.csv' FIELDS TERMINATED BY ',';


お問い合わせは 掲示板 にて。