标签: msyql
宝塔默认开启了mysql bin log日志,通过mysqlbinlog 命令可以恢复任意时间点的数据。
以下步骤首先需要自己确认开启了binlog日志,或者通过宝塔安装的mysql数据库默认开启,否则无法适用以下方法。
提示 :先备份好所有数据库,再开始恢复操作,避免悲剧再次发生。
一、找end position
先找到误操作的点,通过大概时间查找出误操作的日志, 比如我这里记得大概是昨天11点到12点误操作的
./mysqlbinlog --start-datetime="2021-01-18 11:30:00" --stop-datetime="2021-01-18 12:30:00" /www/server/data/mysql-bin.000002 > end.log
打开end.log
#210118 12:02:21 server id 1 end_log_pos 240949453 CRC32 0xbda09d2a Query thread_id=101814 exec_time=4 error_code=0
use `alo_core`/*!*/;
SET TIMESTAMP=1610942541/*!*/;
SET @@session.time_zone='SYSTEM'/*!*/;
ALTER TABLE `alo_core`.`ks_zalo_user`
MODIFY COLUMN `login_info` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `zpw_enk`,
MODIFY COLUMN `cookie` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `login_info
找到误操作之前一个的end position 240949453
二、找start position
找到要恢复的数据起始的时间,比如想恢复1-4号以后的
./mysqlbinlog --start-datetime="2021-01-04 10:30:00" --stop-datetime="2021-01-04 11:30:00" /www/server/data/mysql-bin.000002 > start.log
#210104 10:12:01 server id 1 end_log_pos 75396045 CRC32 0x4d04d34c Query thread_id=57365 exec_time=0 error_code=0
找到第一个的end_log_pos即为开始的postion
三、恢复指定数据库从start position - end position所有的数据。-d 指定数据库
(*注意:如果数据有冲突,需要自己先把表清空或者把重复的数据先删除掉,再做恢复。)
./mysqlbinlog --start-position=75396045 --stop-position=240949453 -d alo_core /www/server/data/mysql-bin.000002|mysql -uroot -p密码 alo_core