设为首页 收藏本站
查看: 498|回复: 0

[经验分享] 使用mysqldump对数据库备份

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-11 17:23:03 | 显示全部楼层 |阅读模式
mysqldump是一个简单而有效的数据库备份程序,它会将需要备份的数据库的结构转换为mysql语言组成的一个文本文件,这个文本文件包含了创建这个数据库所进行的所有mysql语句,所以当我们恢复时,便是程序读取这些语句重新创建数据库、创建表以及插入数据的过程,但因为其是单线程的,所以对于比较大的数据库操作会比较慢。mysqldump支持InnoDB热备,MyISAM的温备,可以基于二进制日志进行增量备份,根据二进制文件文件中记录的操作点进行有选择的恢复。

mysqldump命令介绍
语法:
        mysqldump [OPTIONS] database [tables]:备份单个库,或库指定的一个或多个表
        mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]:备份一个或多个库
        mysqldump [OPTIONS] –all-databases [OPTIONS]:备份所有库
其他选项:
        -x, –lock-all-tables:锁定所有表
         -l, –lock-tables:锁定备份的表,这两个选项可用于MyISAM和InnoDB的温备
        –single-transaction:启动一个大的单一事务实现备份,实现对InnoDB的热备

        –flush-logs:备份前,请求到锁之后滚动日志,可用于实现备份后二进制日志写入到新的日志文件,便于进行二进制日志备份时寻找恢复点

        –master-data=[0|1|2]:用于确定是否在备份文件中添加CHANGE MASTER语句,0:不记录;1:记录为CHANGE MASTER语句;2:记录为注释的CHANGE MASTER语句;CHANGE MASTER语句记录了备份的操作记录处于哪个日志文件的哪个位置上,加上此选项备份时将打开–lock-all-tables选项,备份完成会自动关闭–lock-all-tables选项。
mysqldump备份以及恢复步骤
请求锁:可使用–lock-all-tables,如果使用了–master-data=1|2,则不须指定此项,如果为InnoDB则使用–single-transaction选项实现热备
滚动日志:可使用选项–flush-logs
实验过程:
修改mariadb的配置文件,将日志文件单独存放在日志目录
wpid-655c6724bb017899ca2d3b691027646c_28163140.jpg
创建所需要的目录
mkdir /mydata/binlog[iyunv@node1 ]# chown -R mysql.mysql /mydata/mkdir /backup导入实验用数据库
[iyunv@node1 ~]# mysql  < /tem/hellodb.sql
wpid-655c6724bb017899ca2d3b691027646c_817eb964-5409-4a19-a290-c90a17a1f287.jpg

MariaDB [(none)]> USE hellodb;Database changedMariaDB [hellodb]> SHOW TABLES;+-------------------+| Tables_in_hellodb |+-------------------+| classes           || coc               || courses           || scores            || students          || teachers          || toc               |+-------------------+7 rows in set (0.00 sec)备份数据库
[iyunv@node1 ~]# mysqldump --database hellodb --flush-logs --master-data=2 > /backup/backup1.sql备份完之后我们在对数据进行操作
  • MariaDB [hellodb]> CREATE TABLE city (id int auto_increment not null primary key,code varchar(30));
  • Query OK, 0 rows affected (0.21 sec)

  • MariaDB [hellodb]> SHOW TABLES;
  • +-------------------+
  • | Tables_in_hellodb |
  • +-------------------+
  • | city              |
  • | classes           |
  • | coc               |
  • | courses           |
  • | scores            |
  • | students          |
  • | teachers          |
  • | toc               |
  • +-------------------+
  • 8 rows in set (0.01 sec)

新的表已经添加到数据库中,我们模拟删除hellodb数据库
  • MariaDB [hellodb]> DROP DATABASE hellodb;
  • Query OK, 8 rows affected (0.20 sec)

  • MariaDB [(none)]> SHOW DATABASES;
  • +--------------------+
  • | Database           |
  • +--------------------+
  • | information_schema |
  • | mysql              |
  • | performance_schema |
  • | test               |
  • +--------------------+
  • 4 rows in set (0.01 sec)

        如果现在就恢复我们备份的文件是不能恢复备份之后进行的操作的,所以现在我们需要二进制文件里进行定点恢复,为了确定恢复点,首先导出全部的二进制文件,这里所使用的二进制文件是在我们备份之后产生的,因为我们备份是使用的–flush-logs,所以日志文件在备份之后重新生成了一个
[iyunv@node1 binlog]# mysqlbinlog mysql-bin.000003 > /backup/bin3.sql[iyunv@node1 binlog]# vim /backup/bin3.sql wpid-655c6724bb017899ca2d3b691027646c_a42b5724-c0f6-4a04-95c8-e3ec898dfdd2.jpg
由此可以看出我们删除数据库是在586这个点,所以我们就可以以586作为导出二进制文件的停止点
[iyunv@node1 binlog]# mysqlbinlog --stop-position=586 /mydata/binlog/mysql-bin.000003 > /backup/bin586.sql现在我们开始恢复数据库
[iyunv@node1 ~]# mysql < /backup/backup1.sql查看数据库
MariaDB [(none)]> USE hellodb;Database changedMariaDB [hellodb]> SHOW TABLES;+-------------------+| Tables_in_hellodb |+-------------------+| classes           || coc               || courses           || scores            || students          || teachers          || toc               |+-------------------+7 rows in set (0.01 sec)此时并没有我们创建的city表
下面就可以使用二进制文件进行恢复操作了
[iyunv@node1 ~]# mysql < /backup/bin586.sql再来看一下,表city已经回来了
  • MariaDB [(none)]> USE hellodb;
  • Database changed
  • MariaDB [hellodb]> SHOW DATABASES;
  • +--------------------+
  • | Database           |
  • +--------------------+
  • | hellodb            |
  • | information_schema |
  • | mysql              |
  • | performance_schema |
  • | test               |
  • +--------------------+
  • 5 rows in set (0.00 sec)

  • MariaDB [hellodb]> SHOW TABLES;
  • +-------------------+
  • | Tables_in_hellodb |
  • +-------------------+
  • | city              |
  • | classes           |
  • | coc               |
  • | courses           |
  • | scores            |
  • | students          |
  • | teachers          |
  • | toc               |
  • +-------------------+
  • 8 rows in set (0.01 sec)

这样我们就完成了一次数据误删除并根据备份以及二进制文件恢复的过程,从这里可以看出二进制文件是很重要的,所以需要将二进制文件单独放在一个存储的地方,尽量不要和数据库放在一个磁盘中,当然备份的数据也要专门存放,这样数据库出现意外或者数据库磁盘损坏,就可以通过备份和二进制文件恢复了。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-42385-1-1.html 上篇帖子: mysql双主复制模型 下篇帖子: xtrabackup 备份恢复测试过程 数据库备份
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表