笔记@MySQL——————备份实验:mysqldump

mysqldump简单的备份,用的是root身份,用户、密码省略

#mysqldump   (-uroot  -p111111)   数据库D

上面的命令实际是把整个数据库D,查询了一遍,在屏幕上显示一遍。

#mysqldump      数据库D  >   D.sql

把查询数据库D的结果存储到.sql后缀的文件里,

xxx.sql整个文件里,存储的内容是SQL语句,比如:

如果存在表1,就删除表1

创建表1,并加写锁

插入表1的内容

接锁,

如果存在表2,就删除表2

创建表2,并加锁

插入表2 的内容

解锁

依次操作……

这样操作存在漏洞,如果表内容大,表与表操作存在时间差,在实际生产中,无法确保数据时间统一,会存在错误,

在上面的命令里不存在创建数据库的命令,如果后期操作没有这个数据库,直接操作会报错,原来的数据库被破坏,无法得知,就无法直接操作,所以要把xx.sql文件定向到一个数据库里,

#mysql   库名 <  /d/xx.sql     ,如果没有原数据库要指定一个数据库

挑表备份

#mysqldump     database名      table名   >   /d/xxx.sql

加-B选项,

#mysqldump     -B    database名  (db名...)    >   /d/xxB.sql

加-B选项就会把对应数据库的定义结构备份到xxB.sql里

加载xxB.sql文件可以直接操作,不用指定数据库

#mysql     <   /d/xxB.sql

mysqldump 的常用选项

-A

-B

-E  ,--events:把调度任务,计划任务也备份下来

-R, --routines:把存储过程中可执行的备份下来,比如函数、存储过程

一般情况:函数,用户数据等都放在mysql里,把mysql备份,

备份加压缩

#mysqldump   -A  |gzip   >   /d/xxx.sql.gz

解压缩。会把压缩文件解到当前文件夹里,如果有同名的要移走再解压缩

#gzip   -d   xxx.sql.gz

把解压后的xxx.sql文件导入mysql就可以

#mysql    <    xxx.sql

#mysql    -e    'show   databases'

写脚本:分库备份

先把库名取出,用mysqldump   -B    取出的库名 ,放到循环里


 不用循环,写脚本取备份

还缺-uroot   -p111

也可以生成带时间的。

--master-data【=#】:此选项必须开启二进制日志,#为1或2

        1:所备份的数据之前加一条记录为change master to 语句,非注释,不指定#,默认为1

        2:记录为注释的change  master to语句

此选项会自动关闭--lock-tables功能,自动打开--lock-all-tables功能(除非开启--single-transaction)

mysqldump的常见选项:

     -F, --flush-logs :备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文件,配合-A 或 -B 选项时,会导致刷新多次数据库。建议在同一时刻执行转储和日志刷新,可通过和--single-transaction或-x,--master-data 一起使用实现,此时只刷新一次日志

    --compact 去掉注释,适合调试,生产不使用

    -d, --no-data 只备份表结构

    -t, --no-create-info 只备份数据,不备份create table

    -n,--no-create-db 不备份create database,可被-A或-B覆盖

    --flush-privileges 备份mysql或相关时需要使用

    -f, --force 忽略SQL错误,继续执行

   --hex-blob 使用十六进制符号转储二进制列(例如,“abc”变为0x616263),受影响的数据类型包括BINARY, VARBINARY,BLOB,BIT

    -q, --quick 不缓存查询,直接输出,加快备份速度




猜你喜欢

转载自blog.csdn.net/lhl98765432/article/details/80721151