安裝目錄結構
數據庫目錄:/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版本后就有了這么一個東西(詳情參考最后的參考網站)。