标签 mysql 下的文章

xampp - incorrect file format 'db' - repair table db use_frm

现象:xampp 中的 mysql 服务不能成功启动。日志中有如:Fatal error: Can't open and lock privilege tables: incorrect file format 'db' 的错误。

尝试:

  1. mysqld --skip-grant-tables # 手工启动,且跳过权限表
  2. repair table db use_frm; # 连接到 mysql 命令台,对 mysql 库的 db 表进行修复

如果返回修复成功的提示信息,再关闭 mysql 服务。重新正常启动。

参考:

当 mysql 服务因内存不足被系统强制退出后,自动再启动

问题:有个VPS,站点在某些时间段可能被爬虫频繁访问导致mysql服务自动退出,隔天就要人工启动mysql服务,恢复站点可访问状态。

尝试:可以写个定时执行的任务,检测mysql服务是否运行,如没有运行,就启动之。

如脚本 /root/mysqlmon.sh 的内容:

#!/bin/bash

# Check if MySQL is running
/sbin/service mysqld status > /dev/null 2>&1

# Restart the MySQL service if it's not running.
if [ $? != 0 ]; then
    echo -e "MySQL Service was down. Restarting now...\n"
    /sbin/service mysqld restart
else
    echo -e "MySQL Service is running already. Nothing to do here.\n"
fi

定时任务内容(每隔15分钟检查服务状态):
*/15 * * * * /root/mysqlmon.sh > /dev/null 2>&1

在centos7中,可查看 /var/log/cron 日志内容,查看任务执行的历史记录。

参考:https://devanswers.co/how-to-auto-restart-a-crashed-mysql-service-with-cron/

尝试用binlog还原mysql数据库数据

问题:无mysql数据库完整备份,但binlog齐全。想还原到指定时间的数据状态。

尝试:

  1. 先用mysqldump备份当前的数据,和将binlog文件复制到另外的路径
  2. 用mysqlbinlog查看各binlog的内容,估计出数据库是在什么时候创建的,存在哪(几)个binlog文件
  3. 从binlog中导出指定数据库到指定时间的所有查询,如

    mysqlbinlog --database=anqun --stop-datetime="2021-01-15 14:52:00" mysql-bin.000001 > anqun.sql
    mysqlbinlog --database=anqun --stop-datetime="2021-01-15 14:52:00" mysql-bin.000002 >> anqun.sql
    ...
  4. 然后在测试机里,将anqun.sql导入到mysql数据库里,验证数据。如果导入时提示 Duplicate entry '' for key 'PRIMARY' 之类的错误sql语句,可以用mysql带-f的参数跳过(忽略)

参考:

mysql - reading initial communication packet - password hash should be a 41-digit hexadecimal number

现象:在苹果电脑上的xampp,访问phpmyadmin时提示错误,错误信息如:reading initial communication packet password hash should be a 41-digit hexadecimal number。

尝试:在my.cnf文件里添加 skip-grant-tables 后重启mysql,再登录到mysql,通过 UPDATE user SET Password = PASSWORD('newpwd') WHERE Host = 'localhost' AND User = 'root'; 来重置root用户的密码。

参考: