mysqldump的简单用法及其原理

mysqldump
生产备份:
  搭建主从: mysqldump -A -B -R --master-data=2 >backup.sql

  备份单库(包含建库语句): mysqldump -B 数据库名 --single-transaction >db.sql

  备份单库:(不包含建库语句):mysqldump db_name --single-transaction >db_date.sql

  备份表的数据及结构:mysqldump -u username -ppassword database --tables table_name1 table_name2 table_name3 >create_date.sql

  备份指定表的结构:mysqldump -u username -ppassword -d database --tables table_name1 table_name2 table_name3 >create_table.sql

  备份指定表的数据:mysqldump -u username -ppassword -t database --tables table_name1 table_name2 table_name3 >table_data.sql

  数据库中,某些表除外,其余表都需导出
    mysqldump -h IP -u username -ppassword --default-character-set=utf8
    --database database_name --ignore-table=database_name.table_name1
    --ignore-table=database_name.table_name2 --ignore-table=database_name.table_name3 >ignore_table.sql
恢复:
  对应好服务器、数据库
  source backup.sql;

mysqldump的原理:(可以在dump时自行打开general log,观察日志的输出)  

  1. mysqldump的本质是通过select * from tab来获取表的数据的。

  2. START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */必须放到FLUSH TABLES WITH READ LOCK和UNLOCK TABLES之间,放到之前会造成START   TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */和FLUSH TABLES WITH READ LOCK之间执行的DML语句丢失,放到之后,会造成从库重复插入数据。

  3. mysqldump只适合放到业务低峰期做,如果备份的过程中数据操作很频繁,会造成Undo表空间越来越大,undo表空间默认是放到共享表空间中的,而ibdata的特性是一旦增大,就不会收缩。

  4. mysqldump的效率还是比较低下,START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */只能等到所有表备份完后才结束,其实效率比较高的做法是备份完一张表就提交一次,这样可尽快释放Undo表空间快照占用的空间。但这样做,就无法实现对所有表的一致性备份。

posted @ 2017-09-13 11:10  糖不吃~  阅读(545)  评论(0编辑  收藏  举报