您的位置:首页 > 数据库 > MySQL

mysql的数据备份和还原 - 如何使用mysqldump和mysqlbinlog

2017-04-06 12:32 711 查看


       最近在学习mysql,在做相关练习中遇到了一些问题,以下是本人对所遇到的问题提出的解决办法,晒出来希望能对大家有所帮助,有不足之处望各位老铁给予斧正~

        数据的备份和还原可以借助mysqldump语句和mysqlbinlog语句,以下主要对这两种方法进行哔哔

~

        我的开发环境:mysql5.7.17

mysqldump:

    mysqldump是mysql用于转存储数据库的实用语句块,可在指定位置生成.sql文件,sql文件里面存放了数据库中各Table的创建语句和插值语句等等,当然有些.sql文件里的语句并不是那么直观,比如通过mysqlbinlog生成的.sql文件,后面会进行讲解~

mysqldump 备份指定数据库:

      mysqldump -u root -pdatabase_name  > E:/filename.sql



        database_name 是你想备份的数据库名称,filename是你保存的.sql文件的文件名(尽量不使用中文,此时选择的是E盘的根目录)

    例如:将数据库testdb备份到 E:/backup.sql

  



  咦?为什么报错?

 原因是  mysqldump 语句是这样用滴:

 exit 出 mysql 在cmd下直接键入mysqldump -u root -p testdb > E:/backup.sql语句,切记,此时末尾不加分号!回车后输入 root  密码(也就是进入mysql的密码),若不提示错误,便说明备份完成!



  

   下面我们来看看备份的sql文件内容是什么样子的:我是用Notepad打开的,sql文件也可以用记事本打开的~



      当我们再调用该sql文件时,mysql便可借助其中的数据库信息将数据库还原进mysql,用法如下:

   

      mysql  -u root -p database_name  < E:/[b]filename.sql[/b]

     同样注意的是该语句在cmd下键入,而非mysql服务中!还有一点是此时的database_name是mysql中已存在的数据库,即该语句不能生成新的数据库!不妨试上一试,我先drop掉数据库testdb:



   不负众望,它报错了~哈哈! 错误是testdb数据库未知,因为之前我们已近drop掉它了!

   下面我将目标数据库改为mysql(mysql服务自带的数据库),嘿嘿,顺利通过~ 

   之后可以在数据库mysql中输入:show tables;便会发现名为chinesetest的表~select * from chinesetest;便会发现表里的信息和之前testdb中的一木一样!神奇的mysql~



常用的mysqldump语句还有

 

 mysqldump -u root -pdatabase_name table1 table2 ...  > E:/filename.sql

  这是选择性的备份database_name数据库中的 table1,table2表...

 mysqldump -u root -p --all-databases >E:/filename.sql

  这是备份所有database,此处要注意语法,--all-databases 为英文输入,“-” 不要忘记加

  网上还有好多关于mysqldump的大神博客,老铁们想深入学习可以去看看哈,有好的文章老铁们可以留言给我啊,共同学习共同进步,

~

mysqlbinlog:

    binlog是二进制日志,简单的理解就是将数据库中的数据以二进制的形式记录下来,默认形式是hostname.00000x(x=1,2,3...)。此外,mysqlbinlog生成的备份文件是动态备份!mysqlbinlog生成备份文件后,我们再对database进行更改,但是此次更改操作由于发生在mysqldump后不会被记录在.sql文件中,这样就很尴尬了。。。但是,binlog日志会将我们对数据的所有操作都记录下来,它就像是一个工作在后台的监视器,以一定的时间间隔查看我们在此段时间内执行的操作,并将之记录下来~

   其实吧,重点是如何开启log_bin,这是最伤的,哎~~

如何开启log_bin?  请见文章:
如何开启log_bin?


利用mysqlbinlog还原数据库:

  在确定log_bin打开后,在mysql下输入  show master status;便可查看当前logbin文件的位置戳:


  wangbo-bin.000006为logbin的文件,wangbo也就是hostname,position值为716,也就是当前操作完成时位置戳指向716

 
那么如何借助position来还原操作呢?

 
假设我们现在向 testdb 数据库下的表chinesetset中插入数据段('游戏','男','2017-4-3'),然后再删除这一段数据,再借助mysqlbinlog恢复到删除之前的状态~

 
插入数据段:

 


   可见插入新的数据段在位置戳2285到2564之间,现在我们删掉('游戏','男','2017-4-3')


 



  用mysqlbinlog恢复到删除数据段之前:

   mysqlbinlog  
--start-position = P1  --stop-position=P2  E:/hostname.00000x >E:/filename.sql

 

     mysql -u root -pdatabase_name <E:/filename.sql

  P1,P2E:/hostname.00000x中位置戳的开始点和结束点,该语句就是将P1P2之间的操作转存为
E:/filename.sql
,注意此时要指明logbin的文件路径。实践走一波:

  


  最后要说的是,mysqlbinlog还有有很多用法,比如
:利用时间戳,利用xid等,敬请期待~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息