mysql資料庫恢復遇到的問題,資料庫故障如何恢復

本文目錄一覽:

我把linux下的mysql文件夾拷貝了下來,想在另一台linux下的mysql上恢複數據,多個資料庫文件,出現1146錯誤

項目上 MySQL 還原 SQL 備份經常會碰到一個錯誤如下,且通常出現在導入視圖、函數、存儲過程、事件等對象時,其根本原因就是因為導入時所用賬號並不具有SUPER 許可權,所以無法創建其他賬號的所屬對象。ERROR 1227 (42000) : Access denied; you need (at least one of) the SUPER privilege(s) for this operation常見場景:1. 還原 RDS 時經常出現,因為 RDS 不提供 SUPER 許可權;2. 由開發庫還原到項目現場,賬號許可權等有所不同。

處理方式:

1. 在原庫中批量修改對象所有者為導入賬號或修改 SQL SECURITY 為 Invoker;2. 使用 mysqldump 導出備份,然後將 SQL 文件中的對象所有者替換為導入賬號。

二、問題原因我們先來看下為啥會出現這個報錯,那就得說下 MySQL 中一個很特別的許可權控制機制,像視圖、函數、存儲過程、觸發器等這些數據對象會存在一個 DEFINER 和一個 SQL SECURITY 的屬性,如下所示:

–視圖定義CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`%` SQL SECURITY DEFINER VIEW v_test

–函數定義CREATE DEFINER=`root`@`%` FUNCTION `f_test()` RETURNS varchar(100) SQL SECURITY DEFINER

–存儲過程定義CREATE DEFINER=`root`@`%` PROCEDURE `p_test`() SQL SECURITY DEFINER

–觸發器定義CREATE DEFINER=`root`@`%` trigger t_test

–事件定義CREATE DEFINER=`root`@`%` EVENT `e_test`

DEFINER:對象定義者,在創建對象時可以手動指定用戶,不指定的話默認為當前連接用戶;

SQL SECURITY:指明以誰的許可權來執行該對象,有兩個選項,一個為 DEFINER,一個為 INVOKER,默認情況下系統指定為 DEFINER;DEFINER:表示按定義者的許可權來執行; INVOKER:表示按調用者的許可權來執行。

如果導入賬號具有 SUPER 許可權,即使對象的所有者賬號不存在,也可以導入成功,但是在查詢對象時,如果對象的 SQL SECURITY 為 DEFINER,則會報賬號不存在的報錯。ERROR 1449 (HY000): The user specified as a definer (‘root’@’%’) does not exist

改寫好處:1. 可以避免還原時遇到 DEFINER 報錯相關問題;2. 根據輸出信息知道備份是否正常進行,防止備份中遇到元數據鎖無法獲取然後一直卡住的情況。

怎麼恢復mysql資料庫

mysql資料庫恢復方法:

方法一:

命令恢復資料庫:

mysql -u root –password=root密碼 資料庫名 備份文件.sql

方法二:

第一步:用管理員許可權登錄並進入後台管理界面,點「資料庫-資料恢復」。

第二步:在數據恢復設置中選擇「從本地文件」進行恢復,然後通過右邊的「瀏覽」按鈕找到之前保存下來的.sql文件。

第三步:點「提交」按鈕後將出現詢問「分卷數據成功導入資料庫,需要自動導入本次其他的備份嗎?」一般繼續點「確定」按鈕即可。之後的資料庫文件就完全導入到當前網站了。這時出現再次要求輸入管理員帳號的提示。訪問網站地址時也會看到所有信息都恢復到備份資料庫時的內容了。

小提示:

不管採取哪種方式備份和恢復資料庫,一定要注意備份和恢復時使用的版本要相同,甚至是語言種類也要一致,否則會存在亂碼的問題。

如何修復MYSQL資料庫因斷電造成的數據損壞

修復MYSQL資料庫因斷電造成的數據損壞

在使用MySQL資料庫的時候,都碰到過因斷電造成資料庫損壞的情況,大家都知道,斷電或非正常關機是導致MySQL資料庫出現錯誤最常見的原因,如何恢復MySQL資料庫是大家都非常頭痛的問題。目前有方法可以幫助大家恢復損壞的MySQL資料庫嗎?

當用戶出現斷電造成的MySQL資料庫丟失損壞時,如果能進入MySQL軟體,但是提示錯誤信息,用戶可以通過「系統維護」—「資料庫壓縮修復」,壓縮下資料庫(有些軟體在「系統設置」—「系統維護」—「資料庫備份\恢復」中),這種方法只適合一小部分的資料庫故障修復,功能性並不高。

