邏輯匯入匯出和max-allowed-packet的關係
mysqldump和max-allowed-packet的測試:
匯入和匯出都包括
環境準備:
庫中有表:
mysql> select table_schema,data_length/1024/1024 from information_schema.tables where table_name='plugindata';
+--------------+-----------------------+
| table_schema | data_length/1024/1024 |
+--------------+-----------------------+
| t | 39.51562500 |
| t1 | 61.51562500 |
+--------------+-----------------------+
2 rows in set (0.00 sec)
表中包含了longblob欄位
CREATE TABLE `plugindata` (
`a` bigint(20) NOT NULL,
`b` varchar(255) COLLATE utf8_bin NOT NULL,
`c` varchar(255) COLLATE utf8_bin NOT NULL,
`d` datetime DEFAULT NULL,
`e` longblob,
PRIMARY KEY (`a`),
UNIQUE KEY `bb` (`b`),
UNIQUE KEY `cc` (`c`)
) ENGINE=InnoDB
t庫下的這個表中只有一行記錄
mysql> select count(*) from t.plugindata;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.02 sec)
t1庫上的這個表中隊了包含上面那一行記錄,還有另外小一些的8行記錄
mysql> select count(*) from t1.plugindata;
+----------+
| count(*) |
+----------+
| 9 |
+----------+
1 row in set (0.00 sec)
t庫下的大小是39M
和庫下的大小是61M
測試:
場景1:
set global max_allowed_packet=16777216
mysqldump預設的max_allowed_packet是24M
mysqldump -uroot -ptest -S /data/mysqld.sock t plugindata > /tmp/a.sql
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `plugindata` at row: 0
mysqldump -uroot -ptest -S /data/mysqld.sock t1 plugindata > /tmp/a.sql
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `plugindata` at row: 1
都匯出報錯
場景2:
加大mysqldump的 max_allowed_packet
set global max_allowed_packet=16777216
mysqldump的max_allowed_packet改為40M
mysqldump -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=41943040 t plugindata > /tmp/a.sql --可以正常匯出
匯出那個大一點的表
mysqldump -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=41943040 t1 plugindata > /tmp/a.sql --也可以正常匯出
mysqldump的max_allowed_packet改為39M
mysqldump -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=40894464 t plugindata > /tmp/a.sql --可以正常匯出
mysqldump -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=40894464 t1 plugindata > /tmp/a.sql --也可以正常匯出
mysqldump的max_allowed_packet改為38M
mysqldump -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=39845888 t plugindata > /tmp/a.sql
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `plugindata` at row: 0
mysqldump -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=39845888 t1 plugindata > /tmp/a.sql
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `plugindata` at row: 1
兩種都報錯
場景3:
加大mysql的 max_allowed_packet到40M
set global max_allowed_packet=41943040
mysqldump -uroot -ptest -S /data/mysqld.sock t plugindata > /tmp/a.sql
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `plugindata` at row: 0
mysqldump -uroot -ptest -S /data/mysqld.sock t1 plugindata > /tmp/a.sql
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `plugindata` at row: 1
都報錯
場景3:
加大mysql的 max_allowed_packet到60M 也試了加到600M都不行
set global max_allowed_packet=62914560
匯入測試:
一條記錄的匯出為par.sql ,9條記錄的匯出為full.sql
mysqldump -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=40894464 t plugindata > /tmp/part.sql
mysqldump -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=40894464 t1 plugindata > /tmp/full.sql
測試:
場景1:
set global max_allowed_packet=16777216
mysql命令列預設的max_allowed_packet大小是16M
mysql -uroot -ptest -S /data/mysqld.sock test1 < /tmp/part.sql
ERROR 2006 (HY000) at line 43: MySQL server has gone away
匯入報錯
場景2:
set global max_allowed_packet=41943040
mysql命令列預設的max_allowed_packet大小是16M
mysql -uroot -ptest -S /data/mysqld.sock test1 < /tmp/part.sql
ERROR 2006 (HY000) at line 43: MySQL server has gone away
匯入報錯
場景3:
set global max_allowed_packet=16777216
mysql命令列改為40M
mysql -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=41943040 test1 < /tmp/part.sql
ERROR 2006 (HY000) at line 43: MySQL server has gone away
匯入報錯
場景4:
set global max_allowed_packet=16777216
mysql命令列改為400M
mysql -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=419430400 test1 < /tmp/part.sql
ERROR 2006 (HY000) at line 43: MySQL server has gone away
匯入報錯
場景5:
set global max_allowed_packet=41943040
mysql命令列改為40M
mysql -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=41943040 test1 < /tmp/part.sql
ERROR 2006 (HY000) at line 43: MySQL server has gone away
匯入報錯
場景6:
set global max_allowed_packet=47185920
mysql命令列改為45M
mysql -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=47185920 test1 < /tmp/part.sql
mysql -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=47185920 test1 < /tmp/full.sql
兩個都可以成功
查詢時:
mysql> set global max_allowed_packet=471859200;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
mysql -uroot -ptest -S /data/mysqld.sock
mysql> select * from t.plugindata;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 15868
Current database: *** NONE ***
ERROR 2020 (HY000): Got packet bigger than 'max_allowed_packet' bytes
加大引數: 即可成功
mysql -uroot -ptest -S /data/mysqld.sock --max-allowed-packet=41943040
總結:
1 匯出:
mysqldump的max_allowed_packet引數為最大行的所佔用的長度即可匯出成功,mysql伺服器引數無關
2 匯入:
mysql伺服器引數和mysql命令列引數都略大於最大行的長度方可匯入成功
3 如果想在mysql客戶端也能成功顯示記錄的,需要進入mysql命令列的引數上加上max-allowed-packet為最大行的大小
轉載請註明源出處
QQ 273002188 歡迎一起學習
QQ 群 236941212
QQ 273002188 歡迎一起學習
QQ 群 236941212
oracle,mysql,mongo 相互交流
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25099483/viewspace-1815789/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle備份與恢復系列 五 邏輯匯入匯出Oracle
- 物化檢視 VS 匯出/匯入 邏輯資料遷移
- 使用exp/imp匯出匯入資料(邏輯備份恢復)
- EXP邏輯匯出資料的呼叫方式
- PostgreSQL邏輯備份恢復--pg_dump匯出及psql匯入案例SQL
- 【匯出匯入】匯出匯入 大物件物件
- 【匯出匯入】% 在匯入匯出中的應用。
- 關於java中Excel的匯入匯出JavaExcel
- ES模組化的匯入和匯出
- 匯入和匯出AWR的資料
- BCP 資料的匯入和匯出
- NDS的資料匯入和匯出
- Oracle資料庫匯入匯出。imp匯入命令和exp匯出命令Oracle資料庫
- 關於EasyExcel的資料匯入和單sheet和多sheet匯出Excel
- kxcel, 方便匯入和匯出 ExcelExcel
- 匯出和匯入Gradle工程Gradle
- postgresql 資料匯入和匯出SQL
- SQL資料庫的匯入和匯出SQL資料庫
- Oracle資料泵的匯入和匯出Oracle
- (轉)excel和sql server的匯入匯出ExcelSQLServer
- 【匯入匯出】sqlldr 匯入案例SQL
- MySQL入門--匯出和匯入資料MySql
- NPOI匯出和匯入Excel,Word和PDFExcel
- DB2 匯入和匯出 命令列和客戶端匯出DB2命令列客戶端
- 【mysql】資料庫匯出和匯入MySql資料庫
- ASP.NET Excel匯入和匯出ASP.NETExcel
- 如何使用 JavaScript 匯入和匯出 ExcelJavaScriptExcel
- Activity 流程模型匯入匯出-activity流程模型匯入匯出模型
- Oracle資料庫的匯入和匯出命令Oracle資料庫
- SQL SERVER 和EXCEL的資料匯入匯出SQLServerExcel
- Mysql匯入&匯出MySql
- Mysql匯入匯出MySql
- doris匯入匯出
- esayExcel匯入匯出Excel
- 前端實現Excel匯入和匯出功能前端Excel
- IDEA 匯出和匯入jar包教程IdeaJAR
- ClickHouse 資料表匯出和匯入(qbit)
- Navicat如何匯入和匯出sql檔案SQL