1. 程式人生 > >關於mysqldump匯出多個庫:mysqldump: Couldn't execute 'show table status like '。 ...

關於mysqldump匯出多個庫:mysqldump: Couldn't execute 'show table status like '。 ...



    關於mysqldump匯出多個庫:mysqldump: Couldn't execute 'show table status like 。。。Got an error writing communication packets (1160)

首先我也算是新手。

說明:我的mysql中有65個庫,今天要做一個備份,但是我的需求是隻匯出其中64個庫。

經查詢mysqldump只有--ignore-table=tablename(忽略某張表)的引數並且使用該引數逐個加入即:--ignore-table=db1.tablename1--ignore-table=db2.tablename2--

ignore-table=db3.tablename3...;而並沒有--ignore-database這樣的引數

    因此我只能逐個庫名添加了,寫法是:mysqldump --port=3306 -uroot-p --default-characterset=utf8db1 db2 db3db64 > /home/backup/all.sql

結果報錯:mysqldump: Couldn't find table: "db2";

該報錯是因為沒有加--databases引數,導致mysql把第二個庫名當成了表名的形式,即:db1.table的形式。

更改後:mysqldump --port=3306 -uroot-p--default-character-set=utf8--databases db1 db2 db3

db64 > /home/backup/all.sql

結果報錯:mysqldump: Couldn't execute 'show table status like 'field\_data\_field\_ht\_product\_get\_type'': Got an error writing communication packets (1160)

看到:最後一句是寫入通訊資料包出錯(1160),我想到的也許是由於備份資料量過大,時間過長而導致通訊通道掛掉。通過查詢引數,發現備份大表時常用--single-transaction結合 --quick引數(注:--single-transaction

選項和--lock-tables是互斥的)。

更改後:mysqldump --port=3306 -uroot-p--default-character-set=utf8 --single-transaction --quick --databases db1 db2 db3db64 > /home/backup/all.sql

備份成功!