36、备份与恢复
根据备份的方法:
Hot Backup热备
Cold Backup冷备
Warm Backup温备
根据备份后的文件内容:
逻辑备份:备份后的文件内容是可读的,通常是文本文件,内容一般是SQL语句,或者表内实际的数据,如mysqldump和select … into outfile的方法。好处是可以看到导出的内容,一般适合于的升级、迁移等工作,但是恢复所需要的时间比较长。
裸文件备份:指拷贝数据库的物理文件,数据库既可以处于运行状态,也可以处于停止状态。恢复的时间短的多。

根据备份数据库的内容:
完全备份
增量备份
日志备份

(1)冷备
只需要备份MySQL数据库的frm文件、共享表空间文件、独立表空间文件(*.idb)、重做日志问,建议也备份my.cnf文件。

(2)逻辑备份
1.1 mysqldump
如果想要备份所有的数据库,可以使用—all-databases选项:
mysqldump -uroot -pzhangyun --all-databases > dump.sql

如果想要备份指定的数据库:
mysqldump -uroot -pzhangyun --databases xmppdb > dump.sql

如果想要对test这个架构进行备份:
mysqldump -uroot -pzhangyun --single-transaction test > dump.sql
注:--single-transaction保证备份的一致性

下面介绍几个比较重要的选项:

i2ksvr6/home/mysql> mysqldump -uroot -pzhangyun --add-drop-database--tab="/home/mysql/test" xmppdb

i2ksvr6/home/mysql> cd test/

i2ksvr6mysql/test> ls

short_news.sql         tig_deleted_index.txt  tig_groups.sql      tig_pairs_key.txt  tig_users.sql

short_news.txt         tig_gpfeature.sql      tig_groups.txt      tig_pairs.sql      tig_users.txt

tig_blacklist.sql      tig_gpfeature.txt      tig_nodes.sql       tig_pairs.txt      xmpp_stanza.sql

tig_blacklist.txt      tig_gpmember.sql       tig_nodes.txt       tig_sysmsg.sql     xmpp_stanza.txt

tig_dbofuser.sql       tig_gpmember.txt       tig_offlinemsg.sql  tig_sysmsg.txt

tig_dbofuser.txt       tig_gpprivilege.sql    tig_offlinemsg.txt  tig_user_cfg.sql

tig_deleted_index.sql  tig_gpprivilege.txt    tig_pairs_key.sql   tig_user_cfg.txt

i2ksvr6 mysql/test>

大多数DBA喜欢用select …into outfile的方式来导出一张表,但是mysqldump一样可以完成工作,而且可以一次完成多张表的导出,并且保证导出数据的一致性。

--where=’where_condition’(-w ‘where_condition’):导出给定条件的数据。

比如下面导出数据库xmppdb中表tig_users中rcs_uid为1000000002的数据。

mysqldump -uroot -pzhangyun --single-transaction--where='rcs_uid=1000000002' xmppdb tig_users > tig_users_bak.sql

 

i2ksvr6 mysql/test> cat tig_users_bak.sql

……………..

--

-- Dumping datafor table `tig_users`

--

-- WHERE:  rcs_uid=1000000002

LOCK TABLES`tig_users` WRITE;

/*!40000 ALTERTABLE `tig_users` DISABLE KEYS */;

INSERT INTO`tig_users` VALUES ('1000000002','admin@rcs.com',NULL,'2011-09-1505:59:13','0000-00-00 00:00:00','0000-00-0000:00:00',0,0,1,'2','+2','0000-00-00 00:00:00','false','false');

/*!40000 ALTERTABLE `tig_users` ENABLE KEYS */;

UNLOCK TABLES;

………………………..

1.1     select… into outfile

select… into 语句也是一种逻辑备份的方法,或者更准确地说是导出一张表中的数据。

mysql> select * into outfile'/home/mysql/hello.sql' from tig_users;

Query OK, 3 rows affected (0.00 sec)

默认导出的文件是以tab键分隔的:

i2ksvr6 /home/mysql> cat hello.sql

1000000002    admin@rcs.com     \N    2011-09-1513:59:13     0000-00-00 00:00:00     0000-00-00 00:00:00     0     0     1       2+2 0000-00-00 00:00:00     false        false

