コマンドライン上で
Ctrl+a | 行頭へ移動 |
Ctrl+e | 行末へ移動 |
Ctrl+b | 1文字前へ移動 |
Ctrl+f | 1文字後ろへ移動 |
Ctrl+[(もしくはEsc) -> b | 1単語前へ移動 |
Ctrl+[(もしくはEsc) -> f | 1単語後ろへ移動 |
Ctrl+w | カーソルより前の1単語を削除 |
Ctrl+[(もしくはEsc) -> d | カーソルより後ろの1単語を移動 |
Ctrl+k | カーソルから行末まで削除 |
Ctrl+l | 画面クリア |
\c | 途中まで入力したけどやっぱりやめる |
\G | 行末「;」の代わりに「\G」で結果を横じゃなく縦に出力 |
ふつうの
# 起動
$ mysql -u ユーザー名 -p
# データベース一覧
> show databases;
# データベース選択(末尾コロン不要)
> use データベース名
# テーブル一覧
> show tables;
# データベースを指定して起動
$ mysql -u ユーザー名 -D データベース名 -p
# 終了
> \q
# コマンド入力を途中でキャンセル
> \c
# ステータス
> status
--------------
mysql Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i686) using readline 5.1
Connection id: 38025143
Current database: my_database
Current user: u5@192.168.10.6
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.45-log Source distribution
Protocol version: 10
Connection: 192.168.10.37 via TCP/IP
Server characterset: sjis
Db characterset: sjis
Client characterset: sjis
Conn. characterset: sjis
TCP port: 3306
Uptime: 2036 days 23 hours 29 min 48 sec
Threads: 5 Questions: 2212901386 Slow queries: 4451263 Opens: 9090 Flush tables: 1 Open tables: 335 Queries per second avg: 12.574
--------------
# テーブル内容表示いろいろ
> show full columns from テーブル名;
> desc テーブル名;
> show create table テーブル名;
# データベース毎のサイズをMB単位で
mysql> SELECT table_schema, SUM(data_length+index_length) /1024 /1024 as MB FROM information_schema.tables GROUP BY table_schema;
# データベース毎のサイズをGB単位で
> SELECT table_schema, SUM(data_length+index_length) /1024 /1024/1024 as GB FROM information_schema.tables GROUP BY table_schema;
# カレントのデータベースのサイズを
> USE database1;
> SELECT table_schema, SUM(data_length+index_length) /1024 /1024 as MB FROM information_schema.tables WHERE table_schema = database();
# テーブルごとなら
> show table status;
# データディレクトリを調べて…
mysql> show global variables like 'datadir';
# 実データ 物理データ量
$ ls -l /var/lib/mysql/
ダンプ系
select文からテキスト出力
# タブ区切りでOKなら
SELECT * FROM users INTO OUTFILE '/tmp/users.txt';
# オプション指定すると以下
SELECT * FROM users
INTO OUTFILE '/tmp/users.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';
ダンプ
# 全データベース
$ mysqldump -u root --all-databases > dump.sql
# ちゃんとロックかけるならxオプション(--single-transactionもオフとなる)
$ mysqldump -u root -x --all-databases > dump.sql
# 特定のデータベースのみ
$ mysqldump -u root データベース名 > dump.sql
# 特定のデータベースのいくつかのテーブルのみ
$ mysqldump -u root データベース名 テーブル名1 テーブル名2 > dump.sql
# 特定のテーブルのINSERT文のみ
$ mysqldump -u root -t データベース名 テーブル名 > dump.sql
# 特定条件のみ(複数テーブルある場合、すべてのテーブルに同条件)
$ mysqldump -u root --where 'is_delete = 0' データベース名 > dump.sql
# トランザクション制御
$ mysqldump -u root --single-transaction データベース名 > dump.sql
# データなし(create tableのみ)(-dでいいのだけどあえて--no-data)
$ mysqldump -u root --no-data データベース名 > dump.sql
# create tableな.sqlとタブ区切りな.txtを出力
$ mysqldump -u root -T データベース名 > dump.sql
# --ignore-tableというオプションもある
- mysqldumpの使い方 オプション編 | ライズウィルスタッフブログ
http://www.risewill.co.jp/blog/archives/195
復元
# 全データベース
$ mysql -u root -p < dump.sql
# 特定データベースのみ
$ mysql -u root データベース名 < dump.sql
# インポート時に、どこまで進んだか見てみる(INSERT文が覗ける)
mysql> SHOW PROCESSLIST;
# 件数が見たいなら -A オプション付きで起動して
$ mysql -u root -p -A
mysql> use データベース名
mysql> show table status;
障害時
auto increment
初期値を設定する。
テーブル作成時
mysql> CREATE TABLE table (
INT UNSIGNED AUTO_INCREMENT NOT NULL,
...
);
AUTO_INCREMENT = 1001;
あとで
mysql> ALTER TABLE table AUTO_INCREMENT=1001;
初期化の場合(ゼロじゃなくて1)
mysql> ALTER TABLE テーブル名 AUTO_INCREMENT=1;
確認
mysql> SHOW TABLE STATUS WHERE name = 'table';
Perl
トランザクション
DBI
$dbh->{AutoCommit} = 0; # オートコミットしない
# あるいは、AutoCommitをオフにする代わりに…
$dbh->begin_work;
$dbh->{RaiseError} = 1; # エラー時にdieするように
eval {
aaa() # INSERTとかUPDATEとか…
$dbh->commit; # コミット
};
if ($@) {
warn "だめでした!: $@";
$dbh->rollback; # ロールバック
}
Teng
# オートコミットONで
my $teng = My::DB->new(connect_info => [
'dbi:mysql:database=testdb', 'user', 'password',
+{ RaiseError => 1, PrintError => 0, AutoCommit => 1, },
]);
# トランザクション開始(つまり $dbh->begin_work; =AutoCommitオフをしてる)
$teng->txn_begin;
# 処理処理処理…
$teng->txn_commit;
rootのパスワードを忘れてしまった
# 起動しているMySQLを停止
service mysql stop
# MySQLをセーフモードで起動
mysqld_safe --skip-grant-tables &
# MySQLへrootでログイン
mysql -u root
# rootのパスワードのリセット
mysql> use mysql;
mysql> update user set password=NEW_PASSWORD where User='root';
mysql> flush privileges;
# MySQLからログアウト
mysql> quit
# セーフモードのMySQLを停止
service mysqld stop
# 通常モードでMySQL起動
service mysqld start