主頁 > 作業系統 > MySQL資料庫備份與恢復

MySQL資料庫備份與恢復

2020-09-20 06:24:35 作業系統

目錄

  • 前言
    • 1.備份資料的意義
    • 2.使用mysqldump進行資料庫備份
      • 2.1.不帶引數備份單個資料庫
      • 2.2.加-B引數備份
      • 2.3.使用gzip壓縮備份資料庫
      • 2.4.mysqldump命令作業原理
      • 2.5.備份多個庫
        • 2.5.1.備份多個庫
        • 2.5.2.如何做分庫備份
      • 2.6.備份單個表
      • 2.7.備份多個表
      • 2.8.備份資料庫表結構(不包含資料)
      • 2.9.只備份資料庫表的資料(不包含表結構)
      • 2.10.同時將資料和表結構分離匯出
      • 2.11.重繪binlog檔案引數(-F)
        • 2.11.1.binlog是什么
        • 2.11.2.binlog對于備份的作用
        • 2.11.3.為什么要重繪binlog
        • 2.11.4.如何開啟binlog功能
        • 2.11.5.使用-F重繪binlog日志
      • 2.12.記錄binlog位置的特殊引數(--master-data)
      • 2.13.鎖定所有表備份(-x引數)
      • 2.14.innodb表特有的備份引數(--single-transaction)
    • 3.mysqldump重要關鍵引數說明
    • 4.不同引擎的mysqldump備份命令
      • 4.1.innodb引擎的備份命令
      • 4.2.適合多引擎混合的備份命令
    • 5.利用SQL陳述句方式對表進行匯入匯出
      • 5.1.匯出表
        • 5.1.1.匯出表SQL陳述句語法
        • 5.1.2.匯出表
      • 5.2.匯入表
        • 5.2.1.匯入表命令語法
        • 5.2.2.匯入表

前言

1.備份資料的意義

運維作業的核心簡單概括起來就是兩件事:第一個是保護公司的資料,第二個是讓網站能夠7*24小時提供服務,

雖然這兩件事情都很重要,但是相比較而言,丟失一部分資料和讓網站7*24小時提供服務,哪個更重要呢?

對于絕大多數企業來講,失去資料就相當于失去商機,失去產品,失去客戶,甚至會造成公司倒閉,那么,在所有的資料中,最核心的資料又是哪些呢?這恐怕要屬資料庫中的資料了,既然資料庫中的資料地位這么高,那么資料庫備份與恢復的重要性就不言而喻了,

2.使用mysqldump進行資料庫備份

MySQL資料庫自帶了一個很優秀的備份命令,即mysqldump,

2.1.不帶引數備份單個資料庫

mysqldump oldboy >/opt/mysql_bak.sql

2.2.加-B引數備份

mysqldump -B oldboy >/opt/mysql_bak_B.sql  #B引數的作用是增加創建資料庫和連接資料庫的陳述句,可同時備份多個庫,

2.3.使用gzip壓縮備份資料庫

mysqldump -B oldboy|gzip>/opt/mysql_bak_B.gz

2.4.mysqldump命令作業原理

利用mysqldump命令備份資料的程序,實際上就是把資料(包括庫表)從MySQL庫里以SQL陳述句的形式直接輸出或者生成備份檔案的程序,這種備份成SQL陳述句的方式稱為邏輯備份,

使用mysqldump命令可以把資料庫中的資料匯出來,并通過SQL陳述句的形式存盤,這種備份方式稱為邏輯備份,效率不是很高,在當下的生產場景中,多用于資料量不是很大的備份情況,例如30GB以內的資料,若在資料庫資料很大的時候采用此備份方法,則所用的時候就會很長,恢復的時間也會很長,因此,當資料大于30GB后,建議選擇其他的諸如Xtrabackup的物理方式進行備份和恢復,

2.5.備份多個庫

2.5.1.備份多個庫

mysqldump -B oldboy oldboy_utf8 mysql|gzip>/opt/all.sql.gz

2.5.2.如何做分庫備份

