一.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. android共享内存

    在android下不能通过shm_open使用共享内存. 网上有好多关于android下使用Ashmem实现共享内存的,但经过尝试该方法可以mmap出内存,但是和另一个进程没有实现共享. 具体的使用方 ...

  2. 第七篇T语言实例开发,文本与程序的几种打开方法(版5.3)

    文本与程序的几种打开方法 文本文件的打开方法 函数名: cmd 命令 函数描述: 执行CMD命令 函数原型: cmd(cmdstr) 命令(cmd命令) 函数参数: cmdstr:cmd命令,此处执行 ...

  3. 拓展Yii Framework(易框架)

    1.拓展yii 此文针对Yii1.1.15而写,请注意甄别你的Yii Framework 版本. 拓展yii是开发期间常见的代码处理方式.例如,你写一个新的controller(业务控制器),你通过继 ...

  4. ubuntu绑定串口设备

    原创博文:转载请标明出处:http://www.cnblogs.com/zxouxuewei 为了不让我们的usb设备在使用时,由于设备节点注册的ID不同,设备名称会不同,设备如何在 Linux 中永 ...

  5. 【引】objective-c,6:Autorelease Pool

    参考博客: http://blog.leichunfeng.com/blog/2015/05/31/objective-c-autorelease-pool-implementation-princi ...

  6. 【WEB前端】CSS常用选择器

    1.1 标签选择器 就是用标签名来当做选择器. 1) 所有标签都能够当做选择器,比如body.h1.dl.ul.span等等 2) 不管这个标签藏的多深,都能够被选择上. 3) 选择的是所有的,而不是 ...

  7. 移动端bug~~移动端:active伪类无效的解决方法【移动端 :active样式无效】

    移动端:active伪类无效的解决方法[移动端 :active样式无效]2016-09-26  15:46:50 问题: 移动端开发的时候实现按钮的点击样式变化,但是在iphone[safiri Mo ...

  8. JSP编译原理图解

  9. Linux中MySQL的基本操作

    1. 用root用户登录mysql mysql -u root -p 2. 查看database show databases; 3. 查看table use database名 show table ...

  10. 跟我学Windows Azure 五 使用Cloub Service连接Blob Service完成图片的上传

    首先,我们创建一个云服务项目,用来演示我们的blob存储 下来我们修改我们我们云服务的名字 我们需要添加一个空的WebForm的项目 点击完成,我们可以看到我们的解决方案已经添加完成 下来我们需要添加 ...