現在網路上有兩種比較推薦使用的MySQL資料庫恢復方法,一種方法使用MySQL(和PHP搭配之最佳組合)的check

table和repair

table

的sql語句,另一種方法是使用MySQL(和PHP搭配之最佳組合)提供的多個myisamchk,

isamchk數據檢測恢復工具。在很多用戶看來,這兩個方法都比較複雜,並不適合大多數的用戶使用。另外,這兩種方法並不能有效的恢復MySQL資料庫,可能還會造成資料庫被進一步損壞,造成大家無法挽回的損失。根據以上幾個原因,這兩種MySQL資料庫恢復方法並不建議大家使用。

資料庫被損壞分以下幾種情況:

1、嚴重損壞

2、輕度損壞

3、有些表被損壞或有些表的部分記錄被損壞

怎麼恢復mysql資料庫怎麼恢複數據

簡單情況下:進入原來mysql安裝路徑下的data文件夾下,找到相應的庫和ibdata1,進行copy,就可回復原來的數據。

複雜情況下:

從另一台機上把MySQL資料庫的mysql文件夾拷貝到本地機上,目的是恢複本地機對數據的訪問和操作。經過如下幾種情況的操作。

1. 在本地重裝MySQL(安裝目錄D:\Program Files\MySQL\MySQL Server 5.0),直接把mysql文件夾拷貝至D:\Program Files\MySQL\MySQL Server 5.0\。結果,失敗:資料庫連接錯誤。

2. 卸載後重裝MySQL,將D:\Program Files\MySQL\MySQL Server 5.0\下的數據備份,只把mysql\data文件夾全部內容拷貝到D:\Program Files\MySQL\MySQL Server 5.0\data下。結果,失敗:資料庫連接錯誤。將備份的數據還完覆蓋。結果,失敗,還是連接不上資料庫。

3. 卸載後重裝MySQL,將mysql\data文件夾里的cf1,last文件夾(這兩個是原來MySQL里的資料庫)拷貝進D:\Program Files\MySQL\MySQL Server 5.0\data。連接成功,在Navicat for MySQL里看到資料庫cf1和last,但是不能訪問,因為數據全為零。明白了原來data里以資料庫命名的文件存儲的是資料庫的表結構,不是元數據。下一步,把data文件夾里的ibdata1文件(3.4G大,明顯存儲了元數據)拷貝到D:\Program Files\MySQL\MySQL Server 5.0\data里,代替原來的ibdata1文件。重啟電腦,打開Navicat for MySQL,連接成功,數據可以訪問操作。

至此,操作終於成功。其實當初在那台機上把數據導出來,而不是現在直接把文件夾mysql複製過來會更容易恢復。但那台機已經重裝了系統,也就是說MySQL失效了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/238423.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:11
下一篇 2024-12-12 12:11

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python官網中文版:解決你的編程問題

    Python是一種高級編程語言,它可以用於Web開發、科學計算、人工智慧等領域。Python官網中文版提供了全面的資源和教程,可以幫助你入門學習和進一步提高編程技能。 一、Pyth…

    編程 2025-04-29
  • 如何解決WPS保存提示會導致宏不可用的問題

    如果您使用過WPS,可能會碰到在保存的時候提示「文件中含有宏,保存將導致宏不可用」的問題。這個問題是因為WPS在默認情況下不允許保存帶有宏的文件,為了解決這個問題,本篇文章將從多個…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Java Thread.start() 執行幾次的相關問題

    Java多線程編程作為Java開發中的重要內容,自然會有很多相關問題。在本篇文章中,我們將以Java Thread.start() 執行幾次為中心,為您介紹這方面的問題及其解決方案…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • Python爬蟲亂碼問題

    在網路爬蟲中,經常會遇到中文亂碼問題。雖然Python自帶了編碼轉換功能,但有時候會出現一些比較奇怪的情況。本文章將從多個方面對Python爬蟲亂碼問題進行詳細的闡述,並給出對應的…

    編程 2025-04-29
  • NodeJS 建立TCP連接出現粘包問題

    在TCP/IP協議中,由於TCP是面向位元組流的協議,發送方把需要傳輸的數據流按照MSS(Maximum Segment Size,最大報文段長度)來分割成若干個TCP分節,在接收端…

    編程 2025-04-29
  • 如何解決vuejs應用在nginx非根目錄下部署時訪問404的問題

    當我們使用Vue.js開發應用時,我們會發現將應用部署在nginx的非根目錄下時,訪問該應用時會出現404錯誤。這是因為Vue在刷新頁面或者直接訪問非根目錄的路由時,會認為伺服器上…

    編程 2025-04-29

發表回復

登錄後才能評論