linux mysql 误删系统文件_linux下怎样实现mysql的数据备份及误删除恢复

安装目录结构

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

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

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

5bf0f8759b0cacded94de7f8f9363f7f.png

7287929587e07ce7a69d25db5f905a8e.png

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版本后就有了这么一个东西(详情参考最后的参考网站)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值