MySQL

テーブル構成だけを別DBにコピーする

テスト用DB作成など、DBのテーブル構成だけを別DBにコピーしたいとき。 mysqldumpに--no-dataをつけると構成のみダンプされる例)adminユーザにて、dbnameをdbname_testにコピー // あらかじめDBは作成しておく mysql > create database dbname_test;$ mysqld…

外部キーやユニークキーなどが貼られているか確認

show create table で確認できる mysql> show create table hoge; +--- | hoge | CREATE TABLE `hoge` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `fuga_id` int(10) unsigned NOT NULL, `piyo_id` int(10) unsigned NOT NULL, `created_at` datetim…

参照元に存在しない値で外部キーを貼ろうとしてエラー

既にDBに値が入っている状態で外部キー制約をつけようとしたらエラーになった Cannot add or update a child row: a foreign key constraint fails →外部キーの値が参照元に存在しない状態だとそうなる例)hogeテーブルに0がない状態で、既に参照先で0が設定…

MySQLの予約語でエラー

このようなエラーが出てどうにもならなかったが「condition」が予約語だった - SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the …

likeの一文字ワイルドカード

勘違いしていたのでめも。 mysqlでの一文字一致は「?」ではなく、「_」でした。 mysql> select * from rr where name like 'db2%'; +----+------+-------+------+---------------+-----+-------+ | id | zone | name | type | data | aux | ttl | +----+----…

timestamp型で自動更新

mysql> create table hoge (id integer auto_increment, flag integer, updated_at timestamp, created_at datetime, primary key(id)); Query OK, 0 rows affected (0.02 sec) mysql> desc hoge; +------------+-----------+------+-----+-----------------…

名前解決せずにIP一致で接続

user情報にないホスト名をIP一致のみで許可する方法下のようなuser設定の場合、例えばホストxxx.local(IPは「10.100.200.1」とする)で接続しようとした場合、IPとしては問題ないが、xxx.localがhostに登録されていないのではじかれる mysql> select host,use…

パスワードオプションの設定

「-p」とパスワードの間にスペースを入れるとダメらしい [user@web1.aaa ~]$ mysql -uadmin -h db1m -p 'パスワード'Enter password: ERROR 1045 (28000): Access denied for user 'admin'@'xxx.xxx.xxx.xxx' (using password: YES)間を詰めると入れました […

特定のレコードを優先してソート

order by id=xx desc のようにすれば最初に order by id=xx (asc) のようにすれば最後に回す事ができます。 例)id=50のレコードを最初に出したい ※他は順不同 mysql> select id from hoge order by id=50 desc; +----+ | id | +----+ | 50 | | 44 | | 59 | …

バイナリログの自動削除

レプリケーションなどで使用するmysqlのバイナリログは、保存の設定をすると、デフォルトでは削除しない為、ほおっておくとディスクを圧迫していきます。 /var/lib/mysql … mysql-bin.000064 mysql-bin.000065 …例)7日間保持して、以降は削除 my.cnfの設定…

SQL文が長すぎてエラー

SQLSTATE[08S01]: Communication link failure: 1153 Got a packet bigger than 'max_allowed_packet' bytes →サーバに送るパケットが最大サイズを超えているらしい。 SQL文が長すぎても発生するようなので、対象となるSQLの長さを確認*1したところ1.3Mあり…

クエリキャッシュを設定

my.cnfの設定を変更 [root@hoge ~]# vim /etc/my.cnf #query_cache_size = 0 query_cache_size = 32Mmysqlを再起動して変更内容を反映 [root@hoge ~]# service mysql restart Shutting down MySQL.... [ OK ] Starting MySQL. [ OK ]mysql> select * from ho…

logを有効にする

mysql> set global general_log = 'ON'; Query OK, 0 rows affected (0.04 sec)logがONになっている mysql> show variables like 'log%'; +---------------------------------+------------------------------------+ | Variable_name | Value | +----------…

シェルからSQLを実行

postgresの場合 [admin@hoge:~]$ psql -c "select * from table;" dbnamemysqlの場合 [admin@hoge:~]$ mysql -e "select * from table;" dbnameともに終了後はシェルに戻ります

