MySQL备份-mysqldump

一先建立备份账号

create user 'backup'@'localhost' identified by 'pass4word';

二赋予权限

grant select,reload,lock tables,replication client,show view,event,process on *.* to 'backup'@'localhost';

附加,查看创建表的语句

show create table table_name;

 三备份单个数据库

 mysqldump -ubackup -ppass4word --master-data=2 --single-transaction --routines --triggers --events tk_test >tk.sql

 


详解

备份分类

按照是否能继续提供服务

  • 热备 :在线备份,能读能写.
  • 冷备 :离线备份

按照备份数据库对象分类

  • 物理备份:对数据库目录的拷贝,速度较快,对于内存表只备份结构。
  • 逻辑备份:备份的结果为SQL语句.适合于所有存储引擎。相比物理备份而言速度较慢。

    

按照备份数据量

  • 全量备份
  • 增量备份

 

 备份内容和备份工具

需要备份的内容:文件,二进制日志,事务日志,配置文件,操作系统上和MySQL相关的配置

备份工具:

mysqldump:逻辑备份工具.要求MySQL服务在线. MyIsam(温备,可读不可写), InnoDB(热备,可读可写)

cp :冷备份

lvm快照:几乎热备.注意点是 ,先flush table,lock table,创建快照,释放锁,复制数据.因为要先flush table 和lock table,这对于MyISAM来说很简单很容易实现.但对于InnoDB来说,因为事务的原因,锁表后可能还有缓存中的数据在写入文件中,所以应该监控缓存中的数据是否真的已经完全写入数据文件中,之后才能进行复制数据

xtrabackup:开源 .MyISAM(温备),InnoDB(热备),速度较快


 

语法选项

  • mysqldump [OPTIONS] database_name [tables]   
    mysqldump -ubackup -ppass4word  tk_test2 tk_test >back.sql

     

  • mysqldump [OPTIONS] --databases [OPTIONS]  DB1 [DB2 DB3 ..]

  • mysqldump -ubackup -ppass4word --database  tk_test2 tk_test >back.sql

     

  • mysqldump [OPTIONS] --all-databases [OPTIONS]
    mysqldump -ubackup -ppass4word --all-databases > m2.sql;

     

 连接选项

-u , --user=name          #指定用户名

-S, --socket=name       #指定套接字路径

-p, --password[=name]          #指定密码

-P, --port=#            #指定端口号

-h, --host=name         #指定主机名

 

-r ,--result-file=name

将结果保存到指定的文件中,在Linux中等同于覆盖重定向.在windows中因为回车符\r\n的原因,使用该选项比重定向更好

筛选选项
--all-databases, -A

指定dump所有数据库,

--databases, -B

指定需要dump的库,该选项后所有内容都被当成数据库名,在输出文件中的每个数据库前会加上建库语句和use语句

--ignore-table=db_name.tbl_name

导出时忽略指定数据库中的指定表,同样可以用于忽略视图,要忽略多个则多次写该选项

-d, --no-data

不导出表数据,可以用在仅导出表结构的情况

--hex-blob

将binary varbinary,blob,bit类型导出为十六进制

--events,-E

导出时间调度器

--routines,-R

导出存储过程和函数,但不会导出它们的属性值,若要导出它们的属性,可以导出mysql,proc表然后reload

--triggers

导出触发器,默认已开启

--tables

覆盖 --databases选项,导出指定表,但这样只能导出一个库中的表.格式为--tables database_name table_name1 table_name2

--where='where_condition' ,-w 'where_conditdion'

指定筛选条件并导出表中符合筛选的数据.如--where="user='张三'"

字符集选项

--default-character-set=charset_name

在导出数据的过程中,指定导出的字符集.客户端服务端字符集不同导出时可能乱码,默认使用utf8

--set-charset

在导出结果中加上 set names charset_name语句.默认启用

复制选项

--master-data[=value]

该选择主要用来建立以个replication,当值为1时,导出文件中记录change master语句;

当值为2时,change master语句被写成注释语句,默认值为空

该选项会自动忽略--lock-tables,当没有使用 --single-transaction时自动启用 --lock-all-tables


 

 

比如要导出we7库下member表中部分数据,完整的加where语句的用法 

 将会导出ims_kz_mgcjbp_member表中 id >3300 并且id 小于3360下的所有数据

mysqldump -uroot -proot --master-data=2 --single-transaction --events --triggers --routines --where 'id >3300 and id <3360' we7 ims_kz_mgcjbp_member > member.sql

 --tab,-T

为每个表在给定路径创建tab分割的文本文件, 注意:仅仅用于Mysqldump和mysqld服务器运行在相同机器上

mysqldump -uroot -proot --master-data=2 --single-transaction --events --triggers --routines --where 'id >3300 and id <3360'   we7 ims_kz_mgcjbp_member --tab='/data/backup'

上面的命令则会在data/backup 目录下生成 ims_kz_mgcjbp_member.sql,ims_kz_mgcjbp_member.txt文件.

 

 

 mysqldump使用建议

从性能角度考虑:在需要导出大量数据的时候,使用--quick选项可以加速导出,但导入熟读不变,如果是innodb表,则可以同时加上--no-autocommit选项,这样大数据量导入时将极大提升性能

 

posted @ 2021-07-26 23:21  X__cicada  阅读(244)  评论(0编辑  收藏  举报