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版本后就有了這么一個東西(詳情參考最后的參考網站)。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM