MySQLをインストールすると、
今回はmysqlshowコマンドを使って、
mysqlshowコマンド
mysqlshowコマンドを利用するには、mysqlshow -u <user名> -p
を実行し、/var/
を見てソケット接続を試みるため、--socket
-S
)--host
-h
)--port
-P
)
mysqlコマンドと同様に、MYSQL_
を利用することでパスワードの入力なしに利用することができますが、
mysqlshow -u root --socket=/data/sample_mysql/mysql.sock -p mysqlshow -u root -p -h 127.0.0.1 -P3309
この状態ではデータベース一覧が表示されます。mysqlコマンドでSHOW DATABASES
を実行しても同じ結果が得られます。
$ mysqlshow -u root --socket=/data/sample_mysql/mysql.sock -p Enter password: +--------------------+ | Databases | +--------------------+ | d1 | | information_schema | | mysql | | performance_schema | | sys | | test | | world | +--------------------+
テーブル一覧の取得
mysqlshowにスキーマ名を渡すことで、--verbose
-v
)verbose
v
)
$ mysqlshow -u root --socket=/data/sample_mysql/mysql.sock -p d1 -vv Enter password: Database: d1 +------------+----------+------------+ | Tables | Columns | Total Rows | +------------+----------+------------+ | _dummy_new | 6 | 10000 | | dummy | 6 | 10000 | | t1 | 2 | 2 | | t10 | 1 | 0 | | t2 | 2 | 3 | | t7 | 1 | 0 | | t9 | 1 | 0 | +------------+----------+------------+ 7 rows in set.
ここで取得されるデータの件数SELECT COUNT(*) FROM <テーブル名>
というクエリを実行するため、
なお、スキーマ名.テーブル名
というデータベース名で検索してしまい、
$ mysqlshow -u root -p --socket=/data/sample_mysql/mysql.sock d1.t1 mysqlshow: Unknown database 'd1.t1'
また、--status
-i
)SHOW TABLE STATUS
を実行した結果と同じです。
$ mysqlshow -u root -p --socket=/data/sample_mysql/mysql.sock d1 t1 -i Database: d1 Wildcard: t1 +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------+----------+----------------+---------+ | t1 | InnoDB | 10 | Dynamic | 1 | 16384 | 16384 | 0 | 16384 | 0 | | 2020-02-04 18:39:43 | | | utf8mb4_bin | | | | +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------+----------+----------------+---------+
カラムの情報の取得
カラム情報は、SHOW FULL COLUMNS FROM <table_
を実行した時と同じ結果になります。
$ mysqlshow -u root -p --socket=/data/sample_mysql/mysql.sock d1 t1 Database: d1 Table: t1 +-------+--------------+-------------+------+-----+---------+-------+---------------------------------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +-------+--------------+-------------+------+-----+---------+-------+---------------------------------+---------+ | id | int(11) | | NO | PRI | | | select,insert,update,references | | | name | varchar(256) | utf8mb4_bin | YES | MUL | | | select,insert,update,references | | +-------+--------------+-------------+------+-----+---------+-------+---------------------------------+---------+
INDEX情報の取得
mysqlshowコマンドはINDEXの情報も取得することが可能です。取得したいINDEXがあるテーブルを指定し、--keys
-k
)SHOW KEYS FROM <table_
を実行すると同等の結果を取得できます。
$ mysqlshow -u root -p --socket=/data/sample_mysql/mysql.sock d1 t1 -k Database: d1 Table: t1 +-------+--------------+-------------+------+-----+---------+-------+---------------------------------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +-------+--------------+-------------+------+-----+---------+-------+---------------------------------+---------+ | id | int(11) | | NO | PRI | | | select,insert,update,references | | | name | varchar(256) | utf8mb4_bin | YES | MUL | | | select,insert,update,references | | +-------+--------------+-------------+------+-----+---------+-------+---------------------------------+---------+ +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+ | t1 | 0 | PRIMARY | 1 | id | A | 1 | | | | BTREE | | | YES | | | t1 | 1 | idx_name | 1 | name | A | 1 | | | YES | BTREE | | | YES | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
ワイルドカードの利用
mysqlshowではSQL のワイルドカード文字を利用することが可能です。複数のテーブルを確認したい場合などは
mysqlshowの実行権限
mysqlshowコマンドはテーブルに対する権限を持っていない場合、
$ mysqlshow -u fukamachi -p --socket=/data/sample_mysql/mysql.sock d1 t2 -k mysqlshow: Cannot list columns in db: d1, table: t2: SELECT command denied to user 'fukamachi'@'localhost' for table 't2'
まとめ
今回は、