MySQL备份,恢复方案,mysqlbinlog,mysqldump,主从,主主复制

DBMS数据库管理系统的三层模型:物理层,逻辑层以及视图层。

物理层:决定数据的存储形式。

逻辑层:是一张有一张的表,一行行的数据记录。

视图层:让用户看起来更方便,可有可无。

存储引擎:使逻辑层中sql语句转换成能在磁盘上存储的物理形式,连接逻辑层与物理层。

常用MySQL存储引擎:

MyISAM:

最经典的MySQL存储引擎,但如果数据库一旦崩溃,再重启时需要对表进行修复,但MyISAM

存储引擎无法保证安全修复,且其不支持事务的进行。支持表级锁。

Innodb:

Innodb存储引擎,支持事务,数据库的存储,是以表空间的方式存储,支持MVCC的高并发,

支持四种隔离级别,read-uncommitted读未提交,read-committed读提交,repeatable-read幻读

serializable串行化。支持行级锁,间隙锁。

Aria:

Aria存储引擎数据库一旦崩溃,能够对数据库安全修复增强版MyISAM存储引擎。

Memory:

内存级存储引擎,支持自适应hash索引,查询能力十分强大。

MRG_MyISAM:

将多张表逻辑层连接在一起,使用户就像使用一张表一样。

PERFORMANCE_SCHEMA:

展示数据库运行时的状态参数和统计数据。

CSV:

基于文件的文件存储数据存储引擎。

ARCHIVE:

归档存储引擎,通常用于做数据仓库。

MySQL的日志:

①查询日志:

general_log {ON|OFF} :查询日志是否开启关闭。

general_log_file hostname.log :该变量的生效,需要在log_output为FILE时才能生效。

log_output  FILE:

FILE:表示将日志记录于文件系统中的文件;

TABLE:表示将日志记录于MySQL中指定的表;

NONE:表示不将日志记录输出出去;

②慢查询日志:

运行时间超过某指定时长的操作。

定义查询超时时长的变量:

long_query_time   10.000000

慢查询日志是否开启:

log_slow_queries    OFF

slow_query_log_file hostname.log :该变量的生效,需要在log_output为FILE时才能生效。

log_output  FILE:

FILE:表示将日志记录于文件系统中的文件;

TABLE:表示将日志记录于MySQL中指定的表;

NONE:表示不将日志记录输出出去;

③错误日志

log_error:保存了错误日志的文件路径;

log_warnings  {ON|OFF}:是否将mysqld运行过程中产生的"Warning"类的信息一并记录到错误日志中;

④二进制日志

用于记录引起数据库改变的SQL语句,可以通过备份二进制日志中的指定内容来达到数据库备份,还原的目的

这一部分操作,在后边有示例。

需要在/etc/my.cny配置文件中设置log_bin路径。

mysql>show master|binary logs:显示当前数据库中所有二进制日志列表。

mysql>show master status:显示当前数据库中正在使用的数据库列表,可以对指定日志的position,datetime进行备份还原。

mysql>show binlog events in '日志path':显示对应二进制日志文件的内容。

数据库备份方式:

数据库备份作为一种重要的数据保存手段,需要根据不同环境采取不同的备份操作,最大限度保证数据的安全,毕竟数据

才是一个企业生存的根本

①LVM实现MYSQL物理备份,恢复

首先,在主机中加入一块硬盘充当MYSQL的数据存放的逻辑卷,以及备份数据的存储源

#fdisk /dev/sdb

因实验需要,所以只配置了一个扩展分区,及一个逻辑分区,将逻辑分区类型更改为8e即可;

创建逻辑卷:

#pvcreate /dev/sdb5

#vgcreate myvg /dev/sdb5

#lvcreate -L 5G -n mylv myvg

对逻辑卷进行格式化:

#mke2fs -t ext4 /dev/myvg/mylv

创建数据库存放的路径

#mkdir -pv  /mysql/data

修改数据库配置文件/etc/my.cnf

并在当前启动mysql用户家目录下创建.my.cnf文件,否则无法正常启动mysql

