MySQL操作まとめ(エクスポート、ダンプ、インポート、レプリケーション、起動、権限、確認、ユーザ、バイナリログ、InnoDBログ、MyISAM、InnoDB、SQL)

MySQLの操作まとめページです。

スポンサーリンク

ダンプ(エクスポート・インポート)

エクスポート

$ mysqldump -u[ユーザ名] -p[パスワード] [DB名] > [エクスポートファイル.sql]

エクスポート(圧縮)

$ mysqldump -u[ユーザ名] -p[パスワード] [DB名] | gzip > [DB名].sql.gz

エクスポート(外部ホストから)

$ mysqldump -u[ユーザ] -h [データベースホスト] -p [DB名] > [エクスポートファイル.sql]

エクスポート(CSV出力)

mysql> SELECT * FROM test_tables
 INTO OUTFILE '/tmp/test.csv'
 FIELDS TERMINATED BY ','
 OPTIONALLY ENCLOSED BY '"';

エクスポート(ロック)

テーブルをロックして整合性の取れたダンプを取得します。

$ mysqldump --lock-all-tables -u[ユーザ名] -p[パスワード] [DB名] > [エクスポートファイル.sql]

エクスポートエラー

http://normalblog.net/system/mysql/sql_quote_show_create/

http://normalblog.net/system/mysql/mysqldump-unknown-variable-symbolic-links0/

インポート

$ mysql -u[ユーザ名] -p[パスワード] [DB名] < [インポートファイル].sql

インポート(解凍)

$ zcat [インポートファイル].sql.gz | mysql -u[ユーザ名] -p[パスワード] [DB名]

インポートエラー

http://normalblog.net/system/mysql/error_1071/

ログインせずコマンド実行

mysqlにログインせずコマンド実行

$ mysql -u[ユーザ名] -p[パスワード] [DB名] -e "SHOW TABLES;"

mysqlにログインせずSQLを実行して結果ファイルに出力

$ mysql -u[ユーザ名] -p[パスワード] [DB名] -e "SHOW TABLES;" > out.txt

mysqlにログインせずSQLファイルを実行して結果ファイルに出力

$ mysql -u[ユーザ名] -p[パスワード] [DB名] < hoge.sql > out.txt

起動・停止・再起動

起動

# /etc/init.d/mysql start

停止

# /etc/init.d/mysql stop

再起動

# /etc/init.d/mysql restart

権限関連

権限追加

mysql> grant all on [DB名].* to [ユーザ名];

システム確認関連

容量確認

mysql> SELECT table_schema "DB名",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DBサイズ(MB)"
FROM information_schema.tables
GROUP BY table_schema;

稼働確認

$ mysqladmin ping -u[user] -p[pass]

ユーザー関連

ユーザ一覧確認

mysql> select Host, User, Password from mysql.user;

レプリケーション関連

読み込み専用確認

mysql> select @@read_only;

1or0でかえってきます。slaveに対する読み込み専用になっているかの確認で使用しています。

レプリケーションエラー

http://normalblog.net/system/mysql/mysqlbinlog/

バイナリログ関連

バイナリログの中身を確認

# mysqlbinlog /var/lib/mysql/mysql-bin.xxxxxx > /tmp/test
# vi /tmp/test

バイナリログの削除

mysql > show master logs;
mysql > purge master logs to 'mysql-bin.xxxx'; ←最後から3番目くらいにしておきました。
mysql > show master logs;
$ vi /etc/my.cnf で以下が14だったので7に修正
expire_logs_days = 7
mysql > show global variables like ‘expire_logs_days’;
mysql > set global expire_logs_days = 7;
mysql > show global variables like ‘expire_logs_days’;
# /etc/init.d/mysql restart

http://normalblog.net/system/vagrant/binarylog/

InnoDBログ関連

http://normalblog.net/system/mysql/binlog-innodblog/

スローログ関連

# vi /etc/my.cnf

で以下を追記

出力する

slow_query_log=1

出力対象(秒

※1.0秒の場合

long_query_time=1.0

出力形式

log_output=TABLE
または
log_output=FILE
または
log_output=TABLE,FILE

出力ファイル名

slow_query_log_file='/var/lib/mysql/mysql-slow.log'

ログローテート

# /usr/bin/mysqladmin -u[user] -p[password] flush-logs

ストレージ関連

InnoDBかMyISAMか確認

mysql> use information_schema;
mysql> select table_name, engine from tables where table_schema = 'test_db';

MyISAMとInnoDBとではロック形式が異なる

http://normalblog.net/system/mysql/myisam-state-locked/

MyISAMからInnoDBへ変更

mysql> ALTER TABLE test_table ENGINE=InnoDB;

http://normalblog.net/system/mysql/alter-table-engine/

設定確認

mysql > show variables;

MySQL記事

SQLはこちらにまとめました。

http://normalblog.net/system/mysql/sample_sql/

MySQL記事一覧はこちら

http://normalblog.net/system/mysql/