<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          操作系統(tǒng)宕機(jī),MySQL數(shù)據(jù)找回記錄

          共 3082字,需瀏覽 7分鐘

           ·

          2021-04-23 22:20

          點擊上方"藍(lán)字"
          關(guān)注我們,享更多干貨!

          一、概述

          如果Linux操作系統(tǒng)宕機(jī),啟動不了,救援模式(rescue installed system)也行不通的時候,那么該機(jī)器上的MySQL數(shù)據(jù)還能恢復(fù)嗎?如果能,怎么恢復(fù)呢?帶著這個問題我們做個實驗。
           

          二、環(huán)境介紹

          準(zhǔn)備兩臺虛擬機(jī),虛擬機(jī)軟件為virtualbox。

          IP 192.168.56.81 該虛擬機(jī)上面運行了MySQL,后面模擬這個機(jī)器崩潰,然后將MySQL數(shù)據(jù)搶救回來。

          “81”上的文件:

          “81”上的MySQL數(shù)據(jù)庫:

          IP 192.168.56.71 該虛擬機(jī)為新機(jī)器,后面需要將“81”上的數(shù)據(jù)庫遷移到“71”這臺機(jī)器上。
           

          三、開始實驗

          刪除“81”機(jī)器上的/boot目錄文件,然后強(qiáng)制重啟。

          這時候系統(tǒng)啟動失敗,報error: file ‘/grup2/i386-pc/normal.mod’ not found.

          關(guān)閉故障虛擬機(jī)“81”,選擇強(qiáng)制退出。

          將故障虛擬機(jī)“81”的硬盤掛載到新的虛擬機(jī)“71”上,啟動新的虛擬機(jī)“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是一個物理卷,不能直接掛載,需要掛載該物理卷對應(yīng)的邏輯卷。

          查看邏輯卷(這個可能需要等一會才查看得到),可以看到LV Status為NOT available。

          使用vgchange -ay /dev/vg激活邏輯卷組(vg是邏輯卷組名字),可以看到LV Status為available。

          掛載邏輯卷,可以看到文件已經(jīng)找回來了。

          [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!

          接下來是恢復(fù)MySQL數(shù)據(jù)庫。原理很簡單,跟遷移MySQL沒區(qū)別,就是將原MySQL文件遷移到新的目錄,然后起庫。

          首先在新的虛擬機(jī)“71”上面安裝跟故障虛擬機(jī)中相同版本的MySQL(安裝過程略……)。

          查看原MySQL的參數(shù)文件,確定MySQL日志文件和數(shù)據(jù)文件的目錄。

          [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的數(shù)據(jù)文件。

          [root@oracletest root]# cd /newmnt/opt/mydata/
          [root@oracletest mydata]# ll
          total 12
          drwxr-xr-x 6 995 1000 4096 Feb 11 14:03 data
          drwxr-xr-x 4 995 1000 4096 Feb 11 14:03 log
          drwxr-xr-x 2 995 1000 4096 Feb 11 14:03 tmp

          創(chuàng)建相關(guān)目錄。

          mkdir -p /opt/mydata/data
          mkdir -p /opt/mydata/tmp
          mkdir -p /opt/mydata/log/binlog
          chown -R mysql:mysql /opt/mydata

          拷貝MySQL文件到對應(yīng)的目錄。

          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 # 這一步的目的是由于原始文件在掛到新的機(jī)器上時所屬用戶和所屬組會丟失,需要重新更改成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,那就創(chuàng)建一個,再啟動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  ]

          可以看到數(shù)據(jù)庫的表也找回來了!


           

          四、總結(jié)

          1. 只要沒有刪除數(shù)據(jù)庫的數(shù)據(jù)文件,即使系統(tǒng)起不來了,我們?nèi)匀豢梢詫⑾到y(tǒng)的盤拆下來掛到新的機(jī)器上,將數(shù)據(jù)拷貝出來。

          2. 養(yǎng)成備份的習(xí)慣,正式、仿真、開發(fā)、測試環(huán)境都需要。

          關(guān)于作者

          楊豹,國泰君安專職DBA,熱愛Oracle、MySQL數(shù)據(jù)庫技術(shù),熟悉shell,python編程,熟悉zabbix監(jiān)控



          瀏覽 38
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  丁香婷婷五月天av | 成人无码一区二区含羞草 | 国产精品色国产在线 | 日韩无码网| 亚洲高清福利视频 |