mysql日志是mysql的重要组成部分,用来记录再使用mysql的过程当中的各类信息,其中包括事务日志,错误日志,通用日志,满查询日志和二进制日志等mysql
mysql事务在写入硬盘以前会先写入内存,再以顺序io写入事务日志中,最后再将事务日志写入硬盘(随机io),以此来防止数据的不一致性,同时提升存储的速度。事务日志通常为两组,且同数据文件分开存储。使用事务日志,存储引擎在修改表的数据时只须要修改其内存拷贝,再把改修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据自己持久到磁盘。sql
MariaDB [(none)]> show global variables like 'innodb_%log%'; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 9 Current database: *** NONE *** +-------------------------------------------+---------+ | Variable_name | Value | +-------------------------------------------+---------+ | innodb_flush_log_at_trx_commit | 1 | | innodb_locks_unsafe_for_binlog | OFF | | innodb_log_block_size | 512 | | innodb_log_buffer_size | 8388608 | | innodb_log_file_size | 5242880 |//一个事务日志组的大小,默认为5M | innodb_log_files_in_group | 2 |//事务日志组数 | innodb_log_group_home_dir | ./ |//事务日志的存放位置(./在此处表示数据文件的存放位置,通常不建议将事务日志同数据文件一块儿存放) | innodb_mirrored_log_groups | 1 |//1表示对事务日志组作镜像 +-------------------------------------------+---------+
记录数据库服务的运行信息,通常用于数据库服务排错,默认开启数据库
MariaDB [(none)]> show global variables like '%log%_error'; +---------------+------------------------------+ | Variable_name | Value | +---------------+------------------------------+ | log_error | /var/log/mariadb/mariadb.log |//错误日志的存放位置 +---------------+------------------------------+
通用日志会记录数据库的全部操做,其中包括错误的mysql语句,会大量增长数据库负担通常不开启,默认关闭vim
MariaDB [(none)]> show global variables like 'general_log%'; +------------------+-------------+ | Variable_name | Value | +------------------+-------------+ | general_log | OFF |//off为通用日志关闭,on为开启 | general_log_file | centos7.log |//通用日志的存储位置(同数据库的数据文件位置) +------------------+-------------+
用来记录执行查询超时或者屡次索引的操做,记录这些操做的时间,经常使用来优化数据库,默认开启centos
MariaDB [(none)]> show global variables like 'slow_query_log%'; +---------------------+------------------+ | Variable_name | Value | +---------------------+------------------+ | slow_query_log | ON |//on为慢查询开启,off为关闭 | slow_query_log_file | centos7-slow.log |//慢查询日志存放位置(同数据库的数据文件位置) +---------------------+------------------+
二进制日志用于记录全部已提交的更改数据的操做,其记录了语句发生时间、执行时长、操做的数据等等,经常使用于数据库备份,通常建议二进制日志和数据文件分开存储安全
二进制日志有两种记录格式,记录语句和记录行,默认为记录语句,记录行占用空间大可是更加安全,默认一个二进制日志文件的大小为1G,二进制文件的前245字节均用来记录当前数据库的版本号。服务器
MariaDB [(none)]> show global variables like '%log_bin%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin | OFF |//二进制日志文件存储位置,off为关闭 | log_bin_trust_function_creators | OFF | | sql_log_bin | ON |//on为二进制日志开启,off为关闭 +---------------------------------+-------+
二进制日志是默认开启的,可是其存储位置默认没有,因此至关于不开启这个功能,但咱们能够自定义其存储位置session
vim /etc/my.cnfapp
log_bin=目录/文件名函数
而后给予这个目录即对应文件mysql的读写权限便可
flush log ; 开启新的日志
show binary logs; 查询全部二进制日志列表
show master logs; 查询全部二进制日志列表
show master status; 查询当前二进制日志状态
show binlog events in‘二进制日志文件’; 查看某一二进制文件
show binlog events in ‘二进制日志文件’from n ;查看某一二进制日志文件n位置后的部分
purge binary logs to ‘二进制日志文件’; 清空某二进制日志文件以前的二进制日志文件
reset master ;重置(清空) 二进制日志文件
mysqlbinlog --start-position=n --stop-position=m 二进制日志文件;只查看n到m的二进制日志文件
show binlog events in ‘二进制日志文件’from n limit a,b ;查看部分二进制日志文件
备份能够从不一样的角度能够分类为逻辑备份,物理备份和冷备份,温备份,热备份,在mysql中咱们主要使用mysqldump和xtrabackup这两个工具
逻辑备份和物理备份
逻辑备份中是对数据库的操做,恢复时只需执行这些语句便可
物理备份则是直接记录数据库的数据,占用空间较多,但速度较快
冷备份,温备份和热备份
冷备份在备份时不可读写
温备份在备份时可读但不可写
热备份在备份时可读可写
mysql有其专门的备份工具mysqldump,属于逻辑备份,能够经过事务功能轻易的实现热备份。虽然在备份时咱们须要让数据库暂时保持静止,即数据不被修改,可是mysql拥有事务功能可让备份时产生幻读。
mysqldump
-A 备份全部数据库
-B db_name 备份指定数据库
-R 备份全部存储过程和自定义函数
--trigger 备份触发器(默认开启)
--skip-trigger 不备份触发器
--master-data[=n] 此选项须启用二进制日志 n=1:所备份的数据以前加一条记录,为CHANGE MASTER TO语句用于获取二进制日志文件的位置和名称,默认为1;n=2:记录为注释的CHANGE MASTER TO语句,此选项会自动关闭--lock-tables功能(除非开启--single-transaction)
-F 锁定表而且前滚动日志
--single-transaction 利用事务功能让备份时产生幻读,即在一个事务中读到的数据为暂时静止的状态(在开始的时候把该session的事务隔离级别设置成repeatable read;而后启动一个事务,备份结束的时候结束该事务有了这两个操做,在备份过程当中,该session读到的数据都是启动备份时的数据。能够理解为对于innodb引擎来讲加了该参数,备份开始时就已经把要备份的数据定下来了,备份过程当中的提交的事务时是看不到的,也不会备份进去。)
通常咱们用mysqldump -A -F -R --single-transaction --master-data >bank.sql 便可完整热备份数据库到bank.sql文件中,bank.sql是咱们导入的文件名,能够自定义
直接将咱们的备份文件导入mysql便可
xtrabackup是mysql的一个备份工具,属于物理备份,它读取innodb数据来进行数据备份的,支持热备,增量备份和差量备份。xtrabackup 是用来备份 innodb 表的,不能备份非 innodb 表,和 mysql Server 没有交互。
xtrabackup的备份分为彻底备份和增量备份,彻底备份是拷贝全部文件,而增量备份则是基于以前的备份只备份修改的数据
innobackupex /目录
命令加目录便可将数据库彻底备份到咱们指定的目录下,文件名为当前日期
innobackupex --incremental 路径 --incremental-basedir=路径
--incremental指定这是增量备份
第一个目录是咱们的存储目录
第二个目录为咱们基于这个目录所作的增量目录
1.将备份拷贝至要进行还原操做的主机上
2.同步日志 innobackupex --apply-log 备份的文件
--apply-log 在数据库备份好后,这些备份的数据并不能当即用于恢复,由于这些刚备份的数据里包含了未提交的数据,须要回滚,也包括的已完成的事务在重作日志文件中并无写入数据文件中,这些数据须要重作,这个参数正是用于作这些事情,以保证数据 文件的一致性,在数据库恢复以前,须先对备份的数据文件应用此参数(innobackup会重现重作日志文件中的事务条目,重作已经提交的事务和回滚未提交的事务)
3.保证数据目录为空,mysql服务中止
4.恢复数据 innobackupex --copy-back 备份文件
5.将恢复的文件修改所属人,所属组并修改其权限,使mysql对其可读写,重启mysql
1.将全部备份拷贝到要进行还原操做的主机上
2.同步日志,由于是增量,因此咱们每一次增量都须要进行一次同步,将增量合并到全量备份中
对彻底备份和最后一个增量备份以前的增量备份进行以下操做
innobackupex --apply-log --redo-only 备份文件
--redo-only 在作增量恢复时,全备和增量备份的数据文件在恢复前必须先将在重作日志文件中的已提交的事务重作,此参数将会合并全备和增量备份的数据文件,让xtrabackup跳过 rollback 阶段,只进行redo 阶段,若是增量备份中含有rollback可能致使
增量备份没法衔接
对最后一个备份进行以下操做
innobackupex --apply-log 备份文件
3.保证数据目录为空,mysql服务中止
4.恢复数据 innobackupex --copy-back 整合后的全量备份文件
5.将恢复的文件修改所属人,所属组并修改其权限,使mysql对其可读写
XtraBackup优势 :
一、无需中止数据库进行InnoDB热备二、增量备份MySQL三、流压缩到传输到其它服务器四、能比较容易地建立主从同步五、备份MySQL时不会增大服务器负载