1000000001    db-properties  \N    2011-09-1513:59:12     0000-00-00 00:00:00     0000-00-00 00:00:00     0     0     -1    1+1   0000-00-00 00:00:00     false        false

1000000003    vhost-manager \N    2011-09-2116:06:54     0000-00-00 00:00:00     0000-00-00 00:00:00     0     0     -1    3+3   0000-00-00 00:00:00     false        false

如果想用其他的分隔符,使用fieldsterminated by ‘string’选项。

mysql> select * into outfile'/home/mysql/helloworld.sql' fields terminated by ',' from tig_users;

Query OK, 3 rows affected (0.00 sec)

或者执行:

i2ksvr6 /home/mysql> mysql -u root -pzhangyunxmppdb -e "select * into outfile'/home/mysql/helloworld.sql' fields terminated by ',' from tig_users;"

若文件存在,则会报错。

mysql> select * into outfile'/home/mysql/hello.sql' from tig_users;

ERROR 1086 (HY000): File'/home/mysql/hello.sql' already exists

导出的文件的路径的权限必须是mysql:mysql,否则MySQL会报告没有权限。

mysql> select * into outfile'/root/hello.sql' from tig_users;

ERROR 1 (HY000): Can't create/write to file'/root/hello.sql' (Errcode: 13)

1.2     逻辑备份的恢复

i2ksvr6 /home/mysql> mysqldump -u root-pzhangyun --database mysql > mysql.dump

i2ksvr6 /home/mysql> mysql -u root -pzhangyun< mysql.dump

或者

mysql> source /home/mysql/mysql.dump;

通过mysqldump可以恢复数据库,但是常发生的一个问题是mysqldump可以导出存储过程,触发器,事件,数据,但是却不能导出视图。需要用mysqldump后再导出视图的定义,或者保存视图定义的frm文件,并在恢复时进行导入,确保完全恢复。

1.3     Load data infile

如是通过mysqldump –tab或select into outfile 导出的数据需要恢复时,这时需要通过 load data infile命令来进行导入。

i2ksvr6 /home/mysql> cat helloworld.txt

1000000002,admin@rcs.com,\N,2011-09-1513:59:13,0000-00-00 00:00:00,0000-00-00 00:00:00,0,0,1,2,+2,0000-00-0000:00:00,false,false

1000000001,db-properties,\N,2011-09-1513:59:12,0000-00-00 00:00:00,0000-00-00 00:00:00,0,0,-1,1,+1,0000-00-0000:00:00,false,false

1000000003,vhost-manager,\N,2011-09-2116:06:54,0000-00-00 00:00:00,0000-00-00 00:00:00,0,0,-1,3,+3,0000-00-0000:00:00,false,false

mysql> load data infile'/home/mysql/helloworld.txt' into table tig_users;

为了加快InnoDB存储引擎的导入,你可能希望导入过程忽略对外键的检查,因此可以使用如下的方式:

mysql> set @@foreign_key_checks=0;

mysql> load data infile '/home/mysql/helloworld.txt' intotable tig_users;

mysql> set @@foreign_key_checks=1;

另外也可以针对指定的列进行导入,如将数据导入列a、b,而c列等于a、b列之和:

i2ksvr6 /home/mysql> cat helloworld.txt

1 2 3

4 5 6

mysql> create table b (

->a int ,

->b int,

->c int,

->primary key(a))

->engine=innodb;

Query OK, 0 rows affected (0.09 sec)

mysql>

mysql> load data infile'/home/mysql/helloworld.txt' into table b fields terminated by ' ' (a,b) set c= a + b;

Query OK, 2 rows affected, 2 warnings (0.00sec)

Records: 2 Deleted: 0  Skipped: 0  Warnings: 2

mysql> select * from b;

+---+------+------+

| a | b   | c    |

+---+------+------+

| 1 |   2 |    3 |

| 4 |   5 |    9 |

+---+------+------+

2 rows in set (0.00 sec)

1.4     mysqlimport

从本质上来说,是loaddata infile的命令接口,而且大多数的选项都和load data infile语法相同。

可以导入几张表

bmsuite /home/mysql> mysqlimport -uroot-pzhangyun --use-thread=2 xmppdb /home/mysql/tig_users.txt/home/mysql/tig_users.txt

查看上面命令运行过程中查看MySQL的数据库线程列表,会看到mysqlimport实际上是同时执行了2条load data infile语句来完成并发导入操作。

