Skip to content

Instantly share code, notes, and snippets.

@komasaru
Created September 17, 2015 05:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save komasaru/d9cae95bf4d30da5545b to your computer and use it in GitHub Desktop.
Save komasaru/d9cae95bf4d30da5545b to your computer and use it in GitHub Desktop.
Bash script to dump only records of MariaDB(MySQL) tables by split.
#!/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