BLOB/TEXT型のカラムをインデックスにする

mysql> create index rg_log_mid_idx on rg_log (mid); ERROR 1170 (42000): BLOB/TEXT column 'mid' used in key specification without a key lengthバイト数を指定していないと、上記のようにエラーとなる http://dev.mysql.com/doc/refman/4.1/ja/create…

TSVやCSVデータをデータベースに取り込む

load data local infile [ファイルパス] into table [テーブル]・クライアントホスト上にファイルがある場合はLOCALを付けます。 ・デフォルトの区切り文字は「タブ」。CSVの場合、最後にFIELDS TERMINATED BY ',';を加えます詳細はこちら http://dev.mysql.…

SQL結果をファイルに出力する

$ mysql データベース > 出力ファイル select * from test_table;終わっても反応が無いのでCtrl+Cで抜けますちゃんと完了しているか心配な場合、、、 あらかじめレコード数を確認しておいて出力ファイルの行数(wc -lなど)を見れば完了を確認できるかと思いま…

DBに設定されているindexを確認

テーブル毎に以下コマンドで確認 mysql> show index from テーブル

slow.logの取り方

my.cnfにて設定を行う [root@hoge etc]# vim /etc/my.cnfmysqldにて、以下を追記 log-slow-queries ・・・ slow.logのパスとファイル名 long_query_time ・・・ 何秒以上のSQLをlogに出すか # The MySQL server [mysqld] port = 3306 socket = /var/lib/mysql/mysq…

レコードがidの限界を超えたら...

id がunsigned integer型の場合 insert into hoge (id) values (2147483648) →-2147483648が入る insert into hoge (id) values (2147483647) →-2147483647が入る 削除時も同様に対応する delete from sites where id = 2147483648 →id: -2147483648が削除さ…

ストレージエンジンの確認

システムで使用できるエンジンを確認 show engines; 既存テーブルのエンジンを確認 show create table テーブル名;mysql> show create table hoge; +-------+--------------------------------------------------------------------------------------------…

MySQLのバージョンを調べる

select version()mysql> select version(); +----------------------+ | version() | +----------------------+ | 5.1.38-community-log | +----------------------+ 1 row in set (0.01 sec)※postgresでも同様にselect version()で確認できる

LIKEでインデックス 

LIKE 検索では、前方一致検索 (LIKE 'foo%') の場合のみインデックスが使用可能 explain select * from item where id like '10%' -> OK explain select * from item where id like '%10%' -> NG上記を実行した場合、possible_keysに注目 前方一致の場合のみpossi…

インデックスの効果を確認(explain)

select文の前にexplainを付加する explain select * from user where id = 10000 id select_type table possible_keys key key_len ref rows Extra 1 SIMPLE user PRIMARY PRIMARY 4 const 1 「possible_keys」に適用可能なindex 「key」に使用indexが表示さ…

DB一覧、構成の確認

DB一覧 [root@hoge-dev ~]# mysqlshow +--------------------+ | Databases | +--------------------+ | information_schema | | mysql | | test | +--------------------+DB構成 [root@hoge-dev ~]# mysqlshow mysql Database: mysql +--------------------…

テーブルのバックアップ(コピー)をとる

例)mst_tableのデータをmst_table_bakに退避する1.あらかじめ同じ構造のテーブルmst_table_bakを作成しておく ※symfony使ってたら「lib.model.schema.sql」を見てみると良いかも CREATE TABLE mst_table_bak ( 〜(省略)〜 );2.データを流し込む(値を…

PEAR::DBによる接続

'; } else { echo 'connect ok<br>'; } $rs = $db->query("select * from main_customer;"); while ($row = $rs->fetchRow()) { echo 'id:' . $row[0] . 'name:' . $row[1] . '<br>'; }…

テキストに書いたSQL文を実行(sourceコマンド)

例)Cドライブのsqldataフォルダにsql.txtというファイルを作成 [sql.txt] select * from main_customer;[コマンドプロンプト] mysql> source c:/sqldata/sql.txt;