到这里mysql服务就会在我们指定的逻辑卷中运行,lvm的备份方式主要是温备份,但

也可以说是几乎热备份,只要对数据库加锁,解锁的过程够快,一般几秒钟即可,就

不会引起数据的错乱;

对所有表进行加锁操作:

MariaDB [hellodb]> flush tables with read lock;

紧接着拍摄快照,针对于该逻辑卷:

[[email protected] ~]# lvcreate -L 5G -s -n snap /dev/myvg/mylv

再对数据库中的表进行解锁操作:

MariaDB [hellodb]> unlock tables;

对二进制日志进行备份操作,备份当前运行的位置

mysql -e "show master status" > /path

(这样在需要还原数据时可以得知在备份那个时间段后我们执行了哪些操作,从二进制日志文件可以看出,从而进行还原)

速度够快的话就不会产生多大的数据损失,紧接着将快照卷挂载到指定目录下,对数据进行打包压缩,卸载快照卷即可将数据库备份;

②select语句进行逻辑备份

创建一个同classes表中数据结构一样的表;

使用select将数据保存在文件中,并导入到test表当中对数据库进行备份

③使用mysqldump对数据库进行备份

mysqldump -uroot -p password 数据库名 --lock-tables --flush-logs --master-data=2 > /path.sql

使用上述方式对指定数据库中的所有表进行加锁,--flush-logs对二进制日志文件仅刷新一次,而不是重复刷新

--master-data将二机制日志文件名和其所用到的时间的位置标识,追加到备份文件中,1为不注释,2为注释;

保存在/path.sql路径下后,只需要进入指定备份的数据库,并使用source /path.sql即可还原备份数据;

注意:上述方式需要事先创建同名数据库,然后进入该数据库执行source操作;

可使用另一种musqldump格式,可将数据库的数据格式也备份下来,这样就无需创建数据库进行还原

如:

mysqldump -uroot -p password --database 数据库名 --lock-tables --flush-logs --master-data=2 > /path.sql

对二进制日志进行备份操作,备份当前运行的位置

mysql -e "show master status" > /path

(这样在需要还原数据时可以得知在备份那个时间段后我们执行了哪些操作,从二进制日志文件可以看出,从而进行还原)

④percona xtrabackup实现数据库备份

xtrabackup是一款由percona提供的世界上唯一一款开源实现innodb数据库热备份的工具

其备份过程快速可靠,不会打断正在执行的事务,还原速度快,能够实现自动检验;

MYISAM完全备份

MYISAM因为不不支持事务,所以只能实现温备份,即在只读不可写的状况下的数据库备份,无法进行增量备份

只能进行完全备份

热备份:可读可写;

温备份:只读不可写;

冷备份:不可读不可写;

安装xtrabackup,在阿里云中的epel源中

#yum install -y percona xtrabackup

使用innobackupex进行备份

--user:指定备份数据库所用的用户;

--password:备份数据库用户所用的密码;

--host:备份数据库所在的主机;

--socket:指定备份数据库所用的socket路径;

如:

因为之前有更改过数据库文件的默认路径,所以需要指定socket

最后的路径为完全备份存储的路径,innobackex命令如果不特别指定格式的话,会以日期的形式将完全备份

存储在该目录下

#mkdir -pv /mysql/backup2

#chown mysql:mysql /mysql/backup2

进行还原准备操作,因为数据库在进行还原时,需要考虑在备份数据库时是否有事务在进行却尚未提交,是否有事务

已经提交,但尚未同步到数据库当中,我们需要针对这类型的数据进行一致化操作,"准备"的主要作用正是通过回滚

未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

备份存储好之后,将数据全部删除,验证备份数据

使用--copy-back选项即可,不管是完全备份,还是完全备份+增量备份的还原都是该选项进行

注意:备份还原操作,需要在原数据库文件全部删除,mysqld进程不在运行的条件下执行

且备份后的数据库文件权限均为root,需要更改为mysql

启动服务,数据库完好无损。

INNODB完全备份+增量备份

