1.mysqldump的简介
mysqldump工具是mysql数据库自带的、最基础的一款备份工具。它的备份过程首先是从buffer中找到需要备份的数据进行备份,如果buffer中没有,就去磁盘中数据文件查找并缓存到buffer里再进行备份。最后形成一个可编辑的备份文件。
2.mysqldump的参数简介
首先可以通过mysqldump -help 或者mysqldump --help命令查看该命令的使用说明。下面主要介绍几个生产过程中经常用得到的参数。
--single-transaction
用于保证InnoDB备份数据时的一致性,配合RR隔离级别一起使用,当发起事务时,读取一个数据的快照,直到备份结束时,都不会读取到本事务开始之后提交的任何数据。
--all-databases (-A)
备份所有的数据库。
--master-data
该参数有1和2两个值,如果是1,就会在备份出来的文件中添加一个change master的语句(后期配置搭建主从架构);如果是2,就会在备份出来的文件中添加一个change master的语句,并且在语句前面添加注释符号(后期配置搭建主从架构)。
--dump-slave
该参数用于在从数据库备份数据,在线搭建新的从库时使用,该参数也有1和2两个值。值是1,是在备份的文件中添加一个change master的语句;值是2时,则会在change master命令前加注释信息。
--no-create-info (-t)
只备份表数据,不备份表结构
--no-data (-d)
只备份表结构,不备份表数据
--complete-insert (-c)
使用完整的insert语句会包含表中的列信息,这么做可以提高插入效率。
--databases (-B)
备份多个数据库,比如,mysqldump -uroot -p123456 --databases db1 db2
--default-character-set
字符集,mysql默认的字符集是utf8
--quick (-q)
相当于加sql_no_query,意味着并不会读取缓存中的数据。
--where=name (-w)
按条件备份数据
3.mysqldump备份数据案例
案例1:备份全库,命令如下
首先先在/usr/local/下面创建一个文件夹backup
mkdir backup
其次执行下面的命令
mysqldump --single-transaction -uroot -p -A > all_database_20181204.sql
案例2:恢复全库,命令如下:
mysql -uroot -p12345678 < /usr/local/backup/all_database_20181204.sql
案例3:备份单个库的过程,命令如下,在这里我们备份mysql数据库
mysqldump --single-transaction -uroot -p mysql>/usr/local/backup/mysql_database_20181204.sql
案例4:恢复单库,命令如下
mysql -uroot -p12345678 mysql < /usr/local/backup/mysql_database_20181204.sql
如果mysql库存在,则直接恢复,如果已经删除drop掉,则需要在恢复前,先去数据库创建一个mysql库;命令如下:
create database mysql;
案例5:备份mysql数据库中的user表,命令如下:
mysqldump --single-transaction -uroot -p mysql user > /usr/local/backup/mysql_user_20181204.sql
案例6:恢复刚刚备份的表,命令如下:
mysql -uroot -p12345678 mysql < /usr/local/backup/mysql_user_20181204.sql
从上述命令可以看到,在恢复表的时候不需要写表的名字,只需要写上库的名字。
案例7:备份mysql库下表user的表结构,命令如下
mysqldump --single-transaction -uroot -p mysql user --no-data > /usr/local/backup/mysql_user_nodata_20181204.sql
案例8:备份mysql数据库下表user的表数据信息,命令如下
mysqldump --single-transaction -uroot -p mysql user --no-create-info > /usr/local/backup/mysql_user_nodata_20181204.sql
案例9:按条件进行备份,只备份表user中user为root的数据行,命令如下:
mysqldump --single-transaction -uroot -p mysql user --where="user='root'" > /usr/local/backup/mysql_user_root_20181204.sql
注意的是where后面一定加双引号,否则不会被识别。