mysqldump是MySQL中最常用的备份工具,在一些情况下,也是我们唯一可以选择的备份工具。mysqldump是在MySQL发行版中所提供的一种逻辑备份工具,支持对数据库进行全量备份和有条件的备份,其备份结果就是SQL转储文件。那么我们如何使用mysqldump呢?我们先来看一下mysqldump的语法
mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
使用mysqldump --help我们可以看到,mysqldump的常用语法有三种。
mysqldump datebases [tables] 用于对指定数据库下的某一个或是某一些表进行备分
mysqldump -databases [OPTIONS] DB1 [DB2 DB3...] 用于对指定的数据库进行备份
mysqldump [OPTIONS] --all-databases [OPTIONS] 用于对所有数据库进行备份
而[OPTIONS]则是一些备份的参数,常用的一些参数及功能如下:
-u 备份用户
-p 备份用户的密码
--flush-logs 在备份开始前先执行flush logs 命令刷新二进制日志到磁盘,并生成一个新的二进制日志文件
--master-data 这个参数在我们上一章中已经多次提到了,其主要用途就是在备份文件 中记录备份时MySQL实例的二进制日志文件名和偏移量信息。这个参数有两个取值1和2,当为2时会在生成的change master命令前加上注释符。
--routines 在备份文件中包括存储过程和函数
--triggers 在备份文件中包括触发器
--events 在备份文件中包括MySQL计划任务
--where 这个参数让我们可以按照一定条件来备份某一个表的数据
--single-transaction:这个参数主要用于INNODB存储引擎,该参数在事务隔离级别设置成Repeatable Read,并在dump之前发送start transaction 语句给服务端。这在使用innodb时很有用,因为在发出start transaction时,保证了在不阻塞任何应用下的一致性状态。对myisam和memory等非事务表,还是会改变状态的,当使用此参的时候要确保没有其他连接在使用ALTER TABLE、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE等语句,否则会出现不正确的内容或则失败。--add-locks和此参互斥,
那么如果我们想使用mysqldump对MySQL数据库进行全备的话,我们要如何做呢?其实很简单,只要使用下面的命令就可以了
mysqldump -u xxx -p xxxx --single-transaction --triggers --routines --events -all-databases >> all.sql
是不是很简单呢?
同样如果我们只想备份,某一个表中的符合条件的数据的话,则可以使用下面的方法
mysqldump -uroot -p --where "count>30 " dbname tbname > tb.sql
其中--where参数就是备份的条件,就和我们在SELECT语句中使用WHERE从句时一样。