分类 MYSQL 下的文章

客户误删数据库。删了10来条用户。想办法恢复下。
从数据库删掉的,只能从数据库这边找了。通过活动记录可以关联到删除用户的ID。有了一丝希望,但不多。
没有其他数据做支撑,空有id,啥也不是!

网上查了查,mysql 有binlog, 若开启可记录文件操作,insert,update操作。

-- 查询binlog开启状态
show variables like 'log_%';

使用mysqlbinlog,可以使用 find / -name "mysqlbinlog" 查找这家伙在哪里。
直接全部导出太大 可筛选范围 并将 筛选内容 导出到 /www/0907.sql 这个文件中

/www/server/mysql/bin/mysqlbinlog --start-datetime="2023-09-07 08:00:00" --stop-datetime="2023-09-07 13:59:59" /www/server/data/mysql-bin.000023 -r  /www/0907.sql

然后 就可以搜索到 写入记录 ,再根据之前缺少的ID恢复数据即可。

扩展:
mysqlbinlog /data/mysql_data/bin.000008 --database EpointFrame --base64-output=decode-rows -vv --skip-gtids=true |grep -C 1 -i "delete from Audit_Orga_Specialtype" > /opt/sql.log

/data/mysql_data/bin.000008:需要解析的 binlog 日志。

database:只列出该数据库下的行数据,但无法过滤 Rows_query_event。

base64-output=decode-rows -vv:显示具体 SQL 语句。

skip-gtids=true:忽略 GTID 显示。

grep -C 1 -i "delete from dataex_trigger_record":通过管道命令筛选出所需 SQL 及执行时间。

/opt/sql.log:将结果导入到日志文件,方便查看。
参考:
技术分享 | MySQL binlog 日志解析
mysql查看binlog日志

优化一商城列表搜索页,同事发来一篇文章。嗯,搞。
加权排序类似于加权平均,有所侧重。
在商城中,商品名称,关键词,规格,商品描述等类似于一片片文章。
希望名称,关键词的权重高于描述。找到用户更想查询到的数据。

SELECT
 1 * ( document.w10 + document.w20 + document.w30 ) 
* ( document.w11 + document.w21 + document.w31 ) AS w,
 document.*
FROM
 (
  SELECT
   0,
   CASE WHEN d.abstracts LIKE '%1%' THEN
    2 ELSE 0.1
    END AS w10,
   CASE WHEN d.tags LIKE '%1%' THEN 
    3 ELSE 0.1
    END AS w20,
   CASE WHEN d.NAME LIKE '%1%' THEN
    4 ELSE 0.1
    END AS w30,
   CASE WHEN d.abstracts LIKE '%2%' THEN
    2 ELSE 0.1
    END AS w11,
   CASE WHEN d.tags LIKE '%2%' THEN
    3 ELSE 0.1
    END AS w21,
   CASE WHEN d. NAME LIKE '%2%' THEN
    4 ELSE 0.1
    END AS w31,
   d.*
 FROM
  document d 
) document LEFT JOIN document dd ON document.id = dd.id
 ORDER BY
 w DESC,
 dd.create_time DESC

其上大意为: 有关键词 1, 2 同时搜索。

  • 名字(NAME) 包含 的权重为 4;
  • 标签tag包含的权重为3;
  • 描述babstracts包含的权重为2;
  • 默认权重为0;
    把所有的权重的积做排序,值大的为接近的最为靠前。
    还可做其他方面的权重,例如关键字在标题中位置等权衡顺序。

2014.09.23 mysql 一条sql语句实现实现搜索功能(加权排序)

遇到一个不能为NULL的报错,一个类型为text的字段

MYSQL(5.7.38-log - Source distribution)报错

mysql #1101 - BLOB, TEXT, GEOMETRY or JSON column 'grading' can't have a default value

彻底解决方法

通过修改MySQL的配置文件,如果有sql-model就直接修改成:sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,如果没有则在[mysqld]下加上这句话,之后重启mysql。

临时解决方法 set sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION (只对当前连接有效)

Strict SQL Mode

作用 :

  1. 不为null的字段不能写入null数据。
  2. text字段没有默认值
  3. 自增长的字段不能自定义值

参考文章 >>>