宝塔mysql恢复数据binlog提取sql,拯救int类型存手机号的问题
这天开发H5的时候脑子一抽,用int类型来存手机号,这样字段会小很多才对!想着想着就为自己的机智点赞!

然后眼瞎一直没发现手机号码不对,直到活动结束导出数据才发现手机号不对,一查int最大值是2147483647,只有10位数,手机号是没法存的。

然后就是想办法恢复数据了
接口是post存的数据,nginx日志没用,只有从Mysql Binlog恢复了,还好宝塔是默认开启binlog的。
1、找到mysql的二进制日志binlog目录
2、根据你需要的数据日期确定binlog是哪几个文件,然后执行下面的命令转成sql文件

我的只需要指定数据库名字就行了,也可以加上开始结束时间指定下日期更精准 --start-datetime="2022-12-09 00:00:00" --stop-datetime="2022-12-14 23:59:59" ,具体可谷歌搜下mysqlbinlog命令
看到有INSERT INTO写入记录就放心了

3、本来是有命令直接输出sql并导入到数据库,但是我怕搞出问题,就把生成的sql文件下载到本地,在本地恢复数据库
生成的sql文件使用Navicat Preminum导入的时候会报错,这里我使用的是本地的phpstudy导入的

遇到报错会返回第几行,然后定位到那里解决就好了。

然后眼瞎一直没发现手机号码不对,直到活动结束导出数据才发现手机号不对,一查int最大值是2147483647,只有10位数,手机号是没法存的。

然后就是想办法恢复数据了
接口是post存的数据,nginx日志没用,只有从Mysql Binlog恢复了,还好宝塔是默认开启binlog的。
1、找到mysql的二进制日志binlog目录
cd /www/server/data
2、根据你需要的数据日期确定binlog是哪几个文件,然后执行下面的命令转成sql文件

#database指定需要的数据库名,然后因为我的有多个文件,就输出日志的名字.sql /www/server/mysql/bin/mysqlbinlog --database=h5case /www/server/data/mysql-bin.000456 > output000456.sql
我的只需要指定数据库名字就行了,也可以加上开始结束时间指定下日期更精准 --start-datetime="2022-12-09 00:00:00" --stop-datetime="2022-12-14 23:59:59" ,具体可谷歌搜下mysqlbinlog命令
看到有INSERT INTO写入记录就放心了

3、本来是有命令直接输出sql并导入到数据库,但是我怕搞出问题,就把生成的sql文件下载到本地,在本地恢复数据库
生成的sql文件使用Navicat Preminum导入的时候会报错,这里我使用的是本地的phpstudy导入的

遇到报错会返回第几行,然后定位到那里解决就好了。
发表评论