mysql> mysql> show full processlist;

37、二进制日志备份与恢复

二进制日志非常重要,可以完成point-in-time的恢复工作。

默认情况下并不启动二进制日志,要使用二进制日志,首先必须启动它:

[mysqld]

port=5306

socket          = /tmp/mysql.sock

log-error = ../log/error/mysqlerr

log-bin=../binlog/mysqlbinlog

log-bin-index = ../binlog/mysqlbinlog.index

注:InnoDB存储引擎简单地启动二进制日志是不够的,还需要启动一些其他的参数来保证安全和正确记录二进制日志,如下:

sync_binlog = 1

innodb_support_xa = 1

备份二进制日志前,可以通过Flushlogs命令来生成一个新的二进制日志文件,然后备份之前的二进制日志。

恢复二进制日志:

bmsuite /home/mysql> mysqlbinlogbinlog/mysqlbinlog.000003 | mysql -u root –pzhangyun

恢复多个二进制日志文件,最正确的做法是同时恢复多个二进制日志文件,而不是一个一个恢复:

bmsuite /home/mysql> mysqlbinlogbinlog/mysqlbinlog.[0-10]* | mysql -u root –pzhangyun

也可以先通过mysqlbinlog命令导出到一个文件,然后再通过source命令导入。这样做的好处是,可以对导出的文件进行修改后再导入,

bmsuite mysql/binlog> mysqlbinlogmysqlbinlog.000001 > /tmp/statements.sql

bmsuite mysql/binlog> mysqlbinlogmysqlbinlog.000002 >> /tmp/statements.sql

bmsuite mysql/binlog> mysql -u root -pzhangyun-e "source /tmp/statements.sql"

38、热备

(1)ibbackup

(2)xtrabackup

略,这里不做这方面笔记了,如果你感兴趣,可以查看相关的资料。

39、快照备份

bmsuitea:~ # lvcreate --size 5G --snapshot--permission r -n datasnapshot /dev/vgdata/lvdata

/dev/sdb: read failed after 0 of 4096 at 0: Input/output error

/dev/sdc: read failed after 0 of 4096 at 0: Input/output error

/dev/sdd: read failed after 0 of 4096 at 0: Input/output error

Logical volume "datasnapshot" created

bmsuitea:~ # lvdisplay

---Logical volume ---

LVName                /dev/vgdata/lvdata

VGName                vgdata

LVUUID               SL9Fz7-ve28-ZBOd-K4ND-WMuf-1ix6-pGSUh7

LVWrite Access        read/write

LV snapshot status     source of

/dev/vgdata/datasnapshot[active]

LVStatus              available

#open                 1

LVSize                5.00 GB

Current LE             1280

Segments               1

Allocation             inherit

Read ahead sectors     auto

-currently set to     1024

Block device           253:0

---Logical volume ---

LVName               /dev/vgdata/datasnapshot

VGName                vgdata

LVUUID               fp2RCn-Gm3y-7n0H-I1Rd-F8Vd-7qst-y7B00P

LV Write Access        read only

LVsnapshot status     active destinationfor /dev/vgdata/lvdata

LVStatus              available

#open                 0

LVSize                5.00 GB

Current LE             1280

COW-table size         5.00 GB

COW-table LE           1280

Allocated to snapshot  0.00%

Snapshot chunk size    4.00 KB

Segments               1

Allocation             inherit

Read ahead sectors     auto

-currently set to     1024

Block device           253:3

bmsuitea:~ # ls -al /dev/vgdata/lvdata

lrwxrwxrwx 1 root root 25 Sep 14 11:24/dev/vgdata/lvdata -> /dev/mapper/vgdata-lvdata

bmsuitea:~ # ls -al/dev/vgdata/datasnapshot

lrwxrwxrwx 1 root root 31 Sep 14 11:24/dev/vgdata/datasnapshot -> /dev/mapper/vgdata-datasnapshot

bmsuitea:~ # ls -al /dev/mapper/vgdata-datasnapshot

brw-r----- 1 root disk 253, 3 Sep 14 11:24/dev/mapper/vgdata-datasnapshot

注:Allocated to snapshot 0.00%

只有当源数据卷的数据被不断修改时,这个数据库才会放入到快照空间,这时空间快照才会慢慢变大。

