一.mysql日志: 

  mysql的日志种类有很多,常见的有二进制日志,一般查询日志,满查询日志,中继日志,事务日志等,具体信息可以通过 mysql> SHOW GLOBAL VARIABLES LIKE '%log%'; 查看,在我的机器上结果如下:

+-----------------------------------------+--------------------------------+
| Variable_name | Value |
+-----------------------------------------+--------------------------------+
| back_log | |
| binlog_cache_size | |
| binlog_checksum | CRC32 |
| binlog_direct_non_transactional_updates | OFF |
| binlog_error_action | IGNORE_ERROR |
| binlog_format | MIXED |
| binlog_gtid_simple_recovery | OFF |
| binlog_max_flush_queue_time | |
| binlog_order_commits | ON |
| binlog_row_image | FULL |
| binlog_rows_query_log_events | OFF |
| binlog_stmt_cache_size | |
| binlogging_impossible_mode | IGNORE_ERROR |
| expire_logs_days | |
| general_log | OFF |
| general_log_file | /var/lib/mysql/master.log |
| innodb_api_enable_binlog | OFF |
| innodb_flush_log_at_timeout | |
| innodb_flush_log_at_trx_commit | |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_buffer_size | |
| innodb_log_compressed_pages | ON |
| innodb_log_file_size | |
| innodb_log_files_in_group | |
| innodb_log_group_home_dir | ./ |
| innodb_mirrored_log_groups | |
| innodb_online_alter_log_max_size | |
| innodb_undo_logs | |
| log_bin | ON |
| log_bin_basename | /var/log/mysql/mysql-bin |
| log_bin_index | /var/log/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| log_error | /var/log/mysql/error.log |
| log_output | FILE |
| log_queries_not_using_indexes | OFF |
| log_slave_updates | OFF |
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| log_throttle_queries_not_using_indexes | |
| log_warnings | |
| max_binlog_cache_size | |
| max_binlog_size | |
| max_binlog_stmt_cache_size | |
| max_relay_log_size | |
| relay_log | |
| relay_log_basename | |
| relay_log_index | |
| relay_log_info_file | relay-log.info |
| relay_log_info_repository | FILE |
| relay_log_purge | ON |
| relay_log_recovery | OFF |
| relay_log_space_limit | |
| simplified_binlog_gtid_recovery | OFF |
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/master-slow.log |
| sql_log_bin | ON |
| sql_log_off | OFF |
| sync_binlog | |
| sync_relay_log | |
| sync_relay_log_info | |
+-----------------------------------------+--------------------------------+
rows in set (0.00 sec)

其中binlog_format字段是指二进制日志的类型,分为3种:1、基于语句(statement) 2、基于行(row)  3、混合方式 。基于语句和基于行各有优劣,如果制定的是基于语句,那么如果sql语句中有类似date的指令,那么在备份的时候就会产生错误。而基于行的会造成日志文件过大。二进制日志会记录任何引起数据库变化和可能引起数据库变化的操作。顾名思义二进制日志的文件类型是二进制的,因此不能用打开ASCII文件的方式打开,用  file mysql-bin. 查看二进制日志的类型是           mysql-bin.:MySQL replication log 如果用cat,less等命令打开会是乱码,必须用 $mysqlbinlog mysql-bin. 查看,才会得到具体的日志信息,部分结果如下:

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at
# :: server id end_log_pos CRC32 0xd41ad4d6 Start: binlog v , server v 5.6.--log created :: at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
NOwKVw8BAAAAdAAAAHgAAAABAAQANS42LjI4LTEtbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA07ApXEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAdbU
GtQ=
'/*!*/;
# at
# :: server id end_log_pos CRC32 0x26bc23ca Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
SET @@session.pseudo_thread_id=/*!*/;
SET @@session.foreign_key_checks=, @@session.sql_auto_is_null=, @@session.unique_checks=, @@session.autocommit=/*!*/;
SET @@session.sql_mode=/*!*/;
SET @@session.auto_increment_increment=, @@session.auto_increment_offset=/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=,@@session.collation_connection=,@@session.collation_server=/*!*/;
SET @@session.lc_time_names=/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
drop database article
/*!*/;
# at
# :: server id end_log_pos CRC32 0x69a849f1 Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
create database article
/*!*/;
# at
# :: server id end_log_pos CRC32 0x7b2ad848 Query thread_id= exec_time= error_code=
use `article`/*!*/;
SET TIMESTAMP=/*!*/;
SET @@session.foreign_key_checks=, @@session.unique_checks=/*!*/;
SET @@session.sql_mode=/*!*/;
DROP TABLE IF EXISTS `at_admin` /* generated by server */
/*!*/;

