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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值