MySQLバイナリログファイルが空のかどうかを判断する方法
質問
データベースのバックアップが必要かどうかを判断するには、MySQL Binlogファイルにデータがあるかどうかを確認しようとしています。(バックアップ中は、新鮮なBINLOGファイルを作成してファイル名を記録します。その後、そのBINLOGの内容を確認して、最後のバックアップ以降に何が発生したかどうかを確認できます。)
BINLOGファイルが実際に空のときに知る方法はありますか?おそらくmysqlbinlog
コマンドを使用していますか?
position
からSHOW MASTER STATUS
をチェックしますが、その位置はMySQLバージョンによって異なるようです...バージョン内の一定ですか?MySQLのマイバージョン(5.6.11)は、120桁目の新しいバイナリログを開始します。
代替アプローチは、BINLOGが作成された時間を記録し、その後変更された変更があったかどうかを確認することですが、そのようなバックアッププロセスの速度に緊張しているように緊張させます。
解決
空のバイナリログに関しては、バージョン固有のものです。
- MySQL 5.6 の
- MySQL 5.5 の
- MySQL 5.1 の
- MySQL 4.1 / 5.0 の
120
107
106
98
DBA Stackexchange
でこれを何度も議論しました-
Nov 19, 2014
:MySQL 5.1を持つことに関する質問5.6 db -
Jun 26, 2013
:ステートメント形式から行フォーマットにMySQL BINLOGを変換することは可能ですか? -
Oct 20, 2011
:ディスク容量の停止 があったときにマイSQL DBマスターをマスターレプリケーションに処理する方法
-
Feb 04, 2011
: MySQL Master Binlog Cofercution - この について話し合うすべての私の投稿
あなたの場合は、ただ1つのコマンドを実行する必要があります
SHOW MASTER STATUS;
.
これはあなたに現在のバイナリログMysqldが書いていると仮説を表しています。それはただ起こるので、ログ位置もファイルサイズです。
これは、バックアップを起動する前に空のBINLOGのチェック方法の例です。
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
#
# Find out the MySQL Version
#
SQL="SELECT VERSION()"
VERS=`mysql ${MYSQL_CONN} -ANe$"${SQL}"`
MYSQL_VERSION=`echo "${VERS}" | sed 's/\./ /g' | sed 's/ /./' | awk '{print $1}'`
case "${MYSQL_VERSION}" in
"5.0") EMPTY_BINLOG_SIZE=98 ;;
"5.1") EMPTY_BINLOG_SIZE=106 ;;
"5.5") EMPTY_BINLOG_SIZE=107 ;;
"5.6") EMPTY_BINLOG_SIZE=120 ;;
esac
#
# Get the Current Master Log's Position
#
SQL="SHOW MASTER STATUS"
LOGPOS=`mysql ${MYSQL_CONN} -ANe$"${SQL}" | awk '{print $2}'`
#
# Compare log position to an empty log size
#
OK_TO_BACKUP=0
if [ ${LOGPOS} -eq ${EMPTY_BINLOG_SIZE} ]; then OK_TO_BACKUP=1 ; fi
if [ ${OK_TO_BACKUP} -eq 1 ]; then
...
fi
.
試してみる!!!
提案
すべてのテーブルがInnoDBストレージエンジンを使用している場合は、ポイントインタイムでデータをダンプでき、ログファイルと位置をキャプチャして、まだ挿入、更新、削除を可能にします(してください)。バックアップ中にDDLをしないでください)。 Options --single-transaction
と--master-data=2
でmysqldumpを使用すると、1行目のログファイル/位置が書き込まれます。
私はちょうどこの6日前に言及しました:マスター/マスター/スレーブのレプリケーション< / a>