Innodb存储引擎支持事务,其可支持温备份以及热备份;这也是innobackupex的一大特点;

增量备份是基于上一次备份后产生的数据差别进行的备份;

首先将数据库进行几次修改,并逐一进行完全备份,增量备份操作

首次完全备份

增量备份:

准备操作:

--redo-only:在最后一次增量备份时不使用

准备结束后就可执行还原操作,删除原数据库内容,关闭数据库服务

采用增量备份的方式,分两次添加了ClassID9,10数据

MySQL主从复制:

在MySQL中,支持单项,异步复制,而主从复制,则是由至少两台MySQL服务器实现,由一台MySQL

作为主服务器,进行写入操作,而由另一台MySQL服务器作为从服务器进行读操作,主数据库中的数据

会自动备份到从服务器,可以进行读写分离操作,以增强数据库的读写性能。而两台服务器之间使用不同

的硬盘,当主服务器的硬盘损坏时,从服务器的数据就保留下来,进行数据恢复。

主从服务器搭建的原理是,从服务器开启数据库线程sql_thread,io_thread并在/etc/my.cnf中构建中继

日志,用于存放从主服务器复制过来的数据,io_thread线程是向主服务器之间搭建数据复制的桥梁,当主

服务器中数据库的数据改变时,会写入二进制日志当中,由io_thread读取,并复制,需要由主服务器指定

执行复制操作的数据库用户,并授权,在从服务器配置相关master,指定主服务器IP,复制数据库用户的

账号,密码,由哪一个二进制日志文件开始复制,从该二进制文件当中的哪个位置开始复制等。当io_thread

取回复制的数据库内容后,就存放在从服务器的中继日志当中,由sql_thread线程将中继日志中的数据写入

到执行存储引擎,备份成功!

主服务器配置:IP,172.16.25.101

配置二进制文件,设置server_id

对用户进行授权,设置用户复制权限

主从复制需要将主服务器中的数据库完全备份到从服务器,否则会报错,无法进行主从复制

主服务器:

从服务器:

从服务器配置:

配置 relay_log中继日志,server_id在/etc/my.cnf中

配置从服务器中的master指向

master_host:主服务器IP.

master_user:主服务器上进行复制的数据库用户。

master_password:主服务器上进行复制的数据库用户密码。

master_log_file:从主服务器上的哪个二进制日志文件开始复制。这里我选定的是最后一个二进制日志。

master_log_pos:从主服务器上的指定二进制日志文件的哪个位置开始复制。

这个时候可以使用show slave status\G查看

两个线程均没有开启,现在开启线程则主从复制启用

在主服务器数据库中插入一条数据,在查看从哪个服务器看是否进行了复制操作

主服务器:

从服务器:

查看数据是否复制:

MySQL主从复制之半同步:

半同步复制,在对主从复制的基础上进行延伸,如主从复制时,主服务器在向从服务器传输数据时,从服务器

突然宕机,则数据的传输会有两种情况,

1.事务还未发送到从服务器上。

2.事务已发到从服务器上,但客户端会接受到事务传送失败的消息,重新发送事务。

所以针对于以上情况,MySQL数据库推出了全新的半同步机制,在从服务器宕机后,会有一段延迟时间让主服

务器去联系从服务器,若没有联系上就写入主服务器自身,待从服务器联系上了再写入从服务器,这种异步加同

步的操作就称之为半同步。

半同步需要对主从服务器加载特殊的插件,插件保存在/usr/lib64/mysql/plugin中

主服务器/etc/my.cnf

从服务器/etc/my.cnf

半同步复制则需要semisync_master.so,semisync_slave.so两种插件,分别加载到主从服务器

主:

从:

将主从服务器的同步机制开启:

将从服务器进行授权,指定master

在从服务器上设置只读,read_only开启,并开启另一个MySQL会话并执行

mysql>flush tables with read lock;

只要该会话不关闭则读锁一直存在。

如何查看半同步是否成功:

rpl_semi_sync_master_clients为1

看nakahcehur在主服务器处进行写操作查看是否同步到从服务器上

