mysql的日志及利用mysqldump备份及还原
日志文件:6类
一般查询日志:log,general_log,log_output
慢查询日志:
错误日志
二进制日志
中继日志
事务日志
二进制日志:
记录了当前服务器的数据修改和有潜在可能性影响数据修改的语句
默认在数据目录下,通常情况下为mysql-bin
可以通过mysqlbinlog来查看
时间记录 time
偏移位置 position
show master status 查看当前使用的二进制日志和下一个事件开始时的基于的位置
日志滚动:当超过1G,日志会滚动
可以按照大小定义
时间定义
执行flush logs
查看当前正在使用的log日志
show binary logs
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 996 |
| mysql-bin.000002 | 126 |
| mysql-bin.000003 | 39892 |
| mysql-bin.000004 | 201 |
| mysql-bin.000005 | 194 |
+------------------+-----------+
二进制日志的功用
即时点恢复:
复制:
清除日志
PURGE { BINARY | MASTER } LOGS
{ TO 'log_name' | BEFORE datetime_expr(某个时间之前) }
查看mysql的日志
SHOW BINLOG EVENTS
mysql> show binlog events\G
*************************** 1. row ***************************
Log_name: mysql-bin.000001
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 107
Info: Server ver: 5.5.33-log, Binlog ver: 4
service-id:服务器身份标识
INSERT INTO t1 value(current_date())
Mysql 记录二进制日志的格式
基于语句:statement
基于行:row
混合模式:mixed
指定从那个位置开始读取
mysql> show binlog events in 'mysql-bin.000001' from 371\G
或者
# mysqlbinlog --start-position=371 mysql-bin.000005
mysqlbinlog
--start-time
--stop-time
--start-position
--stop-position
二进制日志文件内容格式
事件发生的日期和时间
服务器ID
事件结束位置
事件的类型
原服务器生成此事件时的线程ID号
语句时间戳和写入二进制文件的时间差,单位为秒
错误代码,0表示正常执行
事件内容
事件位置(相当于下一事件的开始位置)
服务器参数:
log_bin = {ON|OFF},还可以是一个文件路径
log_bin_trust_function_creators 不阻止任何存储函数
sql_log_bin = {ON|OFF} 当前会话是否将二进制文件进入进二进制文件
sql_log_off 是否将一般查询日志记入查询日志
sync_binlog 同步缓冲中的二进制到硬盘的时间,0不基于时间同步,只在事件提交时同步
binlog_format = {|statement|row|mixed}
max_binlog_cache_size = mysql二进制日志的缓冲区大小,仅用于缓存事务类的语句
max_binlog_stmt_cache_size 语句缓冲区大小,即事务类和非事务类公用的大小
max_binlog_size 二进制日志文件的上限,单位为字节
建议:切勿将二进制日志与数据文件放在同一设备
设置二进制日志文件目录:
# mkdir /data/binlog
# chown mysql.mysql /data/binlog
vim /etc/my.cnf
加入 log-bin=/data/binlog/mysql-bin
重启mysql服务生效
# service mysqld restart
可以临时通过sql_log_bin来控制二进制的写入
中继日志:
对于非从服务器 中继日志没有启用
relay_log_purge = {ON|OFF} 是否自动清理不在需要的中继日志
relay_log_space_limit 中继大小是否限制
备份和恢复:
1.做灾难恢复
2.做审计
3.测试
备份:目的用于恢复;对备份数据做恢复测试
备份类型:
根据备份时,数据库服务器是否在线
冷备:cold backup
温备:warm backup 全局施加共享锁,只能读,不能写
热备:hot backup
根据备份的数据集:
完全备份 full backup
部分备份 partial backup
根据备份时的接口(直接备份数据文件还是通过mysql服务器导出数据)
物理备份:直接复制(归档)数据文件的备份方式
逻辑备份:把数据从库中提取出来保存为文本文件
根据备份时是备份整个数据还是仅备份变化的数据
完全备份:full backup
增量备份:incremental backup
差异备份:differential backup 从上一个完全备份开始备份
备份策略:
选择备份方式
选择备份时间
考虑到恢复成本
恢复时长
考虑备份成本
锁时间
备份时长
备份负载
备份对象:
数据
配置文件:
代码:存储过程、存储函数、触发器
OS相关的配置文件,如crontab配置计划及相关脚本
跟复制相关的配置信息:
二进制日志文件
常用的备份工具
mysqldump(单线程):逻辑备份工具
InnoDB热备、MyISAM温备、Aria温备
备份和恢复过程较慢
mysqldumper:多线程的mysqldump
很难实现差异或增量备份
基于lvm-snapshot
接近于热备的工具,因为要先请求全局锁,而后创建快照,并在创建完成后释放全局锁
使用cp、tar等工具进行物理备份
备份和恢复速度较快
很难实现增量备份,并且请求全局锁需要等待一段时间,在繁忙的服务器上尤其如此
SELECT clause INTO OUTFILE ‘/path/to/somefile’
LOAD DATA INFILE ‘/path/from/somefile’
部分备份工具,不会备份关系定义,仅备份表中的数据
是个逻辑备份工具,快于mysqldump
Innobase:商业备份工具,innobackup
Xtarbackup:有Percona提供的开源备份工具
InnoDB热备,增量备份
MyISAM热备,不支持增量
物理备份,速度快
mysqlhotcopy:几乎冷备
mysqldump:仅适用于数据集较小
使用格式:mysqldump [options] [db_name [tbl_name ...]]
还原时库应该存在
-u uername
-h 主机名
-p 密码
恢复时应该使用mysql < /path/to/file.mysql
备份单个库 mysqldump [options] db_name > /path/to/file.mysql
恢复时如果目标不存在,应先创建数据库,如果不想创建,这使用--databases
# mysqldump -uroot -hlocalhost -p hellodb > /tmp/hello.sql
备份所有的库
mysqldump --all-databases > /path/to/file.mysql
# mysqldump --all-databases > /tmp/alldb.sql
备份指定的多个库
--databases tb1 tb2 .....
# mysqldump --databases hellodb mydb > /tmp/hellandmydb.sql
恢复:
# mysql < /tmp/hellandmydb.sql
注意:备份前要加锁
--lock-all-tables :请求锁定所有表之后在备份,对MyISAM,InnoDB,Aria做温备
--single-transaction:能够对InnoDB存储引擎实现热备
备份代码
--events:备份事件调度器代码
--routines:备份存储过程和存储函数
--triggers:备份触发器
备份时滚动日志:
--flush-logs:备份前、请求到锁之后滚动日志
复制时的同步位置标记
--master-data={0|1|2}
0表示不记录,
1表示记录为change master语句
2表示记录为注释的change master语句
使用mysqldump备份
请求锁:--lock-all-tables 或使用--single-transaction进行innodb热备
滚动日志:--flush-logs
选定要备份的库 --databases
记录二进制文件及位置 --master-date
手动请求全局锁
FLUSH [NO_WRITE_TO_BINLOG | LOCAL] flush_option [, flush_option] ...
flush tables with read lock
flush logs
unlock tables
恢复:
建议:关闭二进制日志,关闭其他用户的写操作
应该用souce 恢复
备份策略:基于mysqldump
备份:mysqldump+二进制日志文件
周日做一次完全备份,备份的同时滚动日志
周一至周六:备份二进制日志
myadmin flush-logs
恢复:完全备份+各二进制文件至此刻的事件
对于MYsql配置文件,以及与mysql相关的OS配置文件在每次修改后都应该直接进行备份
案例: 对hellodb数据库进行还原操作
1.查看hellodb数据库表使用的引擎情况,有myisam数据库
mysql> show table status from hellodb\G
备份hellodb数据库,--master-data-2标记日志文件的位置
# mysqldump --databases hellodb --lock-all-tables --flush-logs --master-data=2 > /tmp/hello.a.sql
通过命令可以看到此时的位置107,
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 107 | | |
+------------------+----------+--------------+------------------+
或者vim /tmp/hellodb.20160114.sql,也可以看到二进制文件标记
2.模拟失误操作
创建newtb表,并插入数据
mysql> create table newtb(name char(30));
mysql> insert into newtb(name) values('tom'),('lily'),('lucy');
清空表数据
mysql> truncate table newtb;
查看二进制从107位置开始的日志记录
# mysqlbinlog --start-position=107 /data/binlog/mysql-bin.000004
将日志中记录这一部分记录截取出来生成增量的sql
# mysqlbinlog --start-position=107 --stop-position=712 mysql-bin.000005 > /tmp/hello.a.inc.sql
3.还原
关闭还原操作的日志记录
mysql> set session sql_log_bin=0;
还原完整备份
mysql> source /tmp/hellodb.a.sql
验证数据库是否存在
还原增量备份
mysql> source /tmp/hello.a.inc.sql
mysql的日志及利用mysqldump备份及还原的更多相关文章
- Android(java)学习笔记247:ContentProvider使用之利用ContentProvider备份和还原手机短信(掌握)
1.通过阅读系统源码我们知道: 短信的内容提供者: content://sms/ 系统短信的内容提供者的路径 2. 利用ContentProvider备份和还原手机短信: (1) ...
- Android(java)学习笔记191:ContentProvider使用之利用ContentProvider备份和还原手机短信(掌握)
1. 通过阅读系统源码我们知道: 短信的内容提供者: content://sms/ 系统短信的内容提供者的路径 2. 利用ContentProvider备份和还原手机短信: (1 ...
- 利用mysqldump备份mysql
mysqldump备份机制:通过给定的参数信息和系统表数据,来一张表一张表地获取数据并生成insert语句插入备份文件中,这样由于时间点不一致,就会导致数据不一致,然而对于一个要求强一致性的系统来说, ...
- mysqldump备份与还原mysql数据的实例
有关mysql数据库的备份与还原,我们一般用下面两种方式来处理:1.使用into outfile 和 load data infile导入导出备份数据 本文原始链接:http://www.jbxue. ...
- MySQL使用mysqldump备份及还原
MySQL可以使用mysqldump进行数据的逻辑备份,配合开启bin log日志可以实现数据的全量恢复及增量恢复 MySQL版本查看 修改配置文件记录bin log日志 [mysqld] #bin ...
- windows环境下mysql的解压安装以及备份和还原
系统环境为server2012 1.下载mysql解压版,解压安装包到指定目录 2.在以上目录中,复制一份my-default.ini文件,重命名为my.ini,进行如下修改(按照需要): [mysq ...
- 1122Shell脚本之利用mysqldump备份MySQL数据库
#!/bin/bash #Mysql 自动备份 压缩并上传到 指定ftp #设想每天凌晨3点备份mysql #编辑crontab配置文件 #00 03 * * * backupmysql.sh #压缩 ...
- mysql之mysqldump——备份与还原
导出数据库里的某一张表 [root@localhost ~]# mysqldump -uroot -p test bptest>fi.mysql #导出test数据库中的bptest表 Ente ...
- 利用mysqldump备份magento数据库
在Magento开发和维护过程中,经常需要将Magento的数据库导出.导入,这些工作可以通过mysqldump这个工具来实现. 下面我来简单介绍一下mysqldump在导出导入Magento dat ...
随机推荐
- dos初始操作和全屏方法
1.初始操作 mount d d:\ ;选择挂载的硬盘 d:\ cd Dos cd MASM ;到达debug/edit/link/masm.exe文件的位置 ;然后可以进行debug/edit xx ...
- 盖得化工--selenium翻页测试
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- md5加密解密版本2
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- 我的 $OI$, 退役前写点东西
离 \(NOIp2018\) 还有五天, 总想写点什么 马上退役了啊 是什么时候喜欢上信息技术的呢 记不清了, 很小的时候就喜欢捣鼓关于电脑的东西 当时也不知道有算法这种东西 只是知道有黑客 巨 j8 ...
- Ubuntu 下 Tomcat7 的安装和配置
tomcat下载地址:http://tomcat.apache.org/download-70.cgi 声明:下面的内容和原创笔者的博文的内容差不多,不一样的只是tomcat7的安装目录不同,我按照我 ...
- rpm打包tomcat
1.制作rpm包 yum install rpm-build -y 2.创建工作目录 mkdir -pv ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} 3.准 ...
- 08-DML(插入、更新、删除)
1. 插入 (1). 插入完整数据记录 (2). 插入数据记录的一部分 (3). 插入多条记录(MySQL特有的) INSERT INTO table_name (column1,column2,co ...
- GBK-----UTF-8编码格式问题浅析
首先,想必大家在不同环境下切换写代码的时候,都会遇见乱码的时候(读取二进制的时候采用的编码和最初将字符转换成二进制时的编码不一致.),大多数人都知道,只需要把项目工程的编码格式调整一下为最初的编码就可 ...
- DHCP服务洪水攻击
1.攻击原理 动态主机设置协议是一个局域网的网络协议,使用UDP协议工作,主要有两个用途: 为内部网络或网络服务供应商自动分配IP地址给用户,以作为内部网络管理员对所有计算机做中央管理的手段. 在正常 ...
- BZOJ 4614[Wf2016]Oil
权限题鸭qwq 首先可以知道最优答案选出来的直线一定可以经过某条线段左端点,如果这条直线没有过左端点,可以通过平移和旋转等操作达到.所以可以枚举这条直线过了哪条线段的左端点,那么对于其他线段,能对答案 ...