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次导出,这个次数可以自己定,最终成功导出。

你可能感兴趣的:(mysql)