分庫備份實際上就是每次只執行一個mysqldump備份命令陳述句備份一個庫,如果資料庫里有多個庫,就執行多條相同的陳述句來備份各個庫,

mysqldump -uroot -p'oldboy123' -B oldboy |gzip >/tmp/oldboy.sql.gz

mysql -e "show databases;" |egrep -v "_schema|atabase" |sed -r 's#^(.*)#mysqldump -B \1 |gzip >/tmp/\1.sql.gz#g' |bash  #bash執行這些備份命令,就是一次分開備份多個庫了

2.6.備份單個表

當不加-B引數備份資料庫時,例如“mysqldump oldboy test”,mysqldump命令默認就會把oldboy當作庫,把test當作表,如果后面還有多個字串,例如“mysqldump oldboy test test1“,那么除了oldboy為庫之外,其他的test、test1都是oldboy庫的表,

mysqldump oldboy test>/tmp/oldboy_test,sql

2.7.備份多個表

分表備份的缺點:資料檔案多,很碎,一旦需要全部恢復又很麻煩,

1、做一個完整備份,再做一個分庫分表備份,

2、雖然檔案多、碎,但可以利用腳本批量操作多個SQL檔案,

mysqldump mysql user db>/tmp/mysql.sql

egrep -v "#|\*|--|^$" /tmp/mysql.sql

mysqldump oldboy test > /tmp/oldboy_test.sql

2.8.備份資料庫表結構(不包含資料)

利用mysqldump的-d引數可以只備份表的結構,即建表的陳述句,

mysqldump -d oldboy >/opt/oldboy.sql

2.9.只備份資料庫表的資料(不包含表結構)

利用-t引數備份資料庫表的資料(SQL陳述句形式),

mysqldump -t oldboy >/opt/oldboy1.sql

2.10.同時將資料和表結構分離匯出

利用-T引數可以實作將資料和表結構同時分離備份,

vi /etc/my.cnf
secure_file_priv=''  #在[mysqld]模塊下增加
/etc/init.d/mysqld restart

mysqldump oldboy test --compact -T /tmp/

1、-d引數的作用是只備份庫表結構(SQL陳述句形式),

2、-t引數的作用是只備份表內的資料(SQL陳述句形式),

3、-T將庫表和資料分離成不同的檔案,資料是純文本,表結構是SQL陳述句,

2.11.重繪binlog檔案引數(-F)

2.11.1.binlog是什么

binlog是一個二進制格式的檔案,用于記錄用戶對資料庫更新的SQL陳述句資訊,例如更改資料庫庫表和更改表內容的SQL陳述句都會記錄到binlog里,但是對庫表等內容的查詢則不會記錄到日志中,

2.11.2.binlog對于備份的作用

當有資料寫入到資料庫時,還會同時把更新的SQL陳述句寫入到對應的binlog檔案里,

使用mysqldump備份時,一般是對某一時刻的資料進行全備,例如,0點進行資料庫備份,

假設是每天0點對資料庫進行備份,那么在兩次備份之間就有24小時的資料沒有備份,在這期間如果資料庫發生故障,使用mysqldump全量恢復也只能恢復到當日0點,但是有了binlog檔案,就可以將兩次完整備份間隔之間的資料還原,因為binlog檔案里的資料就是寫入資料庫的資料,使用binlog檔案恢復資料,我們稱之為二進制增量資料恢復,

2.11.3.為什么要重繪binlog

重繪(切割)binlog日志的目的就是確定全備和增量備(binlog檔案)的臨界點,當全備完成后,全備時刻以前的binlog檔案就無用了(全備里已有這部分資料了),但是全備以后到下一次全備之前的資料就是十分重要的,這部分資料就存在于binlog檔案里,因此在進行全備時需要找到全備之后和binlog增量之間的臨界點,使得恢復時,需要的binlog檔案資料一條不多(不能和全備的內容重合),一條不少(全備后的所有資料都要有),

2.11.4.如何開啟binlog功能

