日志文件:
1)查询日志:query log
我们每次进行查询操作时生成的 log文件
2)慢查询日志:mysql查询语句时,实际查询时间超出mysql定义的时间的查询叫做慢查询,其记录这种情况的日志就叫做慢查询日志
3)错误日志:不一定是错误日志,其中也存在mysql服务自己启动或关闭产生的正常日志
4)二进制日志:mysql接收到的语句中存在的发生变化的语句,存储为二进制模式
5)
6)事务日志:支持事务存储引擎的,发生的日志记录
备注这些日志默认是不开启的我们要配置和使用需要
查看和日志相关的变量
show global variables like '%log%';
1、查询日志:记录查询操作
这些信息可以记录在
1)文件中
2)表中
其中:
1)general_log:表示是否启用查询日志
2)general_log_file:表示如果启用查询日志,日志存放的位置
3)log_output:表示日志输出存放的格式,分为file和table或者file,table表示表和文件都保存
通常这个都是不开启的,因为会带来大的负载
2、慢查询日志
show global variables like '%log%';
1)slow_query_log是定义慢查询功能是否开启的
2)slow_query_log_file是定义慢查询日志的位置的
3)log_slow_filter: 定义慢查询日志进行中我们定义或者不定定义的记录(通常默认的配置不需要改变)
4)log_slow_rate_limit:指明记录的速率通常是1
查看变量定义时长:show global variables like 'long_q%';
其中long_query_time默认时间是10s.
设置的话
set global long_query_time=
当然这是临时生效,如果想让他永久生效则需要写入配置文件中
我们在生产中通常要启用慢查询日志
3、错误日志
log_error:指明定义文件(这里一般使用绝对路径)
log_warnings=1|0是否记录警告信息到错误日志文件中
记录的信息
默认安装的默认存在/var/log/mariadb/mariadb.log下,但是编译安装的就需要自己定义了
1)mysqld启动和关闭过程中输出的事件信息
2)mysqld运行中产生的错误信息
3)event scheduler运行一个event时产生的日志信息
4)主从复制架构中的服务器上启动服务器线程是产生的信息
4、二进制日志
二进制文件和数据文件不能放在同一磁盘上
log_bin:表示记录文件位置(通常是滚动的一般都是off模式)
sql_logbin:和上面一样(两个必须同时开启)
bin_log_format={statment|row|mixed}(指的是语句模式、行模式、混合模式)
max_binlog_size=''单个二进制文件的最大体积默认为1G
expire_logs_days(表示日志的过期清理时间0表示不清理)
sync_binlog:设定是否启用二进制日志的同步功能
记录导致数据改变或潜在改变的sql语句的这个语句是默认保存为二进制文件格式的备注:我们不要用cat取查看二进制文件,有可能会导致其损坏
查看二进制文件:
show binlog events in 'mysql-bin.00000#' [from pos] [limit [offset,] row_count]
(后面这个代表你要查看的二进制文件)
show {binary|master} logs :查看mysql自行管理使用中的二进制文件列表
实际使用的二进制文件是滚动的,如果我们关掉在启动后。他会默认重新开启一个日志文件加一。
show master status:查看正在使用的日志文件。
二进制日志记录格式:
1)基于语句记录
2)基于行记录模式
3)混合模式让系统自行判定
二进制日志文件的构成
1)日志文件mysql-bin.000###
2)索引文件mysql-bin.index(表示有多少个二进制日志文件)
在mysql的bin目录下有一个课执行程序
mysqlbinlog:查看二进制日志文件
二进制日志事件的格式
at:
#发生的日期和时间
#### ##:##:##
发生的服务器ID
server id #
事件的结束为止
end_log_pos ##
事件的类型
query
事件发生时所在服务器执行此时间的线程ID
thread_id=#
语句在时间戳与将其写入二进制文件中的时间差:exec_time=#(0表示没有)
错误代码
error_code=#
时间内容:
GTID:
global transation ID:全局事务ID号
mysqlbinlog
--start-position=/PATH/TO/BINFILE.000# 显示二进制文件中从#(第一个)开始的内容
--stop-position=#
显示二进制文件内容到#结束
--start-datatime=
--stop-datatime=
时间格式YYYY-MM-DD hh:mm:ss
中继日志:
复制架构中,从服务器用于保存从主服务器的为禁止日志中读取到的事件;
事务日志:transactionlog
事务性存储引擎自行管理和使用
和事务相关的日志我们可以分为两类
1)redo log:
重做日志,如果日志提交了写在事务日志中,我们可以让文件重走一遍同步到数据文件中
2) undo log:
撤销日志,可以把做完或者没做完未提交的日志撤销
恢复和备份基础
注意的要点:
1)能容忍最多丢失的数据
2)恢复数据需要在多长时间内完成
3)需要恢复哪些数据
(如果数据时依赖于配置文件中的某些项那么我们也要连配置文件一起备份)
备注:我们必须要做备份测试和还原演练
备份类型:
1)完全备份:表示整个数据集
2)部分备份:只备份数据子集
从时间轴划分为
1)完全备份:
2)增量备份:上次完全备份后,每次增量的基础上备份的数据
3)差异备份:表示上次完全备份之后所发生的变化的数据
备份的方式
热备份:读写操作均可进行
温备份:读操作可执行,但写操作不能进行
冷备份:必须停止服务才能进行备份
物理备份:直接对数据文件进行备份
逻辑备份:从数据库中导出数据,另存进而来进行备份
备份时,我们需要考虑的因素
1)持锁多久
2)备份时间长短
3)备份负载大小
4)回复的时长
备份什么
1)数据
2)二进制日志
3)innodb的事物日志
4)服务器的配置文件
设计备份方案:
1)从数据集看:完全,增量,差异等
2)备份手段:物理,逻辑
3)时间
4)内容
5)至少保存的备份次数
备份工具
mysqldump:逻辑备份工具,适用于所有存储引擎,支持温备不支持热备:支持完全备份,部分备份:对innodb来讲支持热备
cp、tar等工具:适用于所有引擎,只能做冷备,完全备份部分备份
lvm的快照:可以实现几乎热备,他要借助于文件系统管理工具进行备份
mysqlhotcopy:完全冷备,几乎淘汰
备份工具的选择
1)mysqldump+复制bi nlog:每周或者每多少时间使用mysqldump做一次完 全备份
然后用binlog每天或者每几小时做一次增量或者差异备份
2)lvm2快照使用cp或者tar灯座物理备份,完全备份
复制binlog中指定时间范围的event做增量备份
3)xtrabackup:
支持热备,完全备份和增量备份
mysqldump:实质是通过查询语句发起一个全量查询语句,把所有数据拿到本地然后然存到文件中进行备份。
mysqldump [options] [db_name....]
-A|--all-databases:备份所有库
-B db_name...|--databases db_name...:备份指定的数据库
mysqldump db_name [TB_name]:备份某库中的某表(这个命令不会创建表其他两个恢复备份时可以自动创建表)
mysqldump -u User -pPasswd -b hellodb >/data/hellodb.sql
(表示备份数据库hellodb)
这个命令默认输出到标准输出备份时我们需要用重定向把他放在某文件夹里
myisam:支持温备:锁定备份库,而后启动备份操作
锁定方法:--lock-all-tables锁定全局
--lock-tables
建议如果备份所有表时用all-tables 如果备份单个表时用-tables
一本来讲innodb使用
--single-transaction
来进行开启一个新的大事务备份完成后释放事务
备注:由于速度原因mysqldump一般备份G以下的数据
其他选项:
-E|--events:表示备份指定数据库相关的事件的
-R|--routines:表示备份存储过程及存储函数
--triggers:表示备份表相关的触发器
--master-data=1|2
1表示change master to 此语句默认不注释
2:记录为注释的change master to语句指明读取事件的位置 ,给我们进行参考
--flush-logs:锁定表完成后执行flush logs命令
再备注:二进制文件日志文件不应该与数据文件放在同一磁盘上,
通常我们一般都会放在raid10上
如果有能力,数据,二进制日志和事务日子应该分别放在不同的磁盘上(如果有raid10的话,可以把二进制和事务放在同一个raid上)