这里面无非就是记录的一些sql脚本,但是mysql的二进制日志对于数据库的复制和及时点恢复至关重要,在生产环境中一定要将二进制日志和数据文件存放在两块不同的硬盘上,一旦数据文件所在的硬盘损坏就可以通过二进制日志备份还原,还有一个原因是二进制日志和数据库数据文件都会引起大量IO操作,如果两者放在同一块磁盘上那么io量就会变得非常大,引起系统性能下降。除了在终端使用mysqlbinlog查看二进制日志,还可以在mysql交互式模式中使用一系列命令查看和二进制日志相关的信息。

mysql>show  binary    logs;     查看系统当前有哪些二进制日志文件名

+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 423 |
| mysql-bin.000002 | 2811 |
+------------------+-----------+
2 rows in set (0.00 sec)

mysql> show master status;    查看当前记录二进制日志文件的状态
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin. | | | | |
+------------------+----------+--------------+------------------+-------------------+
row in set (0.00 sec)
mysql> show binlog events in 'mysql-bin.000001';    查看某个二进制日志文件的内容  \G可选,可以让结果以垂直的方式显示
+------------------+-----+-------------+-----------+-------------+---------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+---------------------------------------------------------------------+
| mysql-bin. | | Format_desc | | | Server ver: 5.6.--log, Binlog ver: |
| mysql-bin. | | Query | | | BEGIN |
| mysql-bin. | | Intvar | | | INSERT_ID= |
| mysql-bin. | | Query | | | use `article`; insert into at_type (typename) values ('pt'),('ll') |
| mysql-bin. | | Xid | | | COMMIT /* xid=24 */ |
| mysql-bin. | | Stop | | | |
+------------------+-----+-------------+-----------+-------------+---------------------------------------------------------------------+
rows in set (0.00 sec)

  expire_logs_days是指日志过期时间,一般要设定为0,如果设定为30,那么30天之后所有日志将被自动清空,而二进制日志对于数据库恢复是很重要的,不能清除。

  general_log字段的值一般设为OFF关闭,如果开启普通查询日志,则用户的每一条查询语句都将被记录下来,这将产生大量磁盘IO,而凡是产生IO的地方都会影响系统系统。IOPS用来衡量一个IO设备每秒钟执行IO操作的次数,普通台式机机械硬盘的iops是100,SCSI硬盘的iops能达到200,而SSD的iops可能会达到500---1000不等,因此在生产环境中一个繁忙的数据库服务器一般都要使用SSD提高性能。二进制日志文件很有可能成为整个系统的瓶颈,因此最好把数据库的二进制日志文件单独放到一块SSD上,定期转移。

  innodb_flush_log_at_trx_commit 有3个可选的值,0:每秒同步,并执行磁盘flush操作 1:每事务同步,并执行磁盘flush操作   2:每事务同步,但不执行磁盘flush操作,由操作系统选择空闲的时间将内存中的数据同步至磁盘。

