您好,登錄后才能下訂單哦!
這篇文章主要介紹“操作系統宕機如何找回MySQL數據”,在日常操作中,相信很多人在操作系統宕機如何找回MySQL數據問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”操作系統宕機如何找回MySQL數據”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
如果Linux操作系統宕機,啟動不了,救援模式(rescue installed system)也行不通的時候,那么該機器上的MySQL數據還能恢復嗎?如果能,怎么恢復呢?帶著這個問題我們做個實驗。
準備兩臺虛擬機,虛擬機軟件為virtualbox。
IP 192.168.56.81 該虛擬機上面運行了MySQL,后面模擬這個機器崩潰,然后將MySQL數據搶救回來。
“81”上的文件:
“81”上的MySQL數據庫:
IP 192.168.56.71 該虛擬機為新機器,后面需要將“81”上的數據庫遷移到“71”這臺機器上。
刪除“81”機器上的/boot目錄文件,然后強制重啟。
這時候系統啟動失敗,報error: file ‘/grup2/i386-pc/normal.mod’ not found.
關閉故障虛擬機“81”,選擇強制退出。
將故障虛擬機“81”的硬盤掛載到新的虛擬機“71”上,啟動新的虛擬機“71”。
通過lsblk能看到sdb就是新掛載的磁盤。
建立掛載點,掛載新的磁盤,提示mount: unknown filesystem type ‘LVM2_member’
[root@oracletest ~]# mkdir /newmnt [root@oracletest ~]# mount /dev/sdb2 /newmnt mount: unknown filesystem type 'LVM2_member'
這是因為/dev/sdb2是一個物理卷,不能直接掛載,需要掛載該物理卷對應的邏輯卷。
查看邏輯卷(這個可能需要等一會才查看得到),可以看到LV Status為NOT available。
使用vgchange -ay /dev/vg激活邏輯卷組(vg是邏輯卷組名字),可以看到LV Status為available。
掛載邏輯卷,可以看到文件已經找回來了。
[root@oracletest ~]# mount /dev/vg/lvroot /newmnt [root@oracletest ~]# cd /newmnt [root@oracletest newmnt]# ls bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var[root@oracletest newmnt]# cd /newmnt/root [root@oracletest root]# ls important.txt install.sh mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz [root@oracletest root]# cat important.txt this is important text!
接下來是恢復MySQL數據庫。原理很簡單,跟遷移MySQL沒區別,就是將原MySQL文件遷移到新的目錄,然后起庫。
首先在新的虛擬機“71”上面安裝跟故障虛擬機中相同版本的MySQL(安裝過程略……)。
查看原MySQL的參數文件,確定MySQL日志文件和數據文件的目錄。
[root@oracletest root]# cat /newmnt/etc/my.cnf[mysqld] # basic settings # ... basedir = /usr/local/mysql datadir = /opt/mydata/data tmpdir = /opt/mydata/tmp log_bin = /opt/mydata/log/binlog/binlog ...
查看原MySQL的數據文件。
[root@oracletest root]# cd /newmnt/opt/mydata/[root@oracletest mydata]# lltotal 12drwxr-xr-x 6 995 1000 4096 Feb 11 14:03 datadrwxr-xr-x 4 995 1000 4096 Feb 11 14:03 logdrwxr-xr-x 2 995 1000 4096 Feb 11 14:03 tmp
創建相關目錄。
mkdir -p /opt/mydata/data mkdir -p /opt/mydata/tmp mkdir -p /opt/mydata/log/binlog chown -R mysql:mysql /opt/mydata
拷貝MySQL文件到對應的目錄。
cp -r /newmnt/etc/my.cnf /etc cp -r /newmnt/opt/mydata/data /opt/mydata/cp -r /newmnt/opt/mydata/log/binlog /opt/mydata/log/ chown -R mysql:mysql /opt/mydata # 這一步的目的是由于原始文件在掛到新的機器上時所屬用戶和所屬組會丟失,需要重新更改成mysql組
啟動MySQL。
[root@oracletest ~]# service mysql start Starting MySQL.2021-04-08T11:39:26.437943Z mysqld_safe error: log-error set to '/opt/mydata/log/error.log', however file don't exists. Create writable for user 'mysql'.The server quit without updating PID file (/opt/mydata/data[FAILED]est.pid).
報錯,提示沒有error.log,那就創建一個,再啟動MySQL。
[root@oracletest ~]# touch /opt/mydata/log/error.log[root@oracletest ~]# chown -R mysql:mysql /opt/mydata/log/error.log[root@oracletest ~]# service mysql start Starting MySQL.. [ OK ]
可以看到數據庫的表也找回來了!
到此,關于“操作系統宕機如何找回MySQL數據”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。