LoginSignup
10
12

More than 5 years have passed since last update.

mysqldumpでviewを除外する

Last updated at Posted at 2013-06-24

mysqldump(1) コマンドを利用してフルダンプした MySQL データベースを mysql(1) コマンドを利用してレストアする際に、view が含まれていると正しくレストアできない場合がある様なので、mysqldump(1) を実行する際にviewを除外するためのスクリプトです。
このスクリプトでフルダンプを取得すると view の情報が含まれないので、レストア時にエラーにはならないと思います。
view 情報は show create view の結果を出力していますので、レストア時にこちらを実行すればviewも作成されると思います。

アカウント情報を平文で格納するので運用には十分注意して下さい。

#!/bin/sh
logfile=/var/log/${0##*/}.log
backup=/var/db/backup/db_backup.sql
createview=/var/db/backup/create_view.sql

# for MySQL
table=テーブル名
user=ユーザ
pass=パスワード
mysql="/usr/bin/mysql -u${user} -p${pass} -B -N -s -r "
mysqldump="/usr/bin/mysqldump -u${user} -p${pass}"
sql="select TABLE_NAME from information_schema.TABLES
    where TABLE_SCHEMA = '${table}' and TABLE_TYPE = 'VIEW';"

exec > ${logfile} 2>&1

# delete old file
rm -f ${backup}

# get view name(s) for exclude dump
for i in `${mysql} ${table} -e "${sql}"`
do
    view="${view} --ignore-table=${table}.${i}"
    ${mysql} ${table} -e "show create view ${i}"
done > ${createview}

# get MySQL dump
${mysqldump} ${view} ${table} > ${backup}
10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12