电商网站建设实训要求,个人制作网站的流程,泰安受欢迎的网站建设,科技的意义和价值MySQL 一、MySQL日志管理1、MySQL日志类型2、错误日志3、通用查询日志4、慢查询日志5、二进制日志5.1 开启日志5.2 二进制日志的管理5.3 日志查看5.4 二进制日志还原数据 二、MySQL备份1、备份类型逻辑备份优缺点 2、备份内容3、备份工具3.1 MySQL自带的备份工具3.2 文件系统备… MySQL 一、MySQL日志管理1、MySQL日志类型2、错误日志3、通用查询日志4、慢查询日志5、二进制日志5.1 开启日志5.2 二进制日志的管理5.3 日志查看5.4 二进制日志还原数据 二、MySQL备份1、备份类型逻辑备份优缺点 2、备份内容3、备份工具3.1 MySQL自带的备份工具3.2 文件系统备份工具3.3 其它工具 一、MySQL日志管理
在数据库保存数据时有时候不可避免会出现数据丢失或者被破坏这样情况下我们必须保证数据的安全性和完整性就需要使用日志来查看或者恢复数据了。
数据库中数据丢失或被破坏可能原因
误删除数据库数据库工作时意外断电或程序意外终止由于病毒造成的数据库损坏或丢失文件系统损坏后系统进行自检操作升级数据库时命令语句不严格设备故障等等自然灾害盗窃
1、MySQL日志类型
MySQL有几个不同的日志文件可以帮助你找出mysqld内部发生的事情
日志类型记入文件中的信息类型错误日志记录启动、运行或停止时出现的问题查询日志记录建立的客户端连接和执行的语句二进制日志记录所有更改数据的语句。主要用于复制和即时点恢复慢日志记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询事务日志记录InnoDB等支持事务的存储引擎执行事务时产生的日志 默认情况下所有日志创建于mysqld数据目录中。通过刷新日志你可以强制 mysqld来关闭和重新打开日志文件或者在某些情况下切换到一个新的日志。当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时出现日志刷新。如果你正使用MySQL复制功能从复制服务器将维护更多日志文件被称为接替日志。
在mysql中执行SQL语句
FLUSH LOGS在shell中通过mysqladmin命令执行日志刷新
mysqladmin flush-logs
mysqladmin refresh2、错误日志
错误日志主要记录如下几种日志
服务器启动和关闭过程中的信息服务器运行过程中的错误信息事件调度器运行一个时间是产生的信息在从服务器上启动从服务器进程是产生的信息
错误日志定义 可以用–log-error[file_name]选项来指定mysqld保存错误日志文件的位置。如果没有给定file_name值mysqld使用错误日志名host_name.err 并在数据目录中写入日志文件。如果你执行FLUSH LOGS错误日志用-old重新命名后缀并且mysqld创建一个新的空日志文件。(如果未给出–log-error选项则不会重新命名
查看当前错误日志配置:
mysql SHOW GLOBAL VARIABLES LIKE %log_error%;
是否记录警告日志
mysql SHOW GLOBAL VARIABLES LIKE %log_warnings%;3、通用查询日志
启动开关 general_log{ON|OFF}日志文件变量general_log_file[/PATH/TO/file]全局日志开关log{ON|OFF} 该开关打开后所有日志都会被启用记录类型log_output{TABLE|FILE|NONE}
因此要启用通用查询日志需要至少配置general_logONlog_output{TABLE|FILE}。而general_log_file如果没有指定默认名是host_name.log。
看看上述几个值的默认配置
mysql SHOW GLOBAL VARIABLES LIKE %general_log%;
mysql SHOW GLOBAL VARIABLES LIKE %log_output%;4、慢查询日志
MySQL如果启用了 slow_query_logON 选项就会记录执行时间超过long_query_time的查询初使表锁定的时间不算作执行时间。日志记录文件为slow_query_log_file[file_name]如果没有给出file_name值 默认为主机名后缀为-slow.log。如果给出了文件名但不是绝对路径名文件则写入数据目录。
默认与慢查询相关变量
# 默认没有启用慢查询为了服务器调优建议开启
mysql SHOW GLOBAL VARIABLES LIKE %slow_query_log%;# 开启方法,当前生效永久有效配置文件中设置
SET GLOBAL slow_query_logON; # 使用 mysqldumpslow 命令获得日志中显示的查询摘要来处理慢查询日志
# mysqldumpslow slow.log
# 那么多久算是慢呢
# 如果查询时长超过long_query_time的定义值默认10秒即为慢查询
mysql SHOW GLOBAL VARIABLES LIKE long_query_time;5、二进制日志
5.1 开启日志
二进制日志启动开关log-bin [ file_name]。
注意在5.6及以上版本一定要手动指定。5.6以下版本默认file_name为$datadir/mysqld-binlog。查看二进制日志的工具为mysqlbinlog。 二进制日志包含了所有更新了数据或者已经潜在更新了数据例如没有匹配任何行的一个DELETE的所有语句。 语句以“事件”的形式保存它描述数据更改。二进制日志还包含关于每个更新数据库的语句的执行时间信息。它不包含没有修改任何数据的语句。 二进制日志的主要目的是在数据库存在故障时恢复时能够最大可能地更新数据库即时点恢复因为二进制日志包含备份后进行的所有更新。二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句。
二进制日志是记录执行的语句还是执行后的结果数据呢分为三种情况 假如一个表有10万行数据而现在要执行一个如下语句将amount字段的值全部在原来的基础上增加1000
UPDATE sales.january SET amountamount1000 ;此时如果要记录执行后的结果数据的话日志会非常大。因此在这种情况下应记录执行语句。这种方式就是基于语句的二进制日志。 如果向某个字段插入的是当前的时间呢如下
INSERT INTO tb SET BirthdateCURRENT_TIME();此时就不能记录语句了因为不同时间执行的结果是不一样的。这是应该记录这一行的值这种就是基于行row的二进制日志。 在有些情况可能会结合两种方式来记录这种叫做混合方式的二进制日志。
5.2 二进制日志的管理
日志滚动。在my.cnf中设定max_binlog_size 200M表示限制二进制日志最大尺寸为200M超过200M后进行滚动。MySQL的滚动方式与其他日志不太一样滚动时会创建一个新的编号大1的日志用于记录最新的日志而 原日志名字不会被改变。每次重启MySQL服务日志都会自动滚动一次。
另外如果需要手动滚动则使用命令 mysql FLUSH LOGS ;
5.3 日志查看
查看有哪些二进制日志文件mysql SHOW BINARY LOGS;
查看当前正在使用的是哪一个二进制日志文件mysql SHOW MASTER STATUS;
查看二进制日志内容mysql SHOW BINLOG EVENTS IN mysqld-binlog.000002;
##该语句还可以加上Position位置指定显示从哪个Position位置开始
mysql SHOW BINLOG EVENTS IN mysqld-binlog.000002 FROM 203;
使用命令mysqlbinlog查看二进制日志内容mysqlbinlog [options] log-files5.4 二进制日志还原数据
使用mysqlbinlog读取需要的日志内容使用标准输入重定向到一个sql文件然后在mysql服务器上导入即可如下
mysqlbinlog mysqld-binlog.000002 /root/temp_date.sql如果报编码错误mysqlbinlog: [ERROR] unknown variable default-character-set 原因mysqlbinlog这个工具无法识别binlog中的配置中的default-character-setutf8mb4这个指令。 有两种方式解决 添加 --no-defaults 参数
mysqlbinlog --no-defaults binlog.000069 c:/a.sql
# 注意需要指定binlog的位置如果是当前路径则可以直接使用名称即可。修改配置文件my.cnf default-character-setutf8mb4 修改为 character-set-server utf8mb4但是需要重启MySQL服务。
删除二进制日志文件 二进制日志文件不能直接删除的如果使用rm等命令直接删除日志文件可能导致数据库的崩溃。必须使用命令 PURGE 删除日志语法如下
PURGE { BINARY | MASTER } LOGS { TO log_name |BEFORE datetime_expr }注意如果数据库使用的编码是utf8mb4编码mysqlbinlog命令可能不能解析这种编码提供两种方案 在MySQL的配置/etc/my.cnf中将**default-character-setutf8mb4 **修改为 character-set-server utf8但是这需要重启MySQL服务如果你的MySQL服务正在忙那这样的代价会比较大。 用mysqlbinlog –no-defaults mysql-bin.000004 命令打开。
二、MySQL备份
1、备份类型
根据服务器状态可以分为热备份、温备份、冷备份
热备份读、写不受影响温备份仅可以执行读操作冷备份离线备份读、写操作均中止
从对象来分可以分为物理备份与逻辑备份
物理备份复制数据文件逻辑备份将数据导出至文本文件中
从数据收集来分可以完全备份、增量备份、差异备份
完全备份备份全部数据增量备份仅备份上次完全备份或增量备份以后变化的数据差异备份仅备份上次完全备份以来变化的数据
逻辑备份优缺点
逻辑备份的优点
在备份速度上两种备份要取决于不同的存储引擎物理备份的还原速度非常快。但是物理备份的最小粒度只能做到表逻辑备份保存的结构通常都是纯ASCII的所以我们可以使用文本处理工具来处理逻辑备份有非常强的兼容性而物理备份则对版本要求非常高逻辑备份也对保持数据的安全性有保证
逻辑备份的缺点
逻辑备份要对RDBMS产生额外的压力而裸备份无压力逻辑备份的结果可能要比源文件更大。所以很多人都对备份的内容进行压缩逻辑备份可能会丢失浮点数的精度信息
2、备份内容
数据文件
日志文件比如事务日志二进制日志
存储过程存储函数触发器
配置文件十分重要各个配置文件都要备份
用于实现数据库备份的脚本数据库自身清理的Crontab等……3、备份工具
3.1 MySQL自带的备份工具
mysqldump是mysql数据库管理系统自带的逻辑备份工具支持所有引擎MyISAM引擎是温备InnoDB引擎是热备备份速度中速还原速度非常非常慢。但是在实现还原的时候具有很大的操作余地。具有很好的弹性。 mysqlhotcopy物理备份工具但只支持MyISAM引擎基本上属于冷备的范畴物理备份速度比较快。mysql5.7已经没有这个命令了多用于mysql5.5之前。mysqlhotcopy使用lock tables、flush tables和cp或scp来快速备份数据库或单个表属于裸文件备份物理备份只能用于MyISAM引擎的数据库。本质是使用锁表语句然后cp或scp。
3.2 文件系统备份工具
cp 命令 冷备份支持所有引擎复制命令只能实现冷备物理备份。使用归档工具cp命令对其进行备份的备份速度快还原速度几乎最快但是灵活度很低可以跨系统但是跨平台能力很差。lvm 几乎是热备份支持所有引擎基于快照(LVMZFS)的物理备份速度非常快几乎是热备。只影响数据几秒钟而已。但是创建快照的过程本身就影响到了数据库在线的使用所以备份速度比较快恢复速度比较快没有什么弹性空间而且LVM的限制不能对多个逻辑卷同一时间进行备份所以数据文件和事务日志等各种文件必须放在同一个LVM上。而ZFS则非常好的可以在多逻辑卷之间备份。
3.3 其它工具
ibbackup 商业工具 MyISAM是温备份InnoDB是热备份 备份和还原速度都很快这个软件它的每服务器授权版本是5000美元。xtrabackup 开源工具 MyISAM是温备份InnoDB是热备份 是ibbackup商业工具的替代工具。mysqlbackup ORACLE公司也提供了针对企业的备份软件MySQL Enterprise Backup简称mysqlbackup。
MySQL企业备份工具执行在线“热备“无阻塞的MySQL数据库备份。全备份可以在所有InnoDB数据库上执行而无需中断MySQL查询或更新。此外支持增量备份只备份自上次备份后有变化的数据。另外部分备份支持特定的表或表空间按需要进行备份。