溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行MySQL句柄恢復(fù)的簡(jiǎn)單嘗試

發(fā)布時(shí)間:2021-11-16 11:25:53 來(lái)源:億速云 閱讀:127 作者:柒染 欄目:MySQL數(shù)據(jù)庫(kù)

如何進(jìn)行MySQL句柄恢復(fù)的簡(jiǎn)單嘗試,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

今天突然想起一個(gè)問題,那就是對(duì)于ibdata的恢復(fù),如果我們簡(jiǎn)單模擬一下,就會(huì)發(fā)現(xiàn)還是蠻有意思的。

首先我們得到兩個(gè)參數(shù)值,一個(gè)是刷臟頁(yè)的指標(biāo),另外一個(gè)是數(shù)據(jù)文件的目錄。

mysql> show variables like '%pct%';
+------------------------------------------+-----------+
| Variable_name                            | Value     |
+------------------------------------------+-----------+
| innodb_buffer_pool_dump_pct              | 25        |
| innodb_compression_failure_threshold_pct | 5         |
| innodb_compression_pad_pct_max           | 50        |
| innodb_max_dirty_pages_pct               | 75.000000 |
| innodb_max_dirty_pages_pct_lwm           | 0.000000  |
| innodb_old_blocks_pct                    | 37        |
+------------------------------------------+-----------+
6 rows in set (0.01 sec)

mysql> show variables like 'datadir';
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| datadir       | /home/data/s1/ |
+---------------+----------------+
1 row in set (0.00 sec)

這個(gè)時(shí)候的文件是下面的幾個(gè):

[root@grtest s1]# ll ib*
-rw-r----- 1 mysql mysql      413 Jun 20 14:01 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Jun 20 14:01 ibdata1
-rw-r----- 1 mysql mysql 50331648 Jun 20 14:01 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Jun 20 14:01 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Jun 20 14:02 ibtmp1

其中,ib_buffer_pool是5.7的新特性,暫時(shí)沒有打開,兩個(gè)redo日志,一個(gè)臨時(shí)文件。

  我們可以測(cè)試一下破壞的情況,同時(shí)和事務(wù)結(jié)合起來(lái)。

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> use test
Database changed
mysql> create table test(id int);
Query OK, 0 rows affected (0.01 sec)

手工開啟一個(gè)事務(wù),但是不提交。

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(1000);
Query OK, 1 row affected (0.01 sec)

這個(gè)時(shí)候沒有commit,所以查看binlog里面目前是沒有匹配記錄的。

# mysqlbinlog -vv binlog.000001 |grep -i INSERT

而一旦提交之后,binlog里面就會(huì)包含進(jìn)去。

commit
[root@grtest s1]#  mysqlbinlog -vv binlog.000001 |grep -i -a5  INSERT

BINLOG '
UZNjWRPhYAAAKwAAABIHAAAAANsAAAAAAAEABHRlc3QABHRlc3QAAQMAAQ==
UZNjWR7hYAAAJAAAADYHAAAAANsAAAAAAAEAAgAB//7oAwAA
'/*!*/;
### INSERT INTO `test`.`test`
### SET
###   @1=1000 /* INT meta=0 nullable=1 is_null=0 */
# at 1846
#170710 22:47:11 server id 24801  end_log_pos 1873      Xid = 477
COMMIT/*!*/;
我們來(lái)驗(yàn)證一下這種破壞場(chǎng)景下的數(shù)據(jù)情況,插入一條記錄,不提交,然后破壞文件,查看恢復(fù)的情況。

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(2000);
Query OK, 1 row affected (0.00 sec)

我們就把這些ib_字樣的文件刪除了。

查看mysqld的pid,發(fā)現(xiàn)測(cè)試環(huán)境中有大量的同類服務(wù)。

# pidof mysqld
30518 29944 29698 29401 15307 10659

換一個(gè)姿勢(shì)。

# netstat -nltp|grep mysqld|grep 24801   
tcp        0      0 :::24801                    :::*                        LISTEN      29401/mysqld        
在系統(tǒng)目錄下,按照規(guī)律會(huì)發(fā)現(xiàn)下面的文件。

# ll /proc/29401/fd|grep ib_*|grep delete
lrwx------ 1 root root 64 Jul 10 22:49 10 -> /home/data/s1/ib_logfile1 (deleted)
lrwx------ 1 root root 64 Jul 10 22:49 11 -> /home/data/s1/ibtmp1 (deleted)
lrwx------ 1 root root 64 Jul 10 22:49 12 -> /tmp/ibHcflkp (deleted)
lrwx------ 1 root root 64 Jul 10 22:49 4 -> /home/data/s1/ibdata1 (deleted)
lrwx------ 1 root root 64 Jul 10 22:49 5 -> /tmp/ibq7lvQK (deleted)
lrwx------ 1 root root 64 Jul 10 22:49 6 -> /tmp/ib59bGj5 (deleted)
lrwx------ 1 root root 64 Jul 10 22:49 7 -> /tmp/ibYubRMp (deleted)
lrwx------ 1 root root 64 Jul 10 22:49 8 -> /tmp/ib8LAUL4 (deleted)
lrwx------ 1 root root 64 Jul 10 22:49 9 -> /home/data/s1/ib_logfile0 (deleted)

我們做兩件事情,一件事給當(dāng)前的環(huán)境上鎖,然后進(jìn)行文件的拷貝。

[root@grtest s1]# chown mysql:mysql xxxx
[root@grtest s1]# mv 10 /home/data/s1/ib_logfile1
[root@grtest s1]# mv 11  /home/data/s1/ibtmp1
[root@grtest s1]# mv 9 /home/data/s1/ib_logfile0
[root@grtest s1]# mv 4 /home/data/s1/ibdata1

正常停庫(kù),啟庫(kù)。

這個(gè)時(shí)候驗(yàn)證數(shù)據(jù)就會(huì)發(fā)現(xiàn),之前的那個(gè)事務(wù)已經(jīng)做了回滾。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI