主に IT 技術を整理するためにメモ的に書き溜めています。少しだけフリーソフトもあるよ。コメントを残すには、 facebook を使ってください。

MySQL 設定やコマンド

昔は全部コマンドラインでやっていたんだけど、最近はもうずっと phpmyadmin を使っちゃってるな。 万が一に備える意味と、初心に戻るという意味で、一応まとめておく。

データベース全般情報系

全テーブルのリストとサイズ

SELECT * FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_SCHEMA = '{your_db}';

全インデックスのリストとサイズ

SELECT database_name, table_name, index_name, ROUND(stat_value * @@innodb_page_size / 1024 / 1024, 2) size_in_mb FROM mysql.innodb_index_stats WHERE stat_name = 'size' AND index_name != 'PRIMARY' ORDER BY size_in_mb DESC;

もっと読む

sqlite でテーブル一覧を取得するには

.tables コマンドで見れます。

$ sqlite3 test.sqlite
SQLite version 3.7.2
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
sql_master test_table

PostgreSQL command 一覧

データベース一覧を見る

dbname=# SELECT * FROM pg_database;

*in MySQL

show databases;

テーブル一覧を見る

dbname=# \d

*in MySQL

show tables;

データベースを変更する

dbname=# \c {db_name}

*in MySQL

use {db_name};

mysqldump に必要な権限は

mysqldump を行うユーザが必要な権限は以下の通り。

global

  • FILE
GRANT FILE ON  *. * TO  'user'@192.168.0.200';

DB

  • SELECT
  • SHOW VIEW
  • LOCK TABLES
GRANT SELECT , LOCK TABLES , SHOW VIEW ON  `db_name` . * TO  'user'@192.168.0.200';

mysql.proc

もしダンプにプロシージャも含めたい場合のみ。

  • SELECT
GRANT SELECT ON  mysql.proc TO  'user'@192.168.0.200';

innodb_log_file_size のサイズを変更するには

新年の大掃除という事でサーバのログアラートを眺めていたら、
mysql から innoDB 関連の以下のようなエラーがみつかったので修正する事に。

100101  2:50:34  InnoDB: ERROR: the age of the last checkpoint is 9433664,
InnoDB: which exceeds the log group capacity 9433498.
InnoDB: If you are using big BLOB or TEXT rows, you must set the
InnoDB: combined size of log files at least 10 times bigger than the
InnoDB: largest such row.

エラー発生時間から大体何が起きたのか把握できたので、 innodb_log_file_size を増やす事に。
いつものように My.cnf を修正して再起動すれば良いだろうと思ってやったら、以下のようなエラーが。

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 33554432 bytes!

どうやら、少し違ったらしい。


もっと読む

Wordpress を SQLite で動かすには

うちのレンタルサーバのスペックが低いため MySQL 動かしたくないので、 Wordpress を SQLite で動かすようにしてみた。

してみたと言っても、プラグインがあるのでそれを入れるだけ。でもそもそも個人や一企業で使うブログを MySQL なんてもので動かすのもナンセンスな話だし、 SQLite は早い。なので、一応メモ。


もっと読む

REPLACE INTO と INSERT ON DUPLICATE KEY UPDATE の違い

この二つ、用途はほとんど同じで、「レコードが存在していれば更新、なければ追加」っていうことなんだけど、
実は更新を行う処理は少し違う。

REPLACE INTO は名のごとくレコードを置き換える。
プライマリキーを検索ユニーク条件として更新処理を行う際には素直に UPDATE すしてくれるが、
プライマリキー以外のユニークキーを条件にして更新する場合は、 DELETE して INSERT する。そのためプライマリキーをオートインクリメントなどにしてあると、新しい ID が振られてしまいえらいことになる。

これに対して INSERT ON DUPLICATE KEY UPDATE は素直に UPDATE のみを行うの。

用途に合わせて使い分ければどちらも便利。ただ、どちらも MySQL の拡張機能です。

Mac でスタートアッププログラムを切り替えるには

この前 MySQL をパッケージでインストールしたら、 Mac 起動時に mysqld が勝手に起動する。これを起動しないようにするには、 /etc/hostconfig を修正すれば良い。

$ sudo vi /etc/hostconfig
AFPSERVER=-NO-
AUTHSERVER=-NO-
AUTOMOUNT=-YES-
NFSLOCKS=-AUTOMATIC-
NISDOMAIN=-NO-
TIMESYNC=-YES-
QTSSERVER=-NO-
WEBSERVER=-NO-
SMBSERVER=-NO-
SNMPSERVER=-NO-
MYSQLCOM=-NO-

ちなみにスタートアップスクリプトの場所は、
/Library/StartupItems/MySQLCOM/MySQLCOM
/usr/local/mysql/support-files/mysql.server
なので、これを使って起動したいときは、

$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
$ sudo /usr/local/mysql/support-files/mysql.server start

SQLite で unable to open database file

このブログでは SQLite を使ってるんだけど、先ほどサーバ以降後に始めてブログを更新しようとしたら、表題のエラーが出てできない。データファイルのパーミッションを確認しても 777 だし、そもそも読み込みはできてる。

調べてみると SQLite は更新時に dbfilename-journal というファイルを一時的に作成するらしく、ディレクトリの書き込み権限がないと更新できないらしい。
もう少し親切なエラーメッセージならなー、と思った。

SQL で null のマッチ条件について

PHP の is_null() だとなんだのやったついでに SQL の NULL 比較についても書いておく。

よく論理削除を制御するためのカラムを作って、 0 か 1 で削除されてるかの判断したりするけど、初期値で NULL がセットされちゃったりして deleted = 0 も deleted = 1 とかやっても条件がマッチしなかったりする。

これは NULL を判別するには deleted IS NULL か deleted IS NOT NULL にしないと駄目だから。

でもじゃあ

deleted = 0 OR deleted IS NULL

とかはちょっとかっこ悪いので、 IFNULL() 関数なんかを使って

IFNULL(deleted,0) = 0

とやると、中々見た目がいい。

MySQL で CSV 操作

MySQL は CSV をインポートしたりエクスポートしたりできる。またバージョン 5.0 からはそのままデータテーブルとして扱ったりすることができるらしいんだけど、 CentOS-4.4 の MySQL5 では configured されてないっぽい。その内されたら試す。

エクスポート

SELECT * FROM table_name INTO OUTFILE 'data.txt' FIELDS TERMINATED BY ',';

インポート

LOAD DATA INFILE 'data.txt' INTO TABLE table_name FIELDS TERMINATED BY ',';

INTO の前に REPLACE とか IGNORE とかをつけると、重複キーが見つかった場合のアクションを指定できる。

SQLServer の osql コマンド一覧

SQLServer のフリー版が MSDE だった頃に色々と osql コマンドを使ったので、それのメモ。今は Express とか GUI 付きでフリーなのでいいね。
でもいざって時に役立つと思います。というか知っておいても損は無い。


もっと読む

古い php mysql lib から 新しい mysqld にアクセスする

古いバージョンの php から新しいバージョンの mysql にアクセスした際に、こんなエラーをくらうことがある。

Warning: mysql_connect(): Client does not support authentication protocol requested by server;
consider upgrading MySQL client in *.php on line *
couldn't connect: Client does not support authentication protocol requested by server;
consider upgrading MySQL client

MySQL のパスワード認証方法が 4.0 から 4.1 でちょっと変わった事が原因。
サーバ側で php が新しくなるまで old password を使うように設定してやればいい。

# vi /etc/my.cnf
...
[mysqld]
old_passwords=1
...

もしくは、 mysql のユーザのパスワードを古い形式に変更してやる。

$ mysql
mysql> SET PASSWORD FOR user_name = OLD_PASSWORD('user_password');

PostgreSQL でシーケンスキーを操作する

新たにレコード INSERT 時に、シーケンスキーの次の値を特定の項目にセットする場合は以下のように行う。

INSERT INTO TBL_NAME VALUES (nextval ('seq_name'), 1, 2);

また、その結果インクリメントされたシーケンスキーの値を参照するには

SELECT currval ('seq_name');

さらに、シーケンスキーの値を設定しなおしたい場合は、

SELECT setval ('seq_name', 10);SELECT setval ('seq_name', 10, false);

となり、前者は nextval の結果が 11 となり、後者は 10 となる。

Access の Macro や Form を Grep する

たまに Access で作成したマクロやフォームから特定の文字列を検索したいときなどがあり困るんですが、
実は Access のマクロやフォームはテキストファイルに変換できます。
しかも簡単な VB スクリプトを書くだけ。
そのやり方のメモ。


もっと読む

.Net から MySQL へ接続するには

.Net から MySQL に接続するには MySQL AB がリリースしている MySQL Connector/Net を使用します。
MySQL® Connector/Net
MySQL はフリーでかなり優れているので、 .Net からの使用用途もかなり増えました。
とりあえず Visual Studio 2003 で C# ASP .NET から MySQL に接続しました。


もっと読む

Coldfusion 7 から MySQL 5 に接続するには

Coldfusion 7 の管理画面からデータソースへいって、データソースの設定をしようとしても、 MySQL 5 用のドライバは標準では用意されてない。
でも MySQL からしっかりと配布されているのでそれを入手して設定すれば普通に使えます。
そのときのメモ。


もっと読む

SQLServer で CSV のインポート/エクスポート

SQLServer で CSV 形式のデータファイルを import/export するには、 bcp コマンドを使用すると便利です。フォーマットファイルというのを指定することで、型の定義も可能で非常に便利。
またインポートは、 osql で BULK INSERT クエリを発行することでも対応できます。


もっと読む

SQLServer で バックアップ/リストア

SQLServer でデータを backup/restore するには osql で BACKUP/RESTORE クエリを発行することで行えます。
作成するダンプファイルにパスワードをつけることも可能です。


もっと読む

SQLServer の collation (照合順序)の設定

SQLServer で文字列検索を実行した際にアルファベットの大文字小文字やひらがなカタカナを区別しなかったりした時には、照合順序(Collation)が正しくない場合がある。
一通りの照合順序の設定方法と意味などをまとめておく。


もっと読む
ページ: 1 | 2 |
フリーソフトウエア
EnjoiFLV
EnjoiPacket
EnjoiCrypto
ランキング
rank2, rank3, rank7, rank10, rank11
todo メモ
facebook 対応
ページ処理
RSS feed
検索機能
認証いる?
更新日表示
実はカテゴリ機能
多言語
実はユーザ機能
ソースその内公開
動作環境メモ
php-5.1.6 with PDO
SQLite-3.3
IE6
FireFox-1.5
RSS
非認証

検索
Google