Linux命令:MySQL系列之十二--MySQL备份与还原(重要章节)

一、数据备份

备份类型:热备份、温备份和冷备份

热备份:读、写不受影响;

温备份:仅可以执行读操作;

冷备份:离线备份,读、写操作均中止;

备份方式:物理备份和逻辑备份:

物理备份:复制数据文件,速度快,保存数据库的所有数据结构,如果数据跟数据库关联性强,

导致物理备份可移植性能力不强;

逻辑备份:将数据导出至文本文件中,速度慢、丢失浮点数精度;方便使用文本处理工具

直接对其处理,可移植能力强;

备份策略:完全备份、增量备份和差异备份:

完全备份:备份全部数据;

增量备份:仅备份上次完全备份或者增量备份以后变化的数据;

差异备份:仅备份上次完全备份以后变化的数据;

数据库需要备份的内容:数据、配置文件、二进制日志、事务日志

MySQL备份工具:

mysqldump:逻辑备份工具、MyISAM(温备)、InnoDB(热备份)

mysqlhotcopy:物理备份工具、温备份

文件系统工具:

   cp:冷备工具

   lv:逻辑卷的快照功能,几乎热备:

      mysql> FLUSH TABLES; 刷新表

mysql>LOCK tables  锁表

   创建快照:释放锁,而后复制数据

第三方备份工具:

    ibbackup:商业工具

    xtrabackup:开源工具

  、使用mysqldump命令备份

  mysqldump命令将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。

  mysqldump命令的工作原理很简单。它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句。然后,将表中的所有记录转换成一条INSERT语句。然后通过这些语句,就能够创建表并插入数据。

  1、备份一个数据库,备份前需先刷新表,并锁表,否则表修改造成备份的不一致性

  mysqldump基本语法:

  mysqldump -u username -p dbname table1 table2 ...-> BackupName.sql

  其中:

  • dbname参数表示数据库的名称;
  • table1和table2参数表示需要备份的表的名称,为空则整个数据库备份;
  • BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件;

  实例:使用root用户备份test数据库

[[email protected] ~]# mysqldump -uroot -p test > /root/stu.sql #备份test数据库到/root目录下

Enter password:

[[email protected] ~]# ls /root

anaconda-ks.cfg         Music                Public     Templates           stu.sql

  文件的开头会记录MySQL的版本、备份的主机名和数据库名。

  文件中以“--”开头的都是SQL语言的注释,以"/*!40101"等形式开头的是与MySQL有关的注释。40101是MySQL数据库的版本号,如果MySQL的版本比1.11高,则/*!40101和*/之间的内容就被当做SQL命令来执行,如果比4.1.1低就会被当做注释。

  2、备份多个数据库

  语法:

mysqldump -u username -p --databases dbname2 dbname2 > Backup.sql

  加上了--databases选项,然后后面跟多个数据库

mysqldump -u root -p --databases test mysql > D:\backup.sql

  3、备份所有数据库

  mysqldump命令备份所有数据库的语法如下:

mysqldump -u username -p -all-databases > BackupName.sql

  示例:

mysqldump -u -root -p -all-databases > D:\all.sql

  、直接复制整个数据库目录

  MySQL有一种非常简单的备份方法,就是将MySQL中的数据库文件直接复制出来。这是最简单,速度最快的方法。

不过在此之前,要先将服务器停止,这样才可以保证在复制期间数据库的数据不会发生变化。如果在复制数据库的过程中还有数据写入,就会造成数据不一致。这种情况在开发环境可以,但是在生产环境中很难允许备份服务器。

  注意:这种方法不适用于InnoDB存储引擎的表,而对于MyISAM存储引擎的表很方便。同时,还原时MySQL的版本最好相同。

  、使用mysqlhotcopy工具快速备份

  一看名字就知道是热备份。因此,mysqlhotcopy支持不停止MySQL服务器备份。而且,mysqlhotcopy的备份方式比mysqldump快。mysqlhotcopy是一个perl脚本,主要在Linux系统下使用。其使用LOCK TABLES、FLUSH TABLES和cp来进行快速备份。

  原理:先将需要备份的数据库加上一个读锁,然后用FLUSH TABLES将内存中的数据写回到硬盘上的数据库,最后,把需要备份的数据库文件复制到目标目录。

  命令格式如下:

[[email protected] ~]#
  • dbname:数据库名称;
  • backupDir:备份到哪个文件夹下;

  常用选项:

  • --help:查看mysqlhotcopy帮助;
  • --allowold:如果备份目录下存在相同的备份文件,将旧的备份文件加上_old;
  • --keepold:如果备份目录下存在相同的备份文件,不删除旧的备份文件,而是将旧的文件更名;
  • --flushlog:本次辈分之后,将对数据库的更新记录到日志中;
  • --noindices:只备份数据文件,不备份索引文件;
  • --user=用户名:用来指定用户名,可以用-u代替;
  • --password=密码:用来指定密码,可以用-p代替。使用-p时,密码与-p之间没有空格;
  • --port=端口号:用来指定访问端口,可以用-P代替;
  • --socket=socket文件:用来指定socket文件,可以用-S代替;

  mysqlhotcopy并非mysql自带,需要安装Perl的数据库接口包;下载地址为:http://dev.mysql.com/downloads/dbi.html

  目前,该工具也仅仅能够备份MyISAM类型的表。

二、数据还原

  1、还原使用mysqldump命令备份的数据库的语法如下:

  mysql -u root -p [dbname] < backup.sql

  示例:

mysql -u root -p < C:\backup.sql

  2、还原直接复制目录的备份

  通过这种方式还原时,必须保证两个MySQL数据库的版本号是相同的。MyISAM类型的表有效,对于InnoDB类型的表不可用,InnoDB表的表空间不能直接复制。

时间: 2024-10-12 19:52:34

Linux命令:MySQL系列之十二--MySQL备份与还原(重要章节)的相关文章

Linux命令:MySQL系列之十二--MySQL备份与还原(针对单张表SELECT备份)

对于只备份单张表的备份与还原,通过SELECT命令,可以更快速的达到备份和恢复的目的: 以及通过此方法把一个数据库中表的数据,导入至另一数据库的表中去. 备份格式:SELECT * INTO OUTFILE '/PATH/TO/somefile.txt' FROM table_name [WHERE CLAUSE]; #备份table_name表中的[或者备份满足WHERE语句的数据]数据至服务器上保存. 注释:table_name:需要备份的表  WHERE:满足的条件,可选项. /PATH/

Linux命令:MySQL系列之十四--MySQL备份与还原(xtrabackup工具重要章节)

一.percona-xtrabckup安装环境:redhat 6.0数据库:mysql 5.5.28  (编译安装) 1,官网下载并安装(下载地址文章尾部) [[email protected] ~]# rpm -ivh percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm warning: percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID

Linux命令:MySQL系列之十四--MySQL备份与还原(LVM逻辑卷)

通过LVM逻辑卷实现MySQL备份及还原(几乎热备):        前提: 1.数据文件要在逻辑卷上: 2.此逻辑卷所在卷组必须有足够的空间使用快照卷: 3.数据文件和事务日志要在同一个逻辑卷上: 步骤: 1.打开会话,施加读锁,锁定所有表: mysql> FLUSH TABLES WITH READ LOCK;  #刷新表并对表施加读锁 mysql> FLUSH LOGS;   #滚动日志               2.通过另一个终端,保存二进制日志文件及相关位置信息: [[email 

Mysql系列(十二)—— 索引下推优化

索引条件下推(ICP)是对MySQL使用索引从表中检索行的情况的优化.如果没有ICP,存储引擎会遍历索引以查找基表中的行,并将它们返回给MySQL服务器,该服务器会评估WHERE行的条件.启用ICP后,如果WHERE只使用索引中的列来评估部分 条件,MySQL服务器会推送这部分内容.WHERE条件下到存储引擎.然后,存储引擎通过使用索引条目来评估推送的索引条件,并且仅当满足该条件时才从表中读取行.ICP可以减少存储引擎必须访问基表的次数以及MySQL服务器必须访问存储引擎的次数. 指数条件下推优

屌炸天实战 MySQL 系列教程(二) 史上最屌、你不知道的数据库操作

此篇写MySQL中最基础,也是最重要的操作! 第一篇:屌炸天实战 MySQL 系列教程(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:屌炸天实战 MySQL 系列教程(二) 史上最屌.你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网远程连接法 查看\创建\使用\删除\清空\修改 数据库表(是否可空,默认值,主键,自增,外键) 表内容的增删改查 where条件.通配符_%.限制limit.排序desc\asc.连表join.组合union 查

Mysql学习之十二:JDBC连接数据库之DriverManager方法

JDBC连接数据库 ?创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String  className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ Sy

MySql集群讲解(二)Mysql Liunx环境下搭建

MySql集群讲解(二) MySQL Linux环境下搭建 A:下载: wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz B:安装前环境检查: 1.检查Linux是否安装了mariadb数据库,mariadb数据库是mysql的分支,执行命令: yum list installed | grep mariadb rpm -qa | grep mariadb 2.若Lin

quick-cocos2d-x 学习系列之十二 关于websocket

quick-cocos2d-x 学习系列之十二 关于websocket 1.  概念 百度百科:WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可

Kali Linux Web 渗透测试— 第十二课-websploit

Kali Linux Web 渗透测试— 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试— 第十二课-websploit............................................... 1 Websploit 简介........................................................................................... 2 主要功能...........