从服务器:

当关闭从服务器线程时

主服务器再次写入数据,延迟十秒

这是因为主服务器上的同步延迟设置为十秒,当十秒内无法联系上从服务器,就写入自身,如:

timeout设置为10000毫秒,即为10s

MySQL主主复制:

主主复制,至少两台的数据库服务器 ,都作为主服务器,每一台服务器既是主服务器,也是对面主服务器

的从服务器,实现原理同上,不同的是每一台服务器都需要有中继日志和二进制日志,因为每一台服务器都

作为主服务器以及从服务器。主主复制相较于主从复制来说,多了一个mysql入口,相当于mysql的高可用

但却需要考虑ID增长的问题。

主主复制相对于主从复制,需要注意的是

1.数据不一致,比如,一台服务器在进行更新操作,将35岁包括以上人的工资上调3000元,当数据库复制

到另一台服务器,数据进行重写,写入到这台服务器时,如果这台服务器执行了给每一个员工增加1岁时

这样刚巧有些人从34岁到了35岁的年龄的话,该数据就会不一致。目前只能使用一些数据恢复软件来进

行排错.

2.主键,当两台服务器同时都插入数据时,一些自动增长的如ID的属性可能会重合,这样会导致冲突,数

据插入删除修改也将会失败。所以需要设置auto_incremental_incremental以及auto_incremental_offset

用于设置每次自动增长的量,以及初次增长的基数。一般设置为奇数偶数相对应,这样就不会重合。

主主服务器配置:

主服务器1:IP 172.16.25.101

/etc/my.cnf

设置为奇数增长,针对于那些auto_increment的字段

授权,指定master为172.16.25.102

主服务器2:IP 172.16.25.102

/etc/my.cnf

授权,指定master为172.16.25.101

分别为两台服务器开启线程

mysql>start slave;

分别从两台服务器进行读写操作:

主服务器1插入一条数据到classes中

因为设置的是奇数增长所以由11增长到13

到主服务器2进行查看,并插入一条数据:

由图可知复制成功,再在主服务器2中插入一条数据,并在主服务器1中可见。

主主复制成功!

原文地址:http://blog.51cto.com/12480612/2058997

时间: 2024-10-27 19:41:44

MySQL备份,恢复方案,mysqlbinlog,mysqldump,主从,主主复制的相关文章

屌炸天实战 MySQL 系列教程(四)【秒杀七年经验 LowB工程师】 主从复制、读写分离、模拟宕机、备份恢复方案生产环境实战

