zoukankan      html  css  js  c++  java
  • mysql问题记录

    这篇文章是原来的《记一次mysql故障处理》,但是随着mysql问题越来越多,我感觉还是集合到一篇里面比较好,也方便之后问题复现的查找

    一、记一次mysql故障处理

    最近遇到的问题还是有点多的,所以遇到问题就记录一下以免以后忘记了怎么解决

    mysql版本5.7,centos环境,无法正常启动服务,提示

    2021-06-10T08:18:06.378567Z 0 [ERROR] InnoDB: Trying to access page number 4294967295 in space 0, space name innodb_system, which is outside the tablespace bounds. Byte offset 0, len 16384, i/o type read. I
    f you get this error at mysqld startup, please check that your my.cnf matches the ibdata files that you have in the MySQL server.
    

    找了一圈不清楚哪出的问题,因为数据库只是开发环境所以直接重置数据文件

    rm -rf /var/lib/mysql/*
    

    如果是生产环境则不能这么简单粗暴,先配置

    /etc/my.cnf加入innodb_force_recovery=X行
    X为0-6数字
    0正常运行mysql
    1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
    2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
    3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
    4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
    5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
    6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。
    

    数字越大跳过的mysql项就越多,跳过内容向下兼容,本次的mysql直到5才可以正常启动,启动后就可以正常运行服务

    当设置innodb_force_recovery参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作
    

    然后进行备份

    mysqldump -uroot -p --all-databases> back.sql
    

    再执行上面的重置数据文件

    rm -rf /var/lib/mysql/*
    

    之后进入my.cnf取消删除innodb_force_recovery行,重启mysql服务

    以下操作么有经过检验:

    重新执行MySQL的安全脚本mysql_secure_installation,设置root登录密码,然后登录MySQL进行数据库的恢复。

    source back.sql(备份文件的绝对路径);
    

    mysql忘记密码(version 5.7)

    在 /etc/my.cnf 【mysql】模块下最后加入skip-grant-tables=1就可以直接使用mysql -uroot 登录,之后进行密码修改操作

    mysql创建用户、密码

    set global validate_password_policy=0;
    set global validate_password_length=1;
    ALTER USER 'root'@'%' IDENTIFIED BY 'comleader@123';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'comleader@123' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    use mysql
    CREATE USER 'cmpadmin'@'%'  IDENTIFIED BY 'comleader@123';
    GRANT ALL PRIVILEGES ON *.* TO 'cmpadmin'@'%' IDENTIFIED BY 'comleader@123' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

    二、mysql更改默认字符集

    https://www.cnblogs.com/xingyunblog/p/3836299.html

    三、Mysq加固

    1、删除匿名用户

    查看
    select distinct user from mysql.user;
    是否有user为空,没有则没问题
    

    2、配置日志

    1. 错误日志
    2. 查询日志
    3. 慢查询日志
    4. 二进制日志
    5. 更新日志

    以上所有配置

    在/etc/my.cnf中加入以下几行(已经有的行替换掉)
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    general-log
    slow-query-log
    log-bin
    server-id=1
    其中‘更新日志’没有查到此项配置
    

    3、禁止管理员账号权限运行mysql

    use mysql
    select host,user from user;
    查看用户root 是否有host为%的,如果有:
    Delete FROM user Where User='root' and Host='%';
    flush privileges;
    

    四、mysql 重新初始化

    这里的命令是已经过期的不过还能用,新的命令还不知道格式
    问题:经过一阵断电后,虚拟机mysql出现问题,无法正常打开,按照一种的步骤也无法恢复,此时采用重新手动初始化数据库方法~
    /usr/bin/mysql_install_db --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
    
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 有任何问题请随时交流~ Email: araise1@163.com
  • 相关阅读:
    vue中常用的属性标签
    Vue 基本简介
    ES6 Map 和 WeakMap
    ES6 set/weakset
    ES6 generator生成器函数 async
    ES6 promise对象
    信息论-熵-随机变量-泛函
    机器学习一
    RS-232接口
    图的存储结构
  • 原文地址:https://www.cnblogs.com/seasen/p/14893419.html
Copyright © 2011-2022 走看看