mysql备份:
三种备份方式
冷备:数据库停机,在进行备份
热备:lock table锁表,read 数据库只可以读不能写,在备份
温备:备份时数据库正常运行
备份类型:完整备份:全部备份,部分备份也是完整备份的一个分支,一般用于单独备份某一个数据库而不是备份整个数据库。
差异备份:跟上一次完整备份以后的变化的数据
mysql的物理备份和逻辑备份
物理备份:cp tar rsync等是冷备,需要停机去备份
逻辑备份:mysqldump mysql协议去mysql server查询数据,在通过mysql语句导出数据
完整备份需要备份哪些数据?
/var/lib/mysql binlog /etc/my.cnf tomcat 重启脚本 二进制日志,innodb事务日志,用户账号,权限,程序代码
MyISAM不支持热备份,温备份
InnoDB都支持
一般备份的话需要备份什么?
数据,二进制日志,innodb事务日志,用户账号,权限,程序代码,服务器配置文件
备份工具:
cp tar rsync lv等复制归档工具,这是物理备份工具,适用于所有的存储引擎,只支持冷备份,完全备份和部分备份
MyIASM适用于所有存储引擎,是温备份
InnoDB热备份,结合binlog增量备份
mysqlbackup热备份
二进制日志
概念:记录导致数据库数据改变的SQL语句,能恢复任何节点的数据
功能:通过重放,在另一个数据库生成数据副本,一般二进制日志和数据需要分开存放
二进制日志目录存放位置:/var/lib/mysql,看到有log-bin.00000这种格式就是二进制日志文件,如果需要打开查看,需要使用mysqlbinlog +日志名
查看二进制日志是否开启:
mysql> show variables like ‘%bin‘ -> ; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | OFF | | sql_log_bin | ON | +---------------+-------+ off就是没开启
如何开启二进制日志文件的方法,配置完重启服务,要关闭防火墙和SELINUX
(1)修改配置文件/etc/my.cnf
log-bin=二进制日志文件名
server-id=1 #1开启二进制日志,0关闭二进制
二进制日志记录的三种方式
格式1:statement 记录语句方式,日志量少
格式2:row 以行的形式记录数据,日志量较大 ,更加安全
混合:mixed 让系统自行判定使用哪个方式记录
二进制日志文件构成
1.日志文件log-bin.00000二进制格式
2.日志索引文件 log-bin.index
查看有几个binlog日志文件的两种方法:
(1)查看/var/lib/mysql
(2)show binary logs;
mysql> show binary logs; +----------------+-----------+ | Log_name | File_size | +----------------+-----------+ | log-bin.000001 | 333 | | log-bin.000002 | 154 | +----------------+-----------+
查看当前正在使用的binlog文件:show master status;
mysql> show master status; +----------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +----------------+----------+--------------+------------------+-------------------+ | log-bin.000003 | 310 | | | | +----------------+----------+--------------+------------------+-------------------+
查看某一个pos点的binlog文件表结构:
mysql> show binlog events in ‘log-bin.000003‘from 154\G; *************************** 1. row *************************** Log_name: log-bin.000003 Pos: 154 Event_type: Anonymous_Gtid Server_id: 1 End_log_pos: 219 Info: SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘ *************************** 2. row *************************** Log_name: log-bin.000003 Pos: 219 Event_type: Query Server_id: 1 End_log_pos: 310 Info: create database db2 2 rows in set (0.00 sec)
怎么生成新的二进制日志:
(1)刷新日志:flush logs
(2)重启mysql服务
怎么删除所有二进制日志文件:flush master;
查看二进制日志文件内容:格式:mysqlbinlog 二进制日志文件名
[root@server mysqlbin]# mysqlbinlog log-bin.000002
删除某个日志之前的所有日志:
mysql> show binary logs; +----------------+-----------+ | Log_name | File_size | +----------------+-----------+ | log-bin.000001 | 333 | | log-bin.000002 | 199 | | log-bin.000003 | 310 | +----------------+-----------+ 3 rows in set (0.00 sec) mysql> purge binary logs to ‘log-bin.000002‘; #删除00002之前的日志,也就是删除0001的 Query OK, 0 rows affected (0.00 sec) mysql> show binary logs; +----------------+-----------+ | Log_name | File_size | +----------------+-----------+ | log-bin.000002 | 199 | | log-bin.000003 | 310 | +----------------+-----------+ 2 rows in set (0.00 sec)
二进制日志文件怎么恢复:
两种恢复方式:
(1)使用时间点恢复:通常在还原物理备份或者mysqldump备份后,用于还原至备份时的数据
(2)使用事件SID恢复:一般用于还原误操作
要还原二进制日志必须知道当前正在使用的二进制日志文件名和当前事件的位置mysql --logbin-path=master_local