第一篇:屌炸天实战 MySQL 系列教程(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:屌炸天实战 MySQL 系列教程(二) 史上最屌.你不知道的数据库操作 第三篇:屌炸天实战 MySQL 系列教程(三)你不知道的 视图.触发器.存储过程.函数.事物.索引.语句 第四篇:屌炸天实战 MySQL 系列教程(四) 主从复制.读写分离.模拟宕机.备份恢复方案生产环境实战 去年公司有一个七年PHP开发经验的工程师,想要跳槽. 去国内某知名互联网公司面试后,被虐惨了,非要我给他讲讲什么是主从

MySQL数据库恢复(使用mysqlbinlog命令)

MySQL数据库恢复(使用mysqlbinlog命令) 1:开启binlog日志记录 修改mysql配置文件mysql.ini,在[mysqld]节点下添加 复制代码代码如下: # log-bin log-bin = E:/log/logbin.log 路径中不要包含中文和空格.重启mysql服务.通过命令行停止和启动mysql服务 复制代码代码如下: c:\>net stop mysql; c:\>net start mysql; 进入命令行进入mysql并查看二进制日志是否已经启动 Sql

SharePoint 高可用和备份恢复方案(一, 系统层面的要求与介绍)

 SharePoint 高可用和备份恢复方案(一 SharePoint 层面) 高可用性(High Availability),是指在服务器出现硬件或者网络故障的时候,尽可能不会中断服务,并尽可能减少对用户的影响. SharePoint服务器场本身是一个典型的三层架构(从2007.到2010.2013再到2016,这个基本的架构都是一样的),也就是前端服务器 - 应用服务器 - 数据库服务器.当然随着系统优化和对高可用要求提升,高可用和恢复技术也有所提高. 也许大家都很清楚SharePoin

Mysql备份恢复

五.Mysql备份恢复 1.备份方式: ■直接phpmyadmin导出备份.我们用root管理权限进入phpmyadmin,然后把需要备份网站的mysql数据库导出备份,建议用gzip压缩格式 ■ mysqldump命令.我们用登陆SSH,然后用命令备份 ■ LVS快照备份  2.备份策略: ■ 完整备份 ■ 增量备份 ■ 差异备份 3.备份类型: ■ 冷备(cold backup):需要关mysql服务,读写请求均不允许状态下进行: ■ 温备(warm backup): 服务在线,但仅支持读请

Mysql 备份恢复的简单实践

一.备份: 进行mysql的安装目录: 使用./mysqldump -u root -h 127.0.0.1 -P 3306 -p mysql>trymysql.sql 输入密码,备份成功. 二.恢复 进行mysql. 创建数据库 create database trymysql; 进入数据库 use trymysql ; 恢复 source trymysql.sql Mysql 备份恢复的简单实践

中小型数据库 RMAN CATALOG 备份恢复方案(二)

中小型数据库呈现的是数据库并发少,数据库容量小,版本功能受限以及N多单实例等特点.尽管如此,数据库的损失程度也会存在零丢失的情形.企业不愿意花太多的钱又要保证数据库的可靠稳定,可是苦煞了我这些搞DB的.接上一篇文章,中小型数据库 RMAN CATALOG 备份恢复方案(一),我们继续来给出基于中小型数据库的恢复的脚本与其部署. 1.RMAN还原shell脚本 [python] view plain copy print? --下面的shell脚本用于实现数据库的自动还原,还原成功后,数据库被关闭

某电商项目PostgreSQL数据库备份恢复方案

某电商项目PostgreSQL数据库备份恢复方案: 下载地址:某电商项目PostgreSQL数据库备份恢复方案

mysql二进制日志详解及备份恢复、基于mysqldump及lvmsnapshot做备份恢复详解

二进制日志: 时间点恢复 复制 20140411 回顾: 日志文件:6类 一般查询日志:log, general_log, log_output 慢查询日志: 错误日志 二进制日志 中继日志 事务日志 二进制日志:"修改" position:位置 time: 时间 滚动: 1.大小 2.时间 二进制日志的功用: 即时点恢复: 复制: mysql> SHOW MASTER STATUS; mysql> FLUSH LOGS; mysql> SHOW BINARY LOG

MySQL备份恢复基础知识及MySQLdump讲解

数据库备份恢复知识要点: 时间轴备份类型分类: 完全备份:备份整个数据集 增量备份:上一次完全备份,或上一次增量备份以后变化的数据的备份(还原麻烦,节省空间) 差异备份:仅备份最近一次完全备份以来变化的数据(还原简单,空间消耗大) 什么是物理备份.逻辑备份: 物理备份:直接复制数据文件进行备份(有可能占用更多的空间,备份速度快,做热备较难) 逻辑备份:从数据库中导出数据"另存为"而进行的备份(从二进制转化为文本格式,有可能丢失精度,需要专门的协议客户端才能进行,和数据存储引擎无关.备份

07 : mysql备份恢复(1) - mysqldump命令使用

注意: mysql不同引擎备份方法不同.我们先来回忆一下和备份有关的知识点. 1.存储引擎(1)InnoDB(默认使用引擎,也是企业常用的) 热备 独立表空间(每个表一个表空间) redo:重做日志,用来前滚 undo:回滚日志,用来回滚(未提交的事务) 行级别锁,基于索引来实现的,GAP锁 支持事务.(2)MyISAM 温备 三个文件构成 表级锁 2.二进制日志(1)记录的是什么? DDL.DCL这些种类语句,记录的就是操作语句 DML:他记录的已提交的事务日志,并支持多种格式记录(row.s