• linux下怎样实现mysql的数据备份及误删除恢复


    安装目录结构

      数据库目录:/var/lib/mysql/ 

      配置文件:/usr/share/mysql(mysql.server命令及配置文件)

      相关命令:/usr/bin(mysqladmin、mysqldump等命令)(*mysql的一种安全启动方式:/usr/bin/mysqld_safe  --user=root &)

    2017-05-03T17:14:56.155066Z 0 [ERROR] InnoDB: .ibdata1 must be writable
    2017-05-03T17:14:56.155066Z 0 [ERROR] InnoDB: The system tablespace must be writable
    2017-05-03T17:14:56.375466Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
    2017-05-03T17:14:56.375466Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
    2017-05-03T17:14:56.375466Z 0 [ERROR] Unknown/unsupported storage engine: InnoDB
    2017-05-03T17:14:56.375466Z 0 [ERROR] Aborting
    ---------------------

    MYSQL没有权限写入.ibdata1文件,使用管理者取得该文件的权限后也没有效果,偶然看到有位大佬的修改方法:

    解决方法:
    1、打开任务管理器终止mysqld进程;
    2、打开mysql安装目录的data文件夹,删除以下2个文件:ib_logfile0和ib_logfile1
    3、重新启动mysql

    原因分析
    MySQL 文件结构
    MySQL文件包括MySQL所建数据库文件和MySQL所用引擎创建的数据库文件。
    .frm 文件与操作系统和数据库引擎无关,都有这么个与表名同名文件。

    MyISAM引擎的文件:

    .myd 即 my data,表数据文件
    .myi 即my index,索引文件
    .log 日志文件。
    InnoDB引擎的文件:

    采用表空间(tablespace)来管理数据,存储表数据和索引,
    InnoDB数据库文件(即InnoDB文件集,ib-file set):
    ibdata1、ibdata2等:系统表空间文件,存储InnoDB系统信息和用户数据库表数据和索引,所有表共用。
    .ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引。
    Redo日志文件: ib_logfile0、ib_logfile1
    ---------------------

    InnoDB 在启动时需要配置LOG File的目录,如果没有制定目录,则会在MySQL Data目录下创建2个日志文件ib_logfile0 and ib_logfile1,在创建的时候需要确保MYSQL拥有对该目录的权限。

    方案解释
    原来的文件不是MYSQL生成,MYSQL 没有相应的权限,但是删除后,后来MYSQL自己新建的文件,能够保持权限???需要验证
    ---------------------

    [root@localhost mysql]# service mysqld start
    Starting mysqld: [ OK ]

    连接数据库:

    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    service mysqld stop

    Go to mysql/bin directory(到该目录下)

    $ cd /usr/bin
    

    Start a mysql deamon with this option:

    $ sudo mysqld_safe --skip-grant-tables
    

    Open another terminal and open a mysql session to execute this: (再开启一个terminal : 快捷键 command + t)

    $ mysql
    
    mysql> use mysql;
    
    see Note1 below for next line.
    mysql> UPDATE user SET authentication_string=PASSWORD('YOUR_NEW_PASSWORD_HERE') WHERE user = 'root';   //蓝色的就是你要输入的新密码

    # mysql -u root mysql

      mysql> delete from user where USER='';

      mysql> FLUSH PRIVILEGES;  //记得要这句话,否则如果关闭先前的终端,又会出现原来的错误

      mysql> q

    
    
    mysql> exit;
    

    Now kill the mysqld_safe process and restart mysqld normally:

    $ service mysqld start


    执行

    mysql> show variables;
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

    执行如下就能解决:

    mysql> alter user 'root'@localhost identified by 'root';
    Query OK, 0 rows affected (0.00 sec)

    查阅资料后才知道,原来是Password Expiration Policy搞的鬼,自从5.7.4版本后就有了这么一个东西(详情参考最后的参考网站)。

     
  • 相关阅读:
    C语言 · 最小公倍数
    SSH实战 · SSH项目开发环境搭建
    C语言 · 回文数
    C语言 · 特殊回文数
    C语言 · 查找整数
    SSH实战 · SSH项目中怎么玩验证码
    SSH实战 · JAVA发送邮件相关
    SSH实战 · AJAX异步校验
    C语言 · 打印1-200之间的素数
    Jenkins权限设计错误解决办法
  • 原文地址:https://www.cnblogs.com/txmg/p/11134319.html
Copyright © 2020-2023  润新知