MySQL备份方案

mysql数据库的几种备份方案:

一、binlog二进制日志通常作为备份的重要资源,所以再说备份方案之前先总结一下binlog日志

1、binlog日志

1.1、引起mysql服务器改变的任何操作( 增 删 改 没有查)
1.2、复制功能依赖于此日志
1.3、slave服务器通过复制master服务器的二进制日志完成主从复制,在执行之前保存于中继日志(relay log)
1.4、slave服务器通常可以关闭二进制日志以提升性能

2、binlog日志文件的文件表现形式

2.1、默认在安装目录下,存在mysql-bin.00001, mysql-bin.00002的二进制文件(binlog日志文件名依据my.cnf配置中的log-bin参数后面的设置为准)


[root@C7-15 ~]# vim /etc/my.cnf
..................
......
server-id=1            #开启二进制日志需要指定一个server-id
log-bin=mysql-bin      #开启二进制日志

保存

 二进制日志在什么时候会重新生成

[root@C7-15 ~]# systemctl restart mysql   #每次重启就会生成一个
[root@C7-15 ~]# systemctl restart mysql

[root@C7-15 ~]#  cd /usr/local/mysql/data/         
[root@C7-15 data]# ls           
auto.cnf            ib_logfile0         mysql-bin.000001    performance_schema/
gs/                 ib_logfile1         mysql-bin.000002    sys/
ib_buffer_pool      ibtmp1              mysql-bin.index     
ibdata1             mysql/              mysqld_safe.pid     


mysql> flush logs;                 #数据库中刷新日志 也会生成一个新日志
Query OK, 0 rows affected (0.00 sec)

2.2、还有mysql-bin.index用来记录被mysql管理的二进制文件列表
2.3、如果需要删除二进制日志时,切勿直接删除二进制文件,这样会使得mysql管理混乱

3、binlog日志文件查看相关mysql命令

3.1、查看正在使用的二进制文件


mysql> show master status;     
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

3.2、手动滚动二进制日志


mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

滚动以后,mysql重新创建一个新的日志mysql-bin.000004

3.3、显示所有的二进制日志文件


mysql> show binary logs;            
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 |       201 |
| mysql-bin.000003 |       201 |
| mysql-bin.000004 |       154 |
+------------------+-----------+
4 rows in set (0.00 sec)

3.4、 以表的形式查看二进制文件


mysql> show binlog events in 'mysql-bin.000002'\G         
*************************** 1. row ***************************
   Log_name: mysql-bin.000002
        Pos: 4
 Event_type: Format_desc
  Server_id: 1
End_log_pos: 123
       Info: Server ver: 5.7.12-log, Binlog ver: 4
*************************** 2. row ***************************
   Log_name: mysql-bin.000002
        Pos: 123
 Event_type: Previous_gtids
  Server_id: 1
End_log_pos: 154
       Info: 
*************************** 3. row ***************************
   Log_name: mysql-bin.000002
        Pos: 154
 Event_type: Rotate
  Server_id: 1
End_log_pos: 201
       Info: mysql-bin.000003;pos=4
3 rows in set (0.00 sec)

4、删除二进制日志文件

mysql> reset master;
Query OK, 0 rows affected (0.00 sec)

[root@C7-15 ~]# ls /usr/local/mysql/data/ |grep mysql-bin*
mysql-bin.000001
mysql-bin.index

5、MySQL二进制文件读取工具mysqlbinlog

MySQLbinlog日志结构

[root@C7-15 data]# mysqlbinlog mysql-bin.000001
mysqlbinlog: [Warning] option 'start-position': unsigned value 1 adjusted to 4
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#211212 10:47:25 server id 1  end_log_pos 123 CRC32 0x43e3c4b5  Start: binlog v 4, server v 5.7.12-log created 211212 10:47:25 at startup
ROLLBACK/*!*/;
BINLOG '
vWK1YQ8BAAAAdwAAAHsAAAAAAAQANS43LjEyLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAC9YrVhEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AbXE40M=
'/*!*/;
ERROR: Error in Log_event::read_log_event(): 'Event too small', data_len: 0, event_type: 0
ERROR: Could not read entry at offset 39: Error in log format or read error.
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 以上是没有进行操作查询出来的结果

