首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用db转储和绑定日志恢复MySQL数据库

用db转储和绑定日志恢复MySQL数据库
EN

Database Administration用户
提问于 2012-10-22 20:36:01
回答 1查看 4.4K关注 0票数 4

我有一个数据库运行在我们的生产web服务器上,我已经将其设置为一个主服务器,在另一个数据中心中有一个从属服务器。当阅读MySQL复制设置说明时,他们建议将服务器脱机,放置读锁,进行转储,然后使用它创建从服务器。我做了,建立了复制,我们很高兴。

今天,我认为在广域网上清晰地复制可能不是一个好的实践。因此,我研究了通过SSH隧道(临时)设置复制。这要求我将master_host更改为127.0.0.1,而不是我的主IP。在这样做的过程中,我复制了我的副本,现在我必须重新开始。问题是,大师只有expire_logs_days=1,所以我不能重复最初的过程,因为它是上周。我确实备份了其他的二进制日志,但是使用mysqlbinlog来恢复所有这些日志总是因为临时表问题而失败。

所以,现在我试图让从备份和运行,而不让主人下来。每3个小时,在主服务器上,我们为备份做一个数据库转储。我们使用mysqldump -v --flush-logs --single-transaction --routines ....,这样就可以切断当前的二进制日志,并通过每次备份创建一个新的日志。但是,如果我还原一个数据库转储,然后尝试使用使用最后一个刷新日志命令创建的新二进制日志启动复制备份,我仍然会遇到密钥冲突,就像他们警告的那样。

考虑到这些信息,我是否可以通过转储成功地启动从服务器,而不必再次关闭服务器?如果我不得不去要求更多的休息时间,我就不会在一个好地方了。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2012-10-22 21:12:13

在这种情况下,它们是对您有好处的两件事。

  • 好消息#1 :您可以将两个MyISAM表转换为InnoDB
  • 好消息2:两个MyISAM表从未改变过

如果任何一件好事都适用的话,那么我有好消息要告诉你

STEP01) Zap主(可选)

上的所有二进制日志

在主服务器上运行以下命令:

代码语言:javascript
复制
mysql> RESET MASTER;

如果这个部分让您感到害怕,您可以跳过它,或者在执行之前复制二进制日志。

STEP02)创建mysqldump,如下所示:

代码语言:javascript
复制
echo "STOP SLAVE;" > MySQLSlaveReload.sql
mysqldump -v --master-data=1 --single-transaction --routines ....  >> MySQLSlaveReload.sql
echo "START SLAVE;" >> MySQLSlaveReload.sql

(

STEP03)将MySQLSlaveReload.sql移动到奴隶

(

STEP04)在从

上加载MySQLSlaveReload.sql

在奴隶上,按如下方式加载脚本:

代码语言:javascript
复制
mysql -u... -p... -A < MySQLSlaveReload.sql

脚本将停止从服务器,加载数据,并启动从服务器。日志文件和位置呢?在执行STEP02之前,请查看MySQLSlaveReload.sql的第22行

代码语言:javascript
复制
head -22 MySQLSlaveReload.sql | tail -1

mysqldump选项--master-data=1记录到第22行mysqldump开始时的日志文件和位置。

试试看!!

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/27411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档