binlog檔案生效需要一個引數:log_bin,編輯組態檔增加log_bin引數即可,

vi /etc/my.cnf
添加log_bin=mysql-bin到mysqld模塊下

2.11.5.使用-F重繪binlog日志

使用-F將會從備份后的時刻起重新記錄binlog日志檔案,將來增量恢復從新的binlog日志檔案開始即可,

例如,早晨10點丟失資料需要恢復資料,

1、將0點時刻備份的全備資料還原到資料庫,這個時候資料就恢復到了當日0點,

2、0點到10點丟失的資料,就要從全備后當天的所有binlog里恢復,而使用-F切割日志,就是找到0點這個時刻全備和binlog接縫的起始binlog檔案,

mysqldump -F -B oldboy|gzip >/opt/bak_$(date +%F).sql.gz

2.12.記錄binlog位置的特殊引數(--master-data)

mysqldump里提供了一個引數,使得管理員不用重繪binlog,也可以在備份的檔案對應的SQL陳述句里會添加change mastar陳述句及binlog檔案及位置點資訊,

當“--master-data=https://www.cnblogs.com/yanyanqaq/p/1”時,備份結果為可執行的“change master...”陳述句;當“--master-data=2”時,備份結果為注釋的“--change master...” 陳述句,“--”在SQL陳述句里為注釋的意思,“--master-data“ 引數除了確定增量恢復和全備之間的臨界點之外,進行主從復制時的作用更大,

mysqldump --master-data=https://www.cnblogs.com/yanyanqaq/p/1 oldboy --compact|head -1
mysqldump --master-data=2 oldboy --compact|head -1

2.13.鎖定所有表備份(-x引數)

使用mysqldump命令備份期間,資料庫依然是可以寫入資料的,此時,備份的資料就不是某一個時刻的一致性備份了,因此也會在恢復時造成困擾,例如備份時使用-x鎖表備份就會取得0點時刻的完整備份,即在0點時刻停止所有寫入操作,然后匯出備份資料,備份完畢,放開寫入,

如果不鎖表進行備份,就會無法得到某一個時刻的完整備份,由于是一邊備份資料一邊寫入資料,因此最后備份的資料很可能就是一個時間段的資料,而非某一個時刻的一致性全備,

2.14.innodb表特有的備份引數(--single-transaction)

當使用mysqldump的“--single-transaction”對innodb表進行備份時,會開啟一個事務,并將整個備份程序放到一個事務里,以確保執行本次dump會話時,不會看到其他連接會話已經提交了的資料,即備份開始時刻的資料是什么樣,備份出來就是什么樣子,這也相當于是鎖表之后備份的資料,但是這個引數是允許在備份期間寫入資料的,而不是在使用“-x”引數鎖表之后,備份期間無法寫入任何資料,

3.mysqldump重要關鍵引數說明

mysqldump重要引數 引數說明
-B,--databases 會在備份的資料中增加建庫(create)及“use庫”的陳述句,可以直接接多個庫名,同時備份多個庫
-A,--all-databases 備份所有的資料庫
-d,--no-data 只備份庫表結構(SQL陳述句形式),沒有行資料
-t,--no-create-info 只備份表內行資料(SQL陳述句形式),沒有表結構
-T,--tab=name 將庫表和資料分離成不同的檔案,行資料是純文本,表結構是SQL陳述句
-F,--flush-logs 重繪binlog日志,生產新binlog檔案,將來增量恢復從這個新binlog檔案開始,當備份多個庫時,每個庫都會重繪一次binlog,如果想只重繪一次binlog,可加“--lock-all-tables”或“--master-data”引數
--master-data=https://www.cnblogs.com/yanyanqaq/p/{1|2} 在備份結果中增加binlog日志檔案名及對應的binlog位置點(即change master...陳述句),值為1時是不注釋狀態,值為2時是注釋狀態,該引數執行時會打開“--lock-all-tables”功能,除非有“--single-transaction”存在,使用該引數時會關閉“--lock-tables”功能
-x,--lock-all-tables 備份時對所有資料庫的表執行全域讀鎖,期間同時禁止“--single-transaction”和“--lock-tables”引數功能
-l,--lock-tables 鎖定所有的表為只讀
--single-transaction 在備份innodb引擎資料表時,通常會啟用該選項來獲取一個一致性的資料快照備份,它的作業原理是設定本次備份會話的隔離級別為repeatable read,并將整個備份放在一個事務里,以確保執行本次dump會話時,不會看到其他連接會話已經提交了的資料,即備份開始時刻的資料是什么樣,備份出來就是什么樣子!也就相當于鎖表備份資料,但是這個引數是允許在備份期間寫入資料的,而不是-x鎖表后的備份期間無法寫入任何資料,啟用該引數會關閉“--lock-tables”
-R,--routines 備份存盤程序和函式資料
--triggers 備份觸發器資料
--compact 只顯示很少的有用輸出,適合學習和測驗環境除錯用

