首页 > 技术文章 > MySQL备份

yansunda 2020-09-27 03:56 原文

MySQL备份有三种方法,分别是mysqldump、mysqlhotcopy、mysql-binlog备份,他们各自有优点和缺点。

1、mysqldump的备份

      原理:全量备份,查处要备份的表结构,在这个表结构上将建表语句(CREATE)和插入语句(INSERT)语句,都写到你要备份的文件中。

                 优点:支持innodb的存储引擎,但是其mysqldump转存结果前,会将这个结果集放入内存中,数据量过大可能存在问题(手册里说的),所以有主从模式以及mysql-bin增量备份的模式,就可以减少备份的时间,我们可以每天夜里都备份一次,或者写一个shell脚本,进行备份,shell脚本还是要学习的。

                 由于我的mysqld安装目录在/usr/local/mysql,所以我的mysqldump的路径为在/usr/local/mysql/bin/mysqldump,在这里做一个软连接,使mysqldump作为系统命令。

                 ln -s /usr/local/mysql/bin/mysqldump /usr/bin   ,如图所示:

    

 

 

               语法可以上网查一下:(注意了,mysqldump等文件使一个可执行文件,使在Linux的cli中运行的)

    案例一:把数据库db_test备份到/tmp/db_test文件中,代码如下【-h 最好加上,格式标准,再说以后分布式的时候都会用到】: 

mysqldump -h 127.0.0.1 -uroot -p db_test>/tmp/db_test.sql

              效果如下:

    

 

 

     我们看看,db_test.sql的问题内容,如下所示:

   

 

 

     当然还可以把整个数据库mysqldump备份,具体的问题就具体分析。

 2、mysqlhotcopy备份,也可以叫热备份

    优点:快

    缺点:只支持MySIAM存储引擎

   这个就不做例子了,思路和mysqldump差不多,具体用法可以百度查

  3、mysql-binlog【重点】

  原理:配置文件log-bin=mysql-bin  使控制binlog是否开启的开关。binlog会记录增删改改的记录。

  mysql Bin-log日志的使用场景主要有两个:1、主从复制【在后面的文章中会讲到,master 把bin-log的二进制日志推送给slaves来达到master-slave数据一致】。2、数据恢复,通过使用mysql Bin-log工具来使恢复数据。

  bingLog地址:data目录下,/usr/local/mysql/data/,如下图所示:

  

 

    为什么会有这么多mysql Binlog文件?

  答:MySQLBinlog当遇到下述情况时,会生成新的日志文件,文件序号递增:

          1、MySQL服务重启以及mysqldump进行备份时时候

     2、使用flush  logs命令

     3、当binglog文件超过max_binlog_size变量时,最大值和默认值时1G【但是必须得等它自己的事务执行完毕】。

 如何查看mysql binlog中的内容?【如何查看其中内容,以便追踪问题或者恢复数据?】

  答:使用命令mysqlbinlog

# 查看bin-log二进制文件(shell方式)
mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003
# 查看bin-log二进制文件(带查询条件)
mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003 \
    --start-datetime="2019-03-01 00:00:00"  \
    --stop-datetime="2019-03-10 00:00:00"   \
    --start-position="5000"    \
    --stop-position="20000"

       输出内容如下图所示:

 

    总之,你所有的增删改操作都会记录在这个里面。

  那么如何利用上述的mysql binlog来进行数据的恢复?

  案列:如果我向x_letter表中插入了一条数据,delete了一条数据,又插入了一条记录,那么我应该怎么恢复?

  1、查看现在binglog运行的日志,show master status;  效果如下图:

  

 

      2、具体的MySQL的一个binlog恢复,暂时遇不到,先不管了

 

 

  

推荐阅读