我有一个有8000万行的innodb表,而且mysqldump的速度非常慢,所以我想复制datadir目录进行备份/传输.
我曾经在Windows版本的MySQL中仅使用MyISAM表复制数据库,并且它运行良好.现在我正在复制一个包含从Linux到Windows的InnoDB和MyISAM表混合的数据库目录,这种方法是否也能正常工作?
我现在正在做这个,但我想知道我是否遗漏了什么? InnoDB表数据不是分布在ibdata1等各个地方吗?我没有备份ibdata1或其他任何东西吗?
解决方法:
请告诉我你是不是(甚至没想过)在启动并运行的数据库服务器上使用文件系统复制?这几乎可以保证导致您的副本损坏,使您的备份无用.您不会收到任何错误 – 当然,当您尝试恢复时:-)
你的帖子不太清楚(如果我错了,请纠正我),但你现在在Linux上运行你的数据库?如果是这样,那么请将Percona的XtraBackup用于InnoDB表.此工具执行InnoDB表的非阻塞热备份.请查看我的答案here以获取一些MySQL备份选项.对于MyISAM,如果mysqldump不具备性能,你可以查看MyDumper.
如果您的服务器仍在Windows上,那么您运气不好. XtraBackup不适用于Windows,也不适用于MyDumper(AFAIK).你可以查看this(免责声明 – 从未使用过).
同样,我并不完全清楚你在这里究竟是什么意思.
Now that I’m copying a database directory with a mix of InnoDB and
MyISAM tables from Linux to Windows, would this approach work as well?
如果你的意思是你将mysqldump从Linux复制到Windows,那么是的,这将作为任何文件副本.另一方面,如果您要在正在运行的服务器上复制(使用文件系统)数据文件并将这些副本从Linux传输到Windows,那么您的“备份”在两个系统上都将无用.
Ain’t InnoDB tables data spread across various places such as in
ibdata1? I don’t have to backup ibdata1 or anything right?
如果使用mysqldump备份数据库,那就足够了.如果您只是在正在运行的数据库服务器上将文件从一个位置复制到另一个位置,那么您执行或不复制的操作无关紧要,因为您的备份将毫无用处.
[编辑]回应原始海报的评论.
从here(正确答案)
mysqldump -uuser -ppass –single-transaction –routines –triggers
–all-databases > backup_db.sql
只需将您的模式名称替换为–all-databases.你说你的“表”是InnoDB – 是数据库/架构InnoDB的其余部分吗?如果没有,你应该这样做.你似乎认为datadir必须以某种形式或形式复制 – 它没有.转储包含重建数据库所需的数据.
如果出现问题,则从最后一个BACKUP(即转储)恢复数据库.还有其他解决方案允许PITR(即时点恢复),但它们更复杂,复制也可以解决这个问题.
另见这些帖子(1,2).
我对这些帖子的内容(检查海报的声誉)的看法是,使用InnoDB,上述命令将允许备份,同时允许对数据库进行读写 – 请注意,性能可能会受到影响.
标签:mysql,backup,innodb
来源: https://codeday.me/bug/20190805/1592394.html