質問

データベースのバックアップが必要かどうかを判断するには、MySQL Binlogファイルにデータがあるかどうかを確認しようとしています。(バックアップ中は、新鮮なBINLOGファイルを作成してファイル名を記録します。その後、そのBINLOGの内容を確認して、最後のバックアップ以降に何が発生したかどうかを確認できます。)

BINLOGファイルが実際に空のときに知る方法はありますか?おそらくmysqlbinlogコマンドを使用していますか?

positionからSHOW MASTER STATUSをチェックしますが、その位置はMySQLバージョンによって異なるようです...バージョン内の一定ですか?MySQLのマイバージョン(5.6.11)は、120桁目の新しいバイナリログを開始します。

代替アプローチは、BINLOGが作成された時間を記録し、その後変更された変更があったかどうかを確認することですが、そのようなバックアッププロセスの速度に緊張しているように緊張させます。

役に立ちましたか?

解決

空のバイナリログに関しては、バージョン固有のものです。

  • MySQL 5.6
  • 120
  • MySQL 5.5
  • 107
  • MySQL 5.1
  • 106
  • MySQL 4.1 / 5.0
  • 98

DBA Stackexchange

でこれを何度も議論しました

あなたの場合は、ただ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>

そのように、アプリケーションのダウンタイムなしで空のバイナリログを待つ必要はありません。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top