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

 
原文地址:https://www.cnblogs.com/txmg/p/11134319.html