ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

使用binlog对mysql进行数据恢复或迁移

2022-06-28 16:35:22  阅读:160  来源: 互联网

标签:bin binlog log 数据恢复 mysql mysqlbinlog data


目录

一,数据迁移

A数据库的数据迁移到B数据库
以前的方式通常是导出数据的sql文件,再导入,或备份文件,恢复备份,这里使用binlog文件恢复数据库

1,使用binlog恢复

获取MySQL binlog的日志位置

查看/etc/my.cnf文件,dataDir指定的路径就是binlog的日志位置

进入mysql,执行命令查看binlog是否开启

mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------+
| Variable_name                   | Value                    |
+---------------------------------+--------------------------+
| log_bin                         | ON                       |
| log_bin_basename                | /data/mysql/binlog       |
| log_bin_index                   | /data/mysql/binlog.index |
| log_bin_trust_function_creators | OFF                      |
| log_bin_use_v1_row_events       | OFF                      |
| sql_log_bin                     | ON                       |
+---------------------------------+--------------------------+

可以看到 log_bin 已经开启, 同时可以看到存储的位置在 /daba/mysql 目录 , 前缀是 binlog

ls /data/mysql/binlog.*
/data/mysql/binlog.000143  /data/mysql/binlog.000144  /data/mysql/binlog.000145  /data/mysql/binlog.000146  /data/mysql/binlog.index
# 查看所有binlog日志列表
show master logs;
# 查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值
show master status;
# 为了防止干扰,我们flush刷新log日志,自此刻开始产生一个新编号的binlog日志文件
flush logs;
# 找到mysqlbinlog的位置
which mysqlbinlog
# 切换到binlog存放位置 通过mysqlbinlog -v 恢复文件
# 文件的全部范围(文件过大不宜执行,可将结果转成文件,或者用下面的两种办法)
/usr/bin/mysqlbinlog -v mysql-bin.000013
# 指定位置范围
/usr/bin/mysqlbinlog -v mysql-bin.000013 --start-position=0 --stop-position=986
# 指定时间范围
/usr/bin/mysqlbinlog -v mysql-bin.000013 --start-datetime="2021-06-01 03:18:00" 

总结

  • 执行建表语句时,要在前面加上DROP TABLE IF EXISTS这个,保证数据库中即使存在同名表也能正常执行
  • 打算做恢复时,执行flush logs,以防止被干扰;
  • binlog恢复前,确保数据库表结构一致
  • 细心查找需要恢复的position位置

如果没有开启bin_log,只有直接拷贝数据文件的办法了。

2,直接拷贝数据文件恢复

A:源mysql
B:目标mysql

进入B数据库,查看mysql的安装路径

show global variables;
show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)

找到对应表数据文件路径

这里为了备份,把B数据库的所有数据文件打包存起来即可,然后删除所有文件

tar -cvf digitaltwins.tar digitaltwins/
rm -rf digitaltwins/

再把A数据库的所有数据文件拷贝过来(用scp直接分发)就可以了

scp -r digitaltwins.tar root@192.168.1.181:/var/lib/mysql

标签:bin,binlog,log,数据恢复,mysql,mysqlbinlog,data
来源: https://www.cnblogs.com/fantongxue/p/16419965.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有