Created
September 17, 2015 05:08
-
-
Save komasaru/d9cae95bf4d30da5545b to your computer and use it in GitHub Desktop.
Bash script to dump only records of MariaDB(MySQL) tables by split.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# 定数定義 | |
DB=db_name # データベース・スキーマ名 | |
USER=user_name # ダンプ出力するユーザ名 | |
PW=user_password # 〃 ユーザ名のパスワード | |
CMD=/usr/bin/mysqldump # mysqldump コマンドのフルパス | |
WK_DIR=/path/to/backup_mysql # 作業ディレクトリ | |
DMP_DIR=$WK_DIR/tabledatas_$DB # ダンプファイル格納ディレクトリ | |
OPTS="-t -Q -F --skip-lock-tables --skip-triggers --skip-dump-date --single-transaction" | |
# mysqldump オプション(*) | |
DCNT=100000 # 分割するレコード件数 | |
# ダンプファイルクリア | |
rm -f $DMP_DIR/* | |
# DB 内に存在するテーブル毎にループ処理 | |
for tbl in `mysql -u $USER -p$PW -N -s -e "show tables in $DB;"`; do | |
# テーブル内に存在するレコード件数(*) | |
rows=`mysql -u $USER -p$PW $DB -N -B -e "SELECT COUNT(*) FROM $tbl;"` | |
echo "* $tbl [$rows records]" | |
# レコード件数から分割数を算出してループ処理 | |
for ((i = 0; i <= $(($rows / $DCNT)); i++)) | |
do | |
# 出力ダンプファイル名 | |
fname=$(printf ${tbl}_%02d $i) | |
# オフセット算出 | |
offset=$((i * $DCNT)) | |
echo " $fname [OFFSET: $offset]" | |
# ダンプ出力(*) | |
$CMD -u $USER -p$PW $DB $tbl $OPTS -w "true LIMIT $offset, $DCNT"> $DMP_DIR/$fname.sql | |
done; | |
done; | |
# タイムスタンプ付ファイル名で圧縮保存 | |
cd $WK_DIR | |
dt=`date '+%Y%m%d_%H%M%S'` | |
tar zcvf ${DB}_tabledata_$dt.tar.gz tabledatas_$DB |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment