数据库是否能够继续提供服务 |
热备份 | 在线备份,能读能写 | ||||
温备份 | 能读不能写 | |||||
冷备份 | 离线备份 | |||||
备份数据库对象 | 物理备份 | 直接复制数据文件,直接复制数据文件,速度较快 | ||||
逻辑备份 | 将数据导出至文件中,必要时将其还原(也包括备份成sql语句的方式)。 将数据导出到文本文件中或其他格式的文件中。有MySQL服务进程参与,相比物理备份而言速度较慢;可能丢失浮点数精度;但可以使用文本工具二次处理;可以跨版本和跨数据库系统进行移植 | |||||
是否备份整个数据集 | 完全备份 | 备份从开始到某段时间的全部数据 | ||||
差异备份 | 备份自完全备份以来变化的数据 | |||||
增量备份 | 备份自上次增量备份以来变化的数据 | |||||
mysqldump:逻辑备份工具。要求mysql服务在线。MyISAM(温备),InnoDB(热备) lvm快照:几乎热备。注意点是:先flush table、lock table、创建快照、释放锁、复制数据。因为要先flush table和lock table,这对于 MyISAM来说很简单很容易实现。但对于InnoDB来说,因为事务的原因,锁表后可能还有缓存中的数据在写入文件中,所以 应该监控缓存中的数据是真的已经完全写入数据文件中,之后才能进行复制数据。 cp:冷备 |
mysqldump | mysqldump默认会从配置文件中的mysqldump段读取选项,配置文件读取的顺序: /etc/my.cnf --> /etc/mysql/my.cnf --> /usr/local/mysql/etc/my.cnf --> ~/.my.cnf | |
选项 | -A --all-databases | 导出全部数据库 |
-B --databases | 导出几个数据库。参数后面所有名字参量都被看作数据库名 | |
--ignore-table | 不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 …… | |
--max_allowed_packet | 服务器发送和接受的最大包长度 | |
-n --no-create-db | 只导出数据,而不添加CREATE DATABASE 语句。 指定了--databases或者--all-databases选项时默认会加上数据库创建语句,该选项抑制建库语句的输出 | |
-t --no-create-info | 只导出数据,而不添加CREATE TABLE 语句。
| |
-d --no-data | 不导出任何数据,只导出数据库表结构 | |
--opt | 这只是一个快捷选项,等同于同时添加 –add-drop-tables –add-locking –create-option –disable-keys –extended-insert –lock-tables –quick –set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 –skip-opt 禁用。注意,如果运行 mysqldump 没有指定 –quick 或 –opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题 | |
-R --routines | 导出存储过程以及自定义函数。 | |
--add-drop-table | 每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项) | |
--single-transaction | 该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储 引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的 话,应结合使用--quick 选项。 | |
--quick, -q | 不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。 | |
--tables | 覆盖--databases (-B)参数,指定需要导出的表名 | |
--triggers | 导出触发器。该选项默认启用,用--skip-triggers禁用它。 | |
--where, -w | 只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来 | |
1 导出一个数据库的结构 mysqldump -d dbname -uroot -p > dbname.sql 2 导出多个数据库的结构 mysqldump -d -B dbname1 dbname2 -uroot -p > dbname.sql 3 导出一个数据库中数据(不包含结构) mysqldump -t dbname -uroot -p > dbname.sql 4 导出多个数据库中数据(不包含结构) mysqldump -t -B dbname1 dbname2 -uroot -p > dbname.sql 5 导出一个数据库的结构以及数据 mysqldump dbname -uroot -p > dbname.sql 6 导出多个数据库的结构以及数据 mysqldump -B dbname1 dbname2 -uroot -p > dbname.sql 7 导出一个数据库中一个表的结构 mysqldump -d dbname1 tablename -uroot -p > tablename.sql 8 导出一个数据库中多个表的结构 mysqldump -d -B dbname1 --tables tablename1 tablename2 -uroot -p > tablename.sql 9 导出一个数据库中一个表的数据(不包含结构) mysqldump -t dbname1 tablename -uroot -p > tablename.sql 10 导出一个数据库中多个表的数据(不包含结构) mysqldump -t -B dbname1 --tables tablename1 tablename2 -uroot -p > tablename.sql 11 导出一个数据库中一个表的结构以及数据 mysqldump dbname1 tablename -uroot -p > tablename.sql 12 导出一个数据库中多个表的结构以及数据 mysqldump -B dbname1 --tables tablename1 tablename2 -uroot -p > tablename.sql
存储过程&函数操作 1 只导出存储过程和函数(不导出结构和数据,要同时导出结构的话,需要同时使用-d) mysqldump -R -ndt dbname -u root -p > dbname.sql 2 只导出事件 mysqldump -E -ndt dbname -u root -p > dbname.sql 3 不导出触发器(触发器是默认导出的–triggers,使用–skip-triggers屏蔽导出触发器) mysqldump --skip-triggers dbname1 -u root -p > dbname.sql |