mysqldump導出數據

前陣子想利用mysqldump導出某數據庫部分表數據,遇到下面這幾種情況。

1.只導出某幾張表,可以添加--tables參數,後面接對應的表名就可以,如果多張表,以空格隔開。

mysqldump --single-transaction -hxxxxx -uxxxx -pxxxx -Pxxx --databases xxx \
--tables table1 table2 table3 --set-gtid-purged=OFF >> /temp.sql

2.只有幾張表不導出,其他大部分表都導出,可以添加--ignore-table參數。

mysqldump --single-transaction -hxxxxx -uxxxx -pxxxx -Pxxx --databases xxx \
--ignore-table=table1 --ignore-table=table2 --ignore-table=table3 --set-gtid-purged=OFF >> /temp.sql

3.導出某張表,而這張表是作爲100張分表在數據庫中存儲的,並且如果一次性導出這1001張分表,cpu佔用率有很快達到100%,從而導致程序中斷,並報錯誤mysqldump: Error 2013: Lost connection to MySQL。我也試過修改net_write_timeout等參數,但都無效,最後只得寫了個shell腳本,分批導出。

#!/bin/bash

i=0
list=' '
for num in {0..7..1}
do
        for tablename in `mysql -hxxxxx -uxxx -pxxxx --port=xxxx \
            -Bse "show tables from xxx where tables_in_xxx like '%order%'"`
        do
                let k=$i%8
                let i+=1

                if [ $k == $num ]; then
                        list="$list $tablename"
                else
                        continue
                fi
        done
        echo $list
        sleep 2
        mysqldump --single-transaction -hxxxxx -uxxx -pxxxx -Pxxx --databases xxx \
            --tables $list --set-gtid-purged=OFF >> /temp.sql
        list=' '
done

exit

這裏假設我這張分表的關鍵字是order,並將這100張分表平均分成8次導出,這個次數可以自己定,最終成功導出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章