上班
周一和往常一样, 带着上坟的心情来上班, 半路上同事打来电话说数据库被删除了。我说肯定是你连错数据库了吧。到公司一看,确实所有数据库都不见了,且给留了一个表,表里是勒索信息。说你要支付0.3个比特币,才能下载数据,否则你的数据将被永久删除,将在暗网上售卖。
恶心!!! 自己数据库没做备份,大部分数据开始丢失了。
1, 尝试恢复数据。查看是否开启了日志。
show variables like 'log_%';
log_bin | ON
开启了。
show master logs; 开到日志文件
mysql-bin.000005 | 120084911
这孙子应该是只黑了mysql的root, 而不是ssh的root黑进来的。
查看mysql配置文件。
expire_logs_days = 10
这个日志只存了最近十天的操作记录,操蛋,只能恢复最近十天的数据。
导出日志sql
/www/server/mysql/bin/mysqlbinlog /home/mysqlDb/mysql-bin.000162 >> 162.sql
只要插入或更新内容, 可以
/www/server/mysql/bin/mysqlbinlog /home/mysqlDb/mysql-bin.000162|grep INSERT>>aaa.sql
执行sql 注意语句 用 mysqldump是错误的
一般速度很快, sql不是太大后面不用加 & , 挂起符号
mysql -uroot -p'密码' -P3306 -f < /home/software/test.sql &
-f是跳过sql错误, <前面也可以指定库名, 例如
mysql -uroot -p'密码' -P3306 -f databaseName < /home/software/test.sql &
做好数据备份 这里专门写了一个python3脚本方便备份数据库
# 备份数据库脚本
import os
import datetime
# 备份文件地址
theDir = "/home/ddddddd"
# 数据库密码 root超级用户
pas = "aadfdfdfdfdadfdewgdfasfsfasdfewgasfsfasfasdf"
# 数据库名 ["database1", "database2"]
dbNameList = ['database1']
# 保存几天 只保存最近SaveDays的天数
SaveDays = 15
nowTime = datetime.datetime.now().strftime('%Y-%m-%d')
OldTime = (datetime.date.today() - datetime.timedelta(days=SaveDays)).strftime("%Y-%m-%d")
for dbName in dbNameList:
# 新生成文件名
fileName = nowTime + "-" + dbName + ".sql"
# 老文件名
oldFileName = OldTime + "-" + dbName + ".sql"
val = os.system("cd " + theDir + " && mysqldump -uroot -p'" + pas + "' --databases " + dbName + " > " + fileName)
# 老文件存在,删除
oldFilePath = theDir + "/" + oldFileName
if os.path.isfile(oldFilePath):
os.system("rm -rf " + oldFilePath)
exit()
密码和数据库都是假的。
%, 如果有立即关闭, 设置成localhost
安全, 不要背锅
mysql建立超管。 我的mysql库的root表也遭到了破坏,新建立一个用户。或, 直接清空user表,重新生成记录。
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
grant all privileges on *.* to 'username'@'%' ;
CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';
grant all privileges on *.* to 'username'@'localhost' ;
# 刷新
flush privileges;
注意%就是不限制ip,可以远程连接。
听说他们有个常用密码箱, 把黑市上所有常用密码存起来,不断重试。
还有redis开了远程连接一定要设置密码, 密码也要足够长。