*MySQL 操作Tips [#g033249a]
#contents
**データベースの作成 [#s51dfabe]
mysql> create database [DATABASE NAME];
**データベースの削除 [#w283a78e]
mysql> drop database [DATABASE NAME];
**ユーザ作成(接続元無制限) [#qac4c517]
mysql> GRANT ALL PRIVILEGES ON [DATABASE].* TO [USER]@'%' IDENTIFIED BY '[PASSWORD]';
**ユーザ削除 [#v8d7a4e0]
mysql> DELETE FROM mysql.user WHERE user='[USER]' and host='[HOST]';
mysql> FLUSH PRIVILEGES;
**パスワード変更 [#o348ae66]
mysql> SET PASSWORD FOR [USER]@[HOST]=PASSWORD('[PASSWORD]');
**grantコマンドの引数 [#k6e71ac4]
Ggrant all privileges on [DATABASE].* to [USER]@[HOST] identified by '[PASSWORD]';
**rootユーザにフルアクセス権限を付与する [#y24c7675]
mysql> GRANT all privileges ON *.* TO root with grant option;
**databaseを表示 [#e682d5dc]
mysql> show databases;
**ユーザ・ホスト一覧を表示 [#m97e9c3c]
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select Host,User from user;
**テーブルの中身を表示 [#id1fff86]
-全件を表示
select * from [TABLE NAME];
~
-末尾の1行のみを表示
select * from [TABLE NAME] limit 1;
**テーブル内のレコード件数を表示 [#g889bee6]
select count(*) from [TABLE NAME]
**テーブルの中身を消去 [#q5a8af4c]
truncate table [TABLE NAME];
**テーブルの破棄 [#a2063d8b]
mysql> drop table [TABLE NAME];
テーブルをまとめて破棄する場合は下記の様なリストファイルを作成し、リダイレクトでリストを読み込んで一括削除する。
-リスト(droptable.sql)
drop table [TABLE 1];
drop table [TABLE 2];
drop table [TABLE 3];
drop table [TABLE 4];
-実行
mysql -u [USER NAME] -p -h [HOST NAME] [DATABASE NAME] < droptable.sql
**データベースのダンプ作成(特定のTable) [#k51d940c]
mysqldump -u [USER] --password=[PASSWORD] [DATABASE NAME] [TABLE NAME] [TABLE NAME] ... > [出力先ファイル名]
**データベースのダンプ作成(特定のDB) [#k51d940c]
mysqldump -u [USER] --password=[PASSWORD] [DATABASE NAME] > [出力先ファイル名]
**データベースのダンプ作成(全てのDB) [#icba34ef]
mysqldump -u [USER] --password=[PASSWORD] --all-databases > [出力先ファイル名]
**ダンプファイルのリストア [#fd793267]
mysql -u[USER] -p[PASSWORD] [DATABASE] < ダンプしたファイル
もしくは
cat ダンプしたファイル | mysql -u[USER] -p[PASSWORD] [DATABASE]
~
~
圧縮(gzip)ファイルからリストアする場合
zcat ダンプしたファイル.gz | mysql -u[USER] -p[PASSWORD] [DATABASE]
**複数のダンプファイルを一括リストア [#q685220f]
複数のダンプファイルをまとめてリストアする場合は、ダンプファイルの保管ディレクトリに移動後に下記を実行する。
cat *.dmp | mysql -u [USER NAME] -p -h [HOST NAME] [DATABASE]
**文字コードの確認 [#zdb4ba63]
キャラセット関連のシステム変数を確認するには、mysqlクライアントコマンドを起動し、キャラセットの環境変数を表示させる。
$ mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.26
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
キャラセットの環境変数は下記に表示させる
SHOW VARIABLES LIKE 'character\_set\_%';
下記の様な表示結果となる
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+--------+
7 rows in set (0.01 sec)
**ユーザの一覧を表示 [#g21e891c]
作成済みユーザの一覧を表示するには下記を実行する。
mysql> use mysql;
Database changed
mysql> select user,host from user;
+--------+-----------+
| user | host |
+--------+-----------+
| mtuser | % |
| mysql | % |
| root | % |
| | localhost |
| root | localhost |
| | mysql5 |
| root | mysql5 |
+--------+-----------+
7 rows in set (0.00 sec)
**テーブルの一覧を表示する [#u0cf5ebb]
DB内のテーブル一覧を表示するには以下のコマンドを使用する。
use [DB NAME]
show tables;
**テーブルのステータス確認 [#l282ac30]
テーブルのステータスを確認するには以下のコマンドを使用する。~
使用しているDBエンジンの種類などが表示される。~
use [DB NAME]
show table status;
**DBの変換 [#m4ef4965]
MyISAM→InnoDBへ変換する際には以下のコマンドを使用する。
alter table [TABLE NAME] ENGINE=INNODB;
**DBの容量を確認する [#ec9dc6b1]
SHOW TABLE STATUS [FROM db_name];
**SQLファイルからSQLを実行する [#zac39e90]
SQLを記述したテキストファイルからSQLを実行するには以下の操作を行う。
mysql -u root -p [DB NAME] < [SQL File]
**テーブルの破損チェック[#bad88774]
テーブルが破損している可能性がある場合は以下の手順にて確認を行う。~
MyISAM、InnoDB、ARCHIVEテーブルの場合には使用可能。~
-破損チェック
check table [TABLE NAME];
-参考URL~
http://dev.mysql.com/doc/refman/5.1/ja/check-table.html~
**テーブルの破損修復[#bad88774]
テーブルが破損している可能性がある場合は以下の手順にて修復を行う。~
MyISAMテーブルの場合には使用可能。~
-破損の修復
repair table [TABLE NAME];
**シェル上からSQLを発行 [#qf28d05e]
-単コマンドの実行
mysql -u root --password=[PASSWORD] -e "show databases;"
~
echo "show databases;" |mysql -u root --password=[PASSWORD]
-DBを指定して実行
echo "use [DB NAME]; show table status;" |mysql -u root --password=[PASSWORD]
**データベースサイズを調べる [#q93e7935]
-MB単位で表示
select table_schema, sum(data_length+index_length) /1024 /1024 as MB from information_schema.tables group by table_schema order by sum(data_length+index_length) desc;
-GB単位で表示
select table_schema, sum(data_length+index_length) /1024 /1024/1024 as GB from information_schema.tables group by table_schema order by sum(data_length+index_length) desc;
-特定のDBのサイズを調べる
select table_schema, sum(data_length+index_length) /1024 /1024 as MB from information_schema.tables where table_schema = '[DATABASE NAME]';
**テーブルの中身を消す [#u4400517]
-テーブル内のデータを全て削除
truncate table [TABLE NAME];
**外部キー制約の解除 [#a9d1c646]
truncate tableを行う際に以下の様なエラーが発生し、外部キー制約で処理が行えない場合に一時的に外部キー制約のチェックを無効化する。(データの整合性は自己責任)~
-外部キー制約エラー
MariaDB [zabbix]> TRUNCATE TABLE auditlog;
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (略)
~
-外部キー制約のチェックを無効化
set foreign_key_checks = 0;
-外部キー制約のチェックを有効化
set foreign_key_checks = 1;