4.不同引擎的mysqldump備份命令

4.1.innodb引擎的備份命令

“--single-transaction”是innodb引擎專有的備份引數,優勢就是備份期間資料依然可以執行寫操作,

mysqldump -A -B --master-data=https://www.cnblogs.com/yanyanqaq/p/2 --single-transaction |gzip >/opt/all.sql.gz

4.2.適合多引擎混合的備份命令

使用“--master-data”會自動開啟-x鎖表引數功能,在備份期間會影響資料寫入,

mysqldump -A -B --master-data=https://www.cnblogs.com/yanyanqaq/p/2 |gzip >/opt/all_$(date +%F).sql.gz

5.利用SQL陳述句方式對表進行匯入匯出

5.1.匯出表

5.1.1.匯出表SQL陳述句語法

export options 說明
character set utf8 匯出時設定字符為utf8,默認和庫字符集一致
fields terminated by '-' 匯出時設定不同的域分隔符為“-”,默認是tab
field enclosed by ""; 匯出時設定對欄位內容的參考符號,這里設定為“”,默認為空
lines starting by '=' 匯出時每行行首設定等號,默認為空
lines termibated by'=' 匯出時每行行尾的結束符設定為“=”,默認是回車符

5.1.2.匯出表

use oldboy
select * from test;
select * from test into outfile "/tmp/oldboy_test1.txt";  #將test表里的資料匯出為純文本
system cat /tmp/oldboy_test.txt;
select * from test into outfile "/tmp/oldboy_test2.txt" character set utf8;  #匯出時設定字符集
select * from test into outfile "/tmp/oldboy_test3.txt" fields terminated by '-';  #指定分隔符匯出
select * from test into outfile "/tmp/oldboy_test4.txt" fields enclosed by "";  #匯出時設定對欄位內容進行參考

5.2.匯入表

5.2.1.匯入表命令語法

import options 說明
character set utf8 匯入時設定字符集為utf8,默認和庫字符集一致
fields terminated by '-' 不同域之間的分隔符匯入,這里是“-”,默認是tab
fields enclosed by ""; 根據欄位內容的參考符號匯入,這里是引號,默認為空
lines starting by '=' 匯入時在每行行首設定等號,默認為空
lines terminated by '=' 匯入時將每行行尾的結束符設定為“=”,默認是回車符
ignore number lines 不匯入檔案的前N行

5.2.2.匯入表

delete from test;
system cat /tmp/oldboy_test1.txt;
load data infile '/tmp/oldboy_test1.txt' into table test;  #默認方式將資料匯入資料庫
select * from test;
system cat /tmp/oldboy_test3.txt;
load data infile '/tmp/oldboy_test3.txt' into table test fields terminated by '-';  #指定分隔符方式匯入資料庫
select * from test;
system cat /tmp/oldboy_test4.txt
load data infile '/tmp/oldboy_test4.txt' into table test fields enclosed by "";  #雙引號參考資料匯入資料庫

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/86597.html

標籤:Linux

上一篇:虛擬機中Linux 下安裝tools

下一篇:防火墻(firewall)的操作命令

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more