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表空间快照占用的空间。但这样做,就无法实现对所有表的一致性备份。