mysql/コマンド
Last-modified: 2010-02-16 (火) 16:19:27 (23d)
よく使うけどすぐ忘れるmysqlコマンド †
mysqlコマンド †
遠隔マシンのmysqlに接続する †
# mysql -u ユーザー名 -p -h サーバーURL DB名
mysqlに接続してSQLを実行する †
# mysql -u ユーザー名 -p -B DB名 --execute="select count(*) from dtb_customer"
ファイルに記述されたsql文を実行する †
# mysql -u ユーザー名 -p < ファイル名
ファイルに記述されたsql文を実行して、結果をファイルに出力する †
# mysql -u ユーザー名 -p < SQLが書いてあるファイル名 > 結果出力ファイル名
mysqlコマンドクイック・リファレンス †
http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html
mysql運用時の備忘録 †
データディレクトリを確認する。 †
mysql> show variables like "data%"; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+
上記のコマンドで表示されたデータディレクトリに、各データベースの実データが入っている。
rpmコマンドを使用してmysqlをアンインストールしたとき、データディレクトリのファイルが削除されないことがある。
テーブル定義の確認 †
mysql> show create table テーブル名\G
mysql> desc テーブル名\G
インデックスの確認 †
mysql> show index from テーブル名\G
データベースの文字コードを確認 †
mysql> show create database データベース名;
テキストファイルに記述されたsql文を実行 †
mysql > source ファイルパス
mysqlクライアントで文字化けした場合 †
- 現状確認
mysql> status; Server characterset: utf8 Db characterset: utf8 Client characterset: latin1 Conn. characterset: latin1
- Client charactersetがlatin1になっているので、これをutf8に変える
mysql> set character set utf8;
- 確認
mysql> status; Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8
処理に時間がかかるクエリを強制終了させたいとき †
- 時間がかかっているクエリの確認
mysql> show processlist\G
*************************** 1. row ***************************
Id: 13018
User: root
Host: localhost
db: db_hoge
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 13036
User: root
Host: localhost
db: db_hoge
Command: Query
Time: 184
State: Copying to tmp table
Info: insert into hoge_table name (col1,col2) values (1,2)
2 rows in set (0.00 sec)
- プロセスのkill
mysql> kill 13036;
mysqlシステム変数の表示 †
# mysqladmin -u root variables -p
mysqlにconnectしてshow variablesでも参照可能
mysql> show variables;
mysqlのデフォルト文字コードをUTF8にしたいとき †
- /etc/my.cnfの[mysqld]のところに default-character-set=utf8 を追加
- mysql再起動
サーバーが起動しているか確認する †
# mysqladmin ping -u ユーザー名 -p mysqld is alive
mysqld is aliveが返ってくれば起動されている
alter table を実行する際の注意点 †
alter tableを実行している間、そのテーブルはロックされるので注意。
selectはできるが、insert、updateはできない
30万行のデータにindexを追加するのに2分くらいかかった。
CSVファイルのやりとり †
SQLの結果をタブ区切りのテキストに出力する †
mysql> SELECT * INTO OUTFILE '/tmp/test.csv' FROM テーブル名
テキストに出力したデータをテーブルにinsertする †
mysql> LOAD DATA LOCAL INFILE '/tmp/test.csv' INTO TABLE テーブル名
カンマ区切りのcsvデータをインポート †
mysql> LOAD DATA LOCAL INFILE '/tmp/test.csv' INTO TABLE テーブル名 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' ;
SQLの結果をcsvファイルに出力する †
mysql> SELECT * INTO OUTFILE '/tmp/test.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' character set cp932 LINES TERMINATED BY '\r\n' FROM table_name;
出力ファイルの所有者はmysqlユーザーになるため、ログインユーザーの権限によっては出力後にファイルの読み取りしかできなくなることがあるので注意
mysqldump データベースのバックアップ †
データベースのフルバックアップ †
# mysqldump -u ユーザー名 -p データベース名 > dump.sql
データベースのフルバックアップ バックアップ中にロックしない †
# mysqldump -u ユーザー名 -p データベース名 --opt --skip-lock-tables > dump.sql
テーブル名を指定してバックアップ †
# mysqldump -u ユーザー名 -p データベース名 テーブル1 テーブル2・・・ > dump.sql
テーブル定義のみバックアップ †
# mysqldump -u ユーザー名 データベース名 -d > dump.sql
mysqldumpでバックアップしたデータの復元 †
# mysql -u ユーザー名 -p データベース名 < ファイル名
alter table †
列名を変更せずに型、場所を変更 †
alter table テーブル名 modify column カラム名 型 not null default デフォルト値 after 移動したいカラム名;
列変更 †
alter table テーブル名 change column 古いカラム名 新しいカラム名 型 not null default デフォルト値;
列追加 †
alter table テーブル名 add column カラム名 型 not null default デフォルト値 after 追加する場所
列削除 †
alter table テーブル名 drop column カラム名;
index追加 †
alter table テーブル名 add index インデックス名 (カラム名);
tips †
mysqlクライアントの出力結果を縦方向にする †
sqlの区切り文字は;(コロン)ですが、代わりに¥Gと入力すると出力結果が縦方向になります。
mysql> select * from テーブル名\G *************************** 1. row *************************** id: 1 name: 名前です 1 row in set (0.00 sec)
mysqlクライアントのコマンド入力途中でキャンセル †
\c
sql等を入力中に、\cと入力すると、mysql> に戻ります
コマンド実行中に抜ける †
ctrl + c + c