Dump 不要なテーブルは「–ignore-table=(テーブル名)」で排除 1 mysqldump -u <user> -p<password> dbname --ignore-table=dbname.table > dump.sql
DDL(Data Definition Language)取得 1 mysqldump -u <user> -p<password> --no-data dbname > ddl.sql
データ(INSERT クエリ)取得 1 mysqldump -u <user> -p<password> --no-create-info dbname > data.sql
DB インポート 1 mysql -u <user> -p<password> dbname < data.sql
ちなみにインポート時に以下のようなエラーが出た場合は、
1 ERROR 2006 (HY000) at line ***: MySQL server has gone away
以下記事参照してください。 [http://kenzo0107.hatenablog.com/entries/2015/12/17]
DDL なし + CSV はきだし [f:id:kenzo0107:20160119111938p:plain]
1 2 3 mkdir ./csvchmod o+x ./csvmysqldump -u <user> -p<password> --tab=./csv --fields-terminated-by=, --fields-optionally-enclosed-by=\" --lines-terminated-by="\r\n" dbname
SELECT 文から CSV データで出力
SELECT ~ INTO OUTFILE output.csv の場合、DB サーバに /tmp/hoge.csv は出力される。 コマンド実行するサーバと DB サーバが異なる場合は注意が必要です。
1 2 use dbname SELECT * INTO OUTFILE'/tmp/hoge.csv' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES STARTING BY '' TERMINATED BY '\r\n' FROM table;
コマンドライン SQL ファイルをロードし実行結果を CSV に保存
1 mysql -h <host> -u <user> -p<password> <db_name> -e "`cat query.sql`" | sed -e 's/\t/,/g' >/tmp/result.csv
INPUT OUTFILE を利用せずに CSV ファイル生成 https://kenzo0107.github.io/2015/12/16/2015-12-17-mysql-error-2006-hy000-mysql-server-has-gone-away/
テーブル指定し出力 1 mysqldump -u <user> -p<password> -t dbname table1 tabl2 > no_data.sql
テーブル指定し WHERE 句ありで出力 1 mysqldump -u <user> -p<password> -t dbname table1 "-w created_at < '2016-10-27' " > no_data.sql
output by CSV format 1 2 3 mysql -u user -ppassword > use dbname > LOAD DATA INFILE "<CSVFile>" INTO TABLE table FIELDS TERMINATED BY ',' ENCLOSED BY '"' ;
全テーブル TRUNCATE 1 mysql -u root dbname -N -e 'show tables' | while read table; do mysql -u root -e "truncate table $table " dbname; done
AUTO_INCREMENT 値確認 1 SELECT auto_increment FROM information_schema.tables WHERE table_name = '<table>';
AUTO_INCREMENT 値設定 1 ALTER TABLE <table> auto_increment=<int val>;
テーブル名変更 1 ALTER TABLE <old table> rename <new table>;
テーブルにカラム追加 1 ALTER TABLE <table> ADD <column> TINYINT(3) NOT NULL DEFAULT <deafult value> COMMENT '<comment>' AFTER <previous column>;
例) テーブル user の email カラムの次にカラム名: mailmagazine_status を tinyint(3) 符号なし(unsigned)、デフォルト 0 の追加
1 ALTER TABLE user ADD mailmagazine_status TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'メルマガステータス' AFTER email;
テーブルのカラム削除 1 ALTER TABLE <table> DROP COLUMN <column>;
テーブルのカラム編集 1 ALTER TABLE <table> CHANGE <old column> <new column> <column 定義>;
例) product テーブル の カラム名「no」を 「id」に、 unsigned(符号なし)、NULL 禁止、デフォルト: 0、カラムコメント 「商品 ID」に修正
1 ALTER TABLE product CHANGE `no` `id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '商品ID';
インデックス一覧表示 1 SHOW INDEXES FROM <table>;
インデックス追加 1 2 3 ALTER TABLE <table> ADD INDEX <index name>(<column>); ALTER TABLE <table> ADD INDEX <index name>(<column1>,<column2>);
インデックス削除 1 ALTER TABLE <table> DROP INDEX <index name>;
ユニーク追加 1 ALTER TABLE <table> ADD UNIQUE(<column>);
ユニーク削除 DB の文字コード確認 1 SHOW CREATE DATABASE dbname
gz 形式で圧縮状態のファイルを特定 DB スキーマへ実行 1 zcat dump.sql.gz | mysql -u <user> -p<password> dbname
全テーブルの統計情報をサイズ順に一覧表示 1 SELECT table_name, engine, table_rows AS tbl_rows, avg_row_length AS rlen, floor((data_length + index_length) / 1024 / 1024) AS allMB, floor((data_length) / 1024 / 1024) AS dMB, floor((index_length) / 1024 / 1024) AS iMB FROM information_schema.tables WHERE table_schema = database() ORDER BY (data_length + index_length) DESC;
テーブルの文字コード等確認 1 2 3 4 5 6 7 SELECT * FROM information_schema.schemata WHERE schema_name = 'database_name'; +--------------+---------------+----------------------------+------------------------+----------+ | CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | +--------------+---------------+----------------------------+------------------------+----------+ | def | database_name | utf8 | utf8_general_ci | NULL | +--------------+---------------+----------------------------+------------------------+----------+
DB/Table 作成 DB 作成 (CHARACTER=utf8) 1 CREATE DATABASE `database_name` CHARACTER SET utf8;
指定 DB/ホストに対してユーザ・パスワード・権限設定 以下設定する必要あり
database_name
user_name
host_name
password
1 GRANT ALL PRIVILEGES ON `database_name`.* TO `user_name`@'host_name' IDENTIFIED BY 'password' WITH GRANT OPTION;
指定ユーザに mysql スロークエリログ参照権限付与 1 GRANT select ON mysql.slow_log TO user_name;
指定ユーザに RDS(AWS)の msyql スロークエリ参照権限付与 1 GRANT EXECUTE ON PROCEDURE mysql.rds_rotate_slow_log TO user_name;
指定ユーザの権限表示 1 SHOW GRANTS for 'user_name'@'%';
設定反映 上記権限設定した後に設定反映
GRANT での権限付与の場合は特に FLUSH PRIVILEGES
は不要ですが念の為。 INSERT、UPDATE、DELETE 等で権限付与した場合は FLUSH PRIVILEGES
が必要になります。
テーブル毎の容量確認 [http://kenzo0107.hatenablog.com/entry/2016/06/27/121920:embed:cite]
ちょうど 1 年前に 1 SELECT NOW() - INTERVAL 1 YEAR;
昨日のことのように 1 SELECT NOW() - INTERVAL 1 DAY;
1 日前の 00:00:00 1 SELECT CURDATE() - INTERVAL 1 DAY;
1 日前の 11:00:00 1 SELECT DATE_FORMAT(CURDATE() - INTERVAL 1 DAY, '%Y-%m-%d 11:00:00');
MySQL バージョン確認 1 2 3 4 5 6 7 mysql -u <user> -p<pass> -e"SELECT version();" +------------+ | version() | +------------+ | 5.5.42-log | +------------+
各種メトリクス SELECT / INSERT / UPDATE / DELETE / REPLACE コマンドの実行回数取得 1 mysql -u root -NBe "SHOW GLOBAL STATUS" | grep "Com_" | grep -E "select|insert|update|delete|replace"
[f:id:kenzo0107:20160927140251p:plain]
Item
Explain
Com_delete
削除 (DELETE) 実行回数
Com_delete_multi
複数行 (DELETE) 実行回数
Com_insert
登録 (INSERT) 実行回数
Com_insert_select
コピー作成 (INSERT SELECT) 実行回数
Com_replace
再作成 (REPLACE) 実行回数
Com_replace_select
再作成 (REPLACE SELECT) 実行回数
Com_select
選択 (SELECT) 実行回数
Com_update
更新 (UPDATE) 実行回数
Com_update_multi
複数行更新 (UPDATE) 実行回数
接続中 のコネクション数取得 1 mysql -u root -BNe "SHOW STATUS LIKE 'Threads_connected';"