MySQL学习笔记第8课(共10课)相关推荐

  1. MySQL学习笔记-基础篇1

    MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...

  2. 献给入门小白的MySQL学习笔记+案例

    MySQL学习笔记 目录 MySQL学习笔记 1.SQL概述 1.1:数据库的好处 1.2:数据库管理系统 1.3:SQL语言概述 1.4:SQL语言的分类 2.安装与使用 2.1:MySql数据库产 ...

  3. 【Unity学习笔记】b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别)

    [Unity学习笔记]b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别) 自己跟着学完了,写了不少代码,会放在CSDN代码库,因为老师并没有提供源码,录屏也不是完全连续,所以难 ...

  4. Mysql学习笔记(二)——表格及数据的插入

    Mysql学习笔记(二)--表格及数据的插入 文章目录 Mysql学习笔记(二)--表格及数据的插入 1.Mysql常用指令 2.创建表格 A.数据类型 B.完整性约束条件 3.查看表格 4.修改表格 ...

  5. Mysql学习笔记--多表之间约束等详细记录

    sql 进阶学习笔记-多表(二) 笔记(一)内容回顾 Mysql学习笔记(基础)基础sql语句详细记录 ​ 数据库的创建 : create database 数据库的名 character set 字 ...

  6. MySQL学习笔记-基础篇2

    MySQL学习笔记-基础篇2 目录 MySQL学习笔记-基础篇2 8.子查询 8.1 需求分析与问题解决 8.1.1 实际问题 8.1.2 子查询的基本使用 8.1.3 子查询的分类 8.2 单行子查 ...

  7. MySQL学习笔记_上(select查询)

      上次整理了一些练习发到博客上了,也说要发基础的,整理了一下午才算是把查询那块的勉强整理完,下次再整理其他的,另外还在写设计模式和数据结构的草稿,写的差不多会慢慢发的,这两项算是副线发展,主线还是按 ...

  8. Mysql学习笔记(基础)基础sql语句详细记录

    数据库学习(基础) // 个人网课学习记录,如果有违规等问题,请联系我删除~ mysql下载安装( 解压版安装配置 下载版安装配置 ) 需求分析:使用cmd命令来创建一个数据库,并对数据库中得一张分类 ...

  9. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作 #创建 #数据库的创建 USE mysql; CREATE DATABASE db_x; #删除 #删除数据库 DROP DA ...

  10. MySQL学习笔记07【事务、用户管理和权限管理】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

最新文章

  1. python -scikit
  2. XGBoost与LightGBM原理及应用
  3. python策略模式_设计模式(python实现):策略模式
  4. Oracle 11g Release 1 (11.1)——简单管理聚簇
  5. Samba服务器的安装配置【十全十美】
  6. 汉语语法分析的重点是_语法特定句式 |现代汉语专题研讨(15)
  7. UE4之脚本导入fbx
  8. 关于codeMirror插件使用的一个坑
  9. 结构方程模型_结构方程模型(Structural Equation Model, SEM) 三下
  10. ecshop添加404页面
  11. python的if判断语句_Python之if条件判断语句
  12. 缓冲器(跟随器)电路
  13. Excel 合并当前工作簿全部工作表的VBA代码
  14. python求15 17 23 65 97的因数_python练习题-答案
  15. Desktops 虚拟桌面软件(推荐)
  16. 还原扩容的缩水U盘真实容量方法,让数据免受损失
  17. python解析word文档首、尾页
  18. 那些年面挂的js手写题
  19. 如何关闭百度网盘超级会员自动续费服务?
  20. 带隙基准及LDO电路

热门文章

  1. 《德语助手》 权威的德汉词典2013版 彻底汇编 除时间限制 破解日志:
  2. MICRO SIM卡(SIM小卡)尺寸图及剪卡图解
  3. [Linux]关于Transmission下载服务器的搭建与配置
  4. Neuralog.v2013.06 1CD (测井曲线智能矢量化软件)
  5. 计算机毕业设计Java大学生科技创新项目管理系统(源码+系统+mysql数据库+lw文档)
  6. 软考系统集成项目管理工程师真题
  7. SAP接口编程之 JCo3.0 系列(03) : 表参数
  8. Hive教程(01)- 初识Hive
  9. Excel常用快捷键大全
  10. Linux下好用的类似QQ截图工具