月ごとに分割する予定のテーブルがいくつかあります。これらのパーティションを削除する前に、バックアップを実行したいと思います。私たちが見つけた1つのオプションは、このリンク http://www.percona.com/doc/percona-xtrabackup/howtos/recipes_ibkx_partition.html です。誰もが最高のメカニズムまたはmysqldumpなどの他のオプションがあることを示唆できますか?
質問でリンクしたPercona xtrabackupソリューションは良いソリューションです。これはホットバックアップであり、innodbテーブルをロックしません。ほとんどの場合、mysqldumpよりもそれを好みます。
Xtrabackupを試しましたか?それの使用について質問がありますか?
テーブルのバックアップを個別に取得する必要がある場合は、mysqldumpを各テーブルで個別のファイルに実行することを検討してください。
まず、テーブルのリストを作成します
MYSQL_USER=username
MYSQL_PASS=password
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQLSTMT="SELECT CONCAT(table_schema,'.',table_name)"
SQLSTMT="${SQLSTMT} FROM information_schema.tables"
SQLSTMT="${SQLSTMT} WHERE table_schema NOT IN"
SQLSTMT="${SQLSTMT} ('information_schema','mysql')"
mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" > ListOfTables.txt
中程度の数のテーブルがある場合、それらをすべて同時にダンプできます。
MYSQL_USER=username
MYSQL_PASS=password
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQLDUMP_OPTIONS="--hex-blob --triggers"
do
DB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $1}'`
TB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $2}'`
mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} ${DB} ${TB} | gzip > ${DB}_${TB}.sql.gz &
done
wait
並列にダンプするにはテーブルが多すぎる場合は、一度にすべてのテーブルを10にダンプします。
MYSQL_USER=username
MYSQL_PASS=password
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
COMMIT_COUNT=0
COMMIT_LIMIT=10
MYSQLDUMP_OPTIONS="--hex-blob --triggers"
for DBTB in `cat ListOfTables.txt`
do
DB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $1}'`
TB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $2}'`
mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} ${DB} ${TB} | gzip > ${DB}_${TB}.sql.gz &
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
then
COMMIT_COUNT=0
wait
fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
wait
fi
必要に応じて、メッセージをロードできる場合は、mysqldumpを実行します。
別の方法を次に示します。パーティション化する各テーブルのスキーマではなく、データのみのmysqldumpを実行します。上記のコードでは、mysqldumpオプションに--no-create-info
を追加してデータをダンプするだけです
MYSQLDUMP_OPTIONS="--hex-blob --triggers --no-create-info"
データが別のファイルにダンプされるだけなので、好みに応じてパーティション化されたInnoDBの作成に集中し、そこにデータのmysqldumpをロードすることができます。
あなたが試すことができる2つのことがあります
一度に1つのテーブルをダンプしたい場合は、すべてを1つのファイルにダンプする必要がありますが、トランザクションとしてダンプする必要があります。
MYSQL_USER=username
MYSQL_PASS=password
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQLDUMP_OPTIONS="--hex-blob --routines --triggers --single-transaction"
mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} --all-databases | gzip > MySQLData.sql.gz
トランザクションとしてマークされた並列mysqldumpを試すことができます
MYSQL_USER=username
MYSQL_PASS=password
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQLDUMP_OPTIONS="--hex-blob --triggers --single-transaction"
do
DB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $1}'`
TB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $2}'`
mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} ${DB} ${TB} | gzip > ${DB}_${TB}.sql.gz &
done
wait
お役に立てれば !!!