二.mysql备份与恢复:

  mysql的备份按是否可读写,分为3种,1.热备份:备份的同时读写不受影响. 2.温备份:备份的同时仅可以执行读操作 3.冷备份:也称离线备份,必须终止一切读写操作才能开始备份. 另一种划分方式是按照备份文件的类型分为物理备份和逻辑备份,物理备份都是直接备份数据文件,而逻辑备份会产生一堆sql脚本,速度慢而且可能会丢失浮点数精度,但是很方便采用文本处理工具对其处理.不同的数据库存储引擎支持的备份方法也不同,MyISAM存储引擎仅支持温备份,InnoDB引擎支持热备份和冷备份.

  备份的工具也有很多,mysql自带的mysqldump可以进行逻辑备份,percona提供了遵循GPL协议的开源备份工具xtrabackup,功能十分强大,官网有详细的文档介绍,percona为了mysql提供了很多开源的技术支持,发布了很多mysql管理工具.直接用cp命令也可以备份,但是这样只能冷备份了,用逻辑卷lv可以实现几乎热备份的效果

  下面介绍一下mysqldump 的使用,详细的使用方法可以man一下.在使用mysqldump进行逻辑备份前最好锁表,操作结束后

mysql > flush tables with read lock;
mysql > flush logs
msyql > unlock tables;

再释放锁,或者直接加上--lock-alltables,--flush-logs执行日志滚动,--all-databases 备份所有库,--databases  db1, db2,......备份制定的库,--master-data={0,1,2}  ,这里水平所限,仅介绍mysqldump,xtrabackup这个强大的工具如何使用还是看官方文档吧.

一些example:

 1. mysqldump   -u root   -p    --lock-all-tables    --flush-logs   --master-data=2   --all-databases   >  ~/all.sql   

Warning: Using unique option prefix all-tables instead of all-tablespaces is deprecated and will be removed in a future release. Please use the full name instead.

2. mysqldump  -u root -p --lock-all-tables   --flush-logs --master-data=2  --database  article   >   ~/article.sql

第一步:备份数据库至~/article.sql,article.sql打开就是一堆sql 脚本,部分内容如下:

$ cat article.sql
-- MySQL dump 10.13 Distrib 5.6., for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: article
-- ------------------------------------------------------
-- Server version 5.6.--log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; --
-- Position to start replication or point-in-time recovery from
-- -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=; --
-- Current Database: `article`
-- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `article` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `article`; --
-- Table structure for table `at_admin`
-- DROP TABLE IF EXISTS `at_admin`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `at_admin` (
`id` int() NOT NULL AUTO_INCREMENT,
`name` varchar() DEFAULT NULL,
`passwd` varchar() DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

第二步:模拟数据库损坏 mysql> drop databse article  

第三部:恢复数据库:恢复之前一定要在当前会话中关闭数据库的二进制日志功能,因为他会把恢复过程记录进日志中

 myslq > set sql_log_bin= 

mysql >   source   /home/grid/article.sql 
或者
mysql > . /home/grid/article.sql

另一种恢复数据的方式是直接使用二进制日志:

 #mysqlbinlog  mysql-bin.  |   mysql -u root -p

但这种方式似乎不能完全恢复所有的数据

 

mysql日志与备份恢复的更多相关文章

  1. 基于MySQL MEB的备份恢复

    MEB(MySQL Enterprise Backup)是MySQL商业版中提供的备份工具,属于物理备份. 同XtraBackup一样,mysqlbackup的使用过程同样包含如下三个步骤: 备份(- ...

  2. mysql之6备份恢复

    基本意义: 将数据另存到其他设备,以便于出现问题时恢复数据     为什么要备份: 灾难恢复:需求改变:测试     几个事先需要考虑的问题: 可以容忍丢失多长时间的数据?恢复要在多长时间内完成?是否 ...

  3. 转 基于MySQL MEB的备份恢复

    几种备份方式的介绍 mysqlbackup是一个热备份工具.也就是说它不像mysqldump那样给表上一个全局锁,由于mysqldump上了这个锁,所以就造成客户端只能对 数据库进行读操作不能写,这也 ...

  4. MySQL实时在线备份恢复方案

    开源Linux 长按二维码加关注~ 上一篇:2020年MySQL数据库面试题总结 快照和复制技术的结合可以保证我们得到一个实时的在线MySQL备份解决方案. 当主库发生误操作时,只需要恢复备库上的快照 ...

  5. 一文搞懂│mysql 中的备份恢复、分区分表、主从复制、读写分离

    目录 mysql 的备份和恢复 mysql 的分区分表 mysql 的主从复制读写分离 mysql 的备份和恢复 创建备份管理员 创建备份管理员,并授予管理员相应的权限 备份所需权限:select,r ...

  6. centos6.5 mysql安装+远程访问+备份恢复+基本操作+卸载

    参考博文: Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置 MySQL修改root密码的多种方法 MySQL的备份与还原 解决mysql导入还原时乱码的问题 ...

  7. mysql之 mysqldump 备份恢复详解

    mysqldump是MySQL用于转存储数据库的客户端程序.转储包含创建表和/或装载表的SQL语句 ,用来实现轻量级的快速迁移或恢复数据库,是mysql数据库实现逻辑备份的一种方式. mysqldum ...

  8. mysql 命令行 备份 恢复数据

    找到mysql启动位置 whereis mysql 备份指定数据库 包括表结构和数据 使用命令mysqldump 数据库名 -u 用户名 -p > 存储文件路径 [root@izm5e16gjd ...

  9. MySQL另类的备份恢复方法——innodb可传输表空间

      Preface       There're many ways in backing up or migrating data from one server to another one.Lo ...

随机推荐

  1. web安全之sqlload_file()和into outfile()

    load_file() 条件:要有file_priv权限 知道文件的绝对路径 能使用union 对web目录有读权限 如果过滤啦单引号,则可以将函数中的字符进行hex编码 步骤: 1.读/etc/in ...

  2. java IO基础操作

    java IO基础,通熟易懂,好久没复习java 基础了.这里是传送门... http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.ht ...

  3. spring data mongodb 配置遇到的几个问题

    一. mongodb 2.2版本以上的配置 spring.data.mongodb.uri = mongodb://newlook:newlook@192.168.0.109:27017/admin ...

  4. 【转载】Chaotic Time-Series Prediction

    原文地址:https://cn.mathworks.com/help/fuzzy/examples/chaotic-time-series-prediction.html?requestedDomai ...

  5. 在不安装mysql-connector-net的情况下使用FluentData框架

    最近在开发项目中使用了FluentData框架,通过使用这个框架减少了很多开发的工作量,FluentData是一个轻量级的框架操作起来的自由度很大也少了很多负责的配置.但是在开发的时候发现一个问题就是 ...

  6. ubuntu系统lamp环境搭建、数据库迁移、设置数据库外部访问

    sudo passwd root设置两次密码su输入设置的密码exit (退出root帐号) 1.sudo apt-get update 2.sudo apt-get install apache2 ...

  7. 使用keepalived实现mysql主从复制的自动切换

    最近测试了一下mysql+keepalived实现主从自动切换,主从都需要安装keepalived,使用vip漂移实现主从自动切换,这里主要记录的是keepalived的文件配置. 这里mysql搭建 ...

  8. Ubuntu16.04 安装配置Caffe

    Caffe已经是第三次安装配置了,为什么是第三次呢?因为我实在是低估了深度学习对于硬件的要求.第一次我在自己笔记本上配置的单核,CPU only ...  结果是,样例数据跑了4小时,这还怎么玩?第二 ...

  9. 分析案例:应用服务器W3WP进程CPU持续超过百分之九十(Oracle客户端Bug)

    问题描述: 项目反馈应用负载的其中一台服务器业务操作的响应非常慢,登录该服务器发现W3WP进程CPU持续超过90%,哪怕在业务低峰期也是如此?远程查看后发现该应用服务器承载的请求确实很低,why??? ...

  10. Android Studio--学习系列(2)

    1.Failed to load the LayoutLib: com/android/layoutlib/bridge/Bridge : Unsupported major.minor versio ...