コマンドライン上で
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