从slave做mysqldump时如何编写master的Mysql二进制日志位置?

wbh*_*ing 7 mysql mysqldump master-slave database-backups

我目前在Mysql slave上运行mysqldump来备份我们的数据库.这对于备份我们的数据本身很有效,但我想补充的是主机的二进制日志位置,它与mysqldump生成的数据相对应.

这样做可以让我们恢复我们的奴隶(或设置新的奴隶),而不必在主数据库上执行单独的mysqldump,我们获取主数据库的二进制日志位置.我们只需要获取mysqldump生成的数据,将它与我们生成的二进制日志信息结合起来,然后再进行重新调整.

到目前为止,我的研究让我非常关心能够实现这个目标,但我似乎无法找到一种自动化的方法来实现这一目标.以下是我发现的"差不多":

  • 如果我们从主数据库运行mysqldump,我们可以使用mysqldump中的"--master-data"参数来记录主服务器的二进制位置以及转储数据(我认为如果我们开始生成二进制日志,这可能也会有用)我们的奴隶,但这对我们想要完成的事情来说似乎有点过头了)
  • 如果我们想以非自动方式执行此操作,我们可以登录到slave的数据库并运行"STOP SLAVE SQL_THREAD;" 其次是"SHOW SLAVE STATUS"; (http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html).但是,除非我们事先知道我们想从药膏中取出一些东西,否则这对我们没有好处.
  • 如果我们每年需要500美元,我们可以使用InnoDb热备份插件,只需从主数据库运行我们的mysqldump.但是我们没有这笔钱,而且我不想在主DB上添加任何额外的I/O.

这似乎是一个普遍的东西,以前有人必须弄明白,希望有人使用Stack Overflow?

Ros*_*gan 8

以下shell脚本将以cron或periodic运行,根据需要替换变量(默认为FreeBSD编写):

# MySQL executable location
mysql=/usr/local/bin/mysql

# MySQLDump location
mysqldump=/usr/local/bin/mysqldump

# MySQL Username and password
userpassword=" --user=<username> --password=<password>"

# MySQL dump options
dumpoptions=" --quick --add-drop-table --add-locks --extended-insert"

# Databases
databases="db1 db2 db3"

# Backup Directory
backupdir=/usr/backups

# Flush and Lock
mysql $userpassword -e 'STOP SLAVE SQL_THREAD;'

set `date +'%Y %m %d'`

# Binary Log Positions
masterlogfile=`$mysql $userpassword -e 'SHOW SLAVE STATUS \G' | grep '[^_]Master_Log_File'`
masterlogpos=`$mysql $userpassword -e 'SHOW SLAVE STATUS \G' | grep 'Read_Master_Log_Pos'`

# Write Binlog Info
echo $masterlogfile >> ${backupdir}/info-$1-$2-$3.txt
echo $masterlogpos >> ${backupdir}/info-$1-$2-$3.txt

# Dump all of our databases
echo "Dumping MySQL Databases"
for database in $databases
do
$mysqldump $userpassword $dumpoptions $database | gzip - > ${backupdir}/${database}-$1-$2-$3.sql.gz
done

# Unlock
$mysql $userpassword -e 'START SLAVE'

echo "Dump Complete!"

exit 0
Run Code Online (Sandbox Code Playgroud)