MySQLで任意DBの全`table create statement`を出力する方法

2019-03-09Bash, MySQL

Qiita の記事に興味があったので。

MySQLに接続し、 show create table colors; というコマンドを実行すると colors テーブルの create table 文が出力されます。

# USER=testuser / password=test9ass / DB=testdb で接続
$ mysql -u testuser -ptest9ass testdb -e "show create table colors \G"
Warning: Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
       Table: colors
Create Table: CREATE TABLE `colors` (
  `code` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`code`),
  UNIQUE KEY `uq_colors_code` (`code`),
  UNIQUE KEY `uq_colors_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

僕だったらどうやるかなと思ってシェルスクリプトを書いてみました。

$ mysql_exec() {
  declare -r DBUSER=testuser
  declare -r DBNAME=testdb
  declare -r DBPASS=test9ass
  mysql \
    --silent \
    --skip-column-names -u "${DBUSER}" -p"${DBPASS}" "${DBNAME}" "${@}" 2>/dev/null
}

$ mysql_exec -e 'show tables' | sed 's/.*/show create table \0 \\G/' | mysql_exec

元記事のように丁寧には書いていないですね(汗)

ちなみに

create table を出力したいだけなら、以下の方法のが楽です。

$ mysqldump -u testuser -ptest9ass testdb -d

2019-03-09Bash, MySQL