MySQL學習 大檔案備份

2021-10-04 12:35:40 字數 1909 閱讀 3336

首先我們使用mysqldump備份了school資料庫,現在我們恢復它。

mysql -uroot -p123456 school
報錯了,這顯示是編碼不一致導致的,那是因為啥呢,原來mysqldump預設的編碼

–default-character-set=charset_name設定字符集,預設utf8,而cmd相當於乙個mysql客戶端,現在要去請求mysql伺服器,並上傳乙個sql檔案,這個檔案的編碼是utf-8格式。有點類似於瀏覽器訪問伺服器的編碼問題。那麼mysql客戶端請求mysql伺服器是使用什麼編碼格式呢?

character_set_client 從客戶端傳送的語句預設編碼格式。此變數的會話值是在客戶端連線到伺服器時使用客戶端請求的字符集設定的。我們可以使用--default-character-set顯式指定此字符集。從上面可以看到character_set_client預設使用gbk編碼,所以我們使用mysql匯入時候需顯示指定字符集。

mysql -uroot -p123456 --default-character-set=utf8 school亂碼搞定了,但是又報row size too large(>8126),這又是因為啥呢?

原因是mysql的innodb是按照page儲存資料的。每個page最大儲存為16k=16384位元組。而每個page兩行資料,所以每一行最大是8k=8192位元組資料。而上面是顯示row size too large(>8126)說明最多儲存8126個位元組,而剩下的66個位元組我猜測是儲存行資訊的。

而innodb預設的檔案儲存格式是antelope(支援的行格式為compact、redundant)

在antelope中對於變長字段,低於768位元組的,不會進行儲存在溢位頁,也就是說會直接存在page頁,所以當有多個變長字段,那麼很快就超過了8126個位元組。

而innodb還支援barracuda檔案格式(支援的行格式為dynamic、compressed)這種格式對blob欄位的處理方式是在page裡面只儲存乙個20byte大小的指標,其他完全存在溢位區,所以輕易不會超過8k.

set global innodb_file_format = barracuda;

再次執行匯入,就成功了。

如果還不成功,那就在sql檔案中對應的大檔案表下面加上

alter table score row_format=dynamic;
結構資料整體分離
mysqldump -uroot -p123456 -d school>c:/fp/school.

sql

--no-data-d只匯出表結構資訊,不匯出資料,所有表的建立語句都存到了school.sql

mysqldump -uroot -p123456 -t school>c:/fp/school_data.sql
--no-create-info,-t只匯出資料,不包含表結構,所有表的資料都以insert語句存放到school_data.sql中。

Python 備份檔案,以及備份大檔案

今天分享乙個很有用的小 就是關於檔案的備份 import os 匯入os模組 ori file name r e python mayday.輸入檔案路徑 if os.path.isfile ori file name 判斷該路徑的是否是檔案 擷取檔名,重組檔名 seek num ori file ...

Python進行大檔案的備份

python進行大檔案的備份的思路 每次僅從原檔案中讀取指定字元的內容後寫入新檔案,然後迴圈操作。def copy big file 接收使用者輸入的檔名 old file input 請輸入需要備份的檔名 分割老的檔名,組裝成新的檔名 file list old file.split new fi...

MySQL 大檔案匯入匯出

大sql檔案匯入 設變數 max allowed packet 也可以匯入時臨時設定 root localhost vi etc my.nf mysqld mysqld 下 追加一行配置 安裝時已配好,忽略此操作 max allowed packet 32m 大檔案匯入時用,也可以在命令列中臨時設定...