注意: 需自己进行操作创建或删除

 以下是进行删除wwww库后查询结果

[root@C7-15 data]# mysqlbinlog --start-position='378' mysql-bin.000001
............
......
# at 378
#211216  1:38:23 server id 1  end_log_pos 463 CRC32 0xb125d9dd  Query   thread_id=2     
  exec_time=0     error_code=0
SET TIMESTAMP=1639589903/*!*/;
drop database wwww
/*!*/;
............
.....
事件位置 at 378
时间点 211216  1:38:23
服务器ID server id 1
服务器ID主要用于标记日志产生的服务器,主要用于双主模型中,互为主从,确保二进制文件不会被相互循环复制
事件结束位置 end_log_pos也就是下一事件开始的位置 end_log_pos 463
记录类型 Query
线程号 thread_id = 2
语句的时间戳和写入二进制日志文件的时间差 exec_time=0
事件内容 drop database wwww
/*!*/;
错误代码 error_code=0

如果出现乱码原因:可能是隔离级别的原因,默认隔离级别是READ-COMMITTED,所以将隔离修改为REPEATABLE-READ就好了

[root@C7-15 ~]# vim /etc/my.cnf
[mysqld]
.........
.......
...
transaction_isolation = REPEATABLE-READ
binlog_format=MIXED

保存退出

重启mysql    重启后创建或删除都可以查看到

5、二进制日志格式

由 bin_log_format={ statement | row | mixed } 定义

5.1、statement

基于语句,记录生成数据的语句 

缺点:在于如果当时插入信息为函数生成,有可能不同时间点执行结果不一样

5.2、row

 基于行数据

缺点:有时候数据量会过大

5.3、mixed

 混合模式

mysql自行决定何时使用statement, 何时使用row 模式

 5.4、查看当前二进制日志记录格式


mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

  5.5、修改二进制日志记录格式


mysql> set session binlog_format=statement;          #修改二进制记录格式
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)

 注意:5.7之前是statement,5.7之后是基于行的

6、二进制相关参数总结

log_bin = {ON|OFF}

可以是个文件路径,自定义binlog日志文件名,使用“log_bin=“或“log-bin=“都可以,主要用于控制全局binlog的存放位置和是否开启binlog日志功能

比如:log_bin=mysql-bin 或者 log-bin=mysql-bin,这样binlog日志默认会和mysql数据放在同一目录下

log_bin_trust_function_creators 是否记录在
sql_log_bin = {ON|OFF} 会话级别是否关闭binlog, 如果关闭当前会话内的操作将不会记录
sync_binlog 是否马上同步事务类操作到二进制日志中
binlog_format = {statement|row|mixed} 二进制日志的格式,上面单独提到了
max_binlog_cache_size = 二进制日志缓冲空间大小,仅用于缓冲事务类的语句
max_binlog_stmt_cache_size = 语句缓冲,非事务类和事务类共用的空间大小
max_binlog_size = 二进制日志文件上限,超过上限后则滚动

建议:将binlog日志实时备份到远程设备上,以防出现机器故障进行数据恢复;如果存放在一台机器可能数据将无法恢复

二、binlog二进制日志备份和恢复

1、备份数据的重要性:

①、灾难恢复;②、审计,数据库在过去某一个时间点是什么样的;③、测试

2、备份的目的:

①、用于恢复数据;②、备份结束后,需要周期性的做恢复测试

3、备份类型:

根据备份时,MySQL服务器是否在线
冷备(cold backup) 服务器离线,读写操作都不能进行
  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘浪初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值