探索,發現,愛好、學習,記錄,分享。
學海無涯,天涯若比鄰,三人行,必有我師。

使用mysqludmp导出InnoDB的数据命令参考

1、导出成文本

方法: SELECT * INTO OUTFILE ‘/backup/test1.txt’ FROM yejr;

方法: mysqldump -t -n –default-character-set=latin1 test test1 > /backup/test1.sql

2、导入测试

导入 txt 文件

方法: mysql test < /backup/test1.txt

方法: mysql test < /backup/test1.sql

为了获得数据一致性,myisam使用lock-table,innodb使用single-transaction,而这两个参数是互斥的,如果一个库里面这两种表都有,怎么一致的导出呢?

lock-table有两个参数–lock-tables和–lock-all-tables,–lock-tables是锁定某个库的所有表。
如果你只备份一个库,如mysql库,使用,–lock-tables就是锁定mysql中的所有表,而不会锁定其他库的表。
如果备份会涉及多个库,为了获得备份数据的一致性,得用刚才指出的–lock-all-tables来锁定所有库的表。

mysqldump这个工具,其备份方式是逻辑备份,对存储引擎无选择性,也就是说,不管是什么引擎都通吃。

再者就是single-transaction,它的含义是以事务的方式来做备份,和锁表的方式相比,它的优点在于不一次锁定所有所需的表,而且能够保证所得到的备份时一致的,因为这个备份是在一个事务内完成的。但其不便就是,当备份对象很大的时候,其事务也会变得很大,对涉及到事务的相应对象,比如回退段影响大。

最后说明一下flush logs,在mysqldump的时候指定–flush-logs选项,它的含义是在备份结束后会结束当前的binlog,生成一个新的binlog,而这个新的binlog,就是所谓的增量。

lock-all-table 表示把所有的库,表都锁住了,此时不允许写入,MyISAM和InnoDB肯定是一致的。

flush tables with read lock;flush logs;cp…..;unlock table;还是flush tables with read lock;cp……;flush logs;unlock table;

这两种方式都没有问题。重要的是,你恢复数据库以后,从备份库的哪个位置开始应用binlog。

首先,将所有的数据逻辑导入。这里并没有完,你保证了MyISAM和InnoDB或者其他引擎的一致性,没问题。
因为备份完成后,你就解锁了,数据又有变更。你如果先把后面的这些变更赶上,那么就必须从备份库的某一个位置开始应用binlog。
这个位置必须在lock table 和unlock table之间记录,只有在这段时间内,binlog是不变的,也正是在这段时间内,你把所有的数据拷贝出去了。

所以,flush logs在你说的这两种情况下,并没有太大的区别。它只是在当前binlog最末尾的位置上加上Rotate Event,提示下一个binlog文件是谁。
而恢复的时候是从文件的末尾开始恢复,还是从下一个文件的开头位置恢复都没有问题。因为这里的binlog并不设计到业务数据的变化。
这里应该没有必要看MySQL的源码,你直接试试在lock和unlock之间,flush logs,然后用mysqlbinlog看看它做了什么事情就好了。

结论就是mysqldump –lock-all-table可以一致性导出,无论什么存储引擎。
其实从lock-all-table参数会自动turn off   –lock-table 和 –single-transaction就可以看出些端倪。
至于flush-log,两种不同顺序的写法是没有太大区别。

基于描述的情况:‘一个mysql应用中有多个库,在这多个库里既有myisam表也有innodb表’
为了了到有效的备份,可以这样做:

1、flush tables;             –确保备份过程中不会被后台进程再修改    
2、两种方案可选择:

1)执行 mysqldump –lock-all-tables  –flush-logs –master-data=2 –all-databases > backup.sql          (get a full backup)
2)执行  mysqldump –single-transaction   –flush-logs –master-data=2  –databases db1 db2 db3  > backup.sql

3. over!

版權聲明:本文采用知識共享 署名4.0國際許可協議 [BY-NC-SA] 進行授權
轉載事宜:如需轉載需徵得應允,轉載必須注明來源於本站的信息。
文章名称:《使用mysqludmp导出InnoDB的数据命令参考》
文章链接:https://www.thefreesky.com/blog/24659.html
本站資源僅供個人學習交流,請於下載後24小時內刪除,不允許用於商業用途,否則法律問題自行承擔。

評論 抢沙发