久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進行MySQL句柄恢復的簡單嘗試

137次閱讀
沒有評論

共計 3139 個字符,預計需要花費 8 分鐘才能閱讀完成。

如何進行 MySQL 句柄恢復的簡單嘗試,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

今天突然想起一個問題,那就是對于 ibdata 的恢復,如果我們簡單模擬一下,就會發現還是蠻有意思的。

首先我們得到兩個參數值,一個是刷臟頁的指標,另外一個是數據文件的目錄。

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)

這個時候的文件是下面的幾個:

[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 的新特性,暫時沒有打開,兩個 redo 日志,一個臨時文件。

  我們可以測試一下破壞的情況, 同時和事務結合起來。

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)

手工開啟一個事務,但是不提交。

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)

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

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

而一旦提交之后,binlog 里面就會包含進去。

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/*!*/;
我們來驗證一下這種破壞場景下的數據情況,插入一條記錄,不提交,然后破壞文件,查看恢復的情況。

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,發現測試環境中有大量的同類服務。

# pidof mysqld
30518 29944 29698 29401 15307 10659

換一個姿勢。

# netstat -nltp|grep mysqld|grep 24801 
tcp  0  0 :::24801  :::*  LISTEN  29401/mysqld   
在系統目錄下,按照規律會發現下面的文件。

# 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)

我們做兩件事情,一件事給當前的環境上鎖,然后進行文件的拷貝。

[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

正常停庫,啟庫。

這個時候驗證數據就會發現,之前的那個事務已經做了回滾。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計3139字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 德保县| 蚌埠市| 靖安县| 静安区| 离岛区| 曲麻莱县| 阜城县| 平遥县| 哈巴河县| 雷波县| 杭锦后旗| 博爱县| 唐山市| 铅山县| 永定县| 日喀则市| 湖州市| 松溪县| 漳州市| 左权县| 海盐县| 和硕县| 和政县| 湘潭县| 深泽县| 蒙阴县| 定兴县| 龙州县| 四子王旗| 嘉祥县| 商南县| 平塘县| 谷城县| 利辛县| 惠州市| 六安市| 延川县| 庆元县| 邢台市| 通州市| 榕江县|