mysqldump导数报错error 2008处理办法
mysqldump导出dump文件时收到MySQL客户端从服务器获取数据时内存耗尽的报错。
🍌报错信息:
bash
mysqldump: Out of memory (Needed 2356236304 bytes)
mysqldump: Got error: 2008: MySQL client ran out of memory when retrieving data from server
🐐可能原因:
单次导出的表行数太多,超过了mysql客户端的内存限制(可能是
max_allowed_packet
参数,默认256M)。
🐯解决办法:
mysqldump命令加上
--single-transaction --skip-opt --extended-insert --quick
参数。也可以单独加上
--opt
参数,但是生产环境不建议,因为会锁表。
如果需要忽略包含特定字符的表,使用多个--ignore-table
参数指定。
导出DBNAME库中的所有表,但不包括TABLE_1和TABLE_2:
bash
mysqldump -h127.0.0.1 -P3306 -uroot --set-gtid-purged=OFF \
--single-transaction --skip-opt --add-drop-database --extended-insert --quick \
--ignore-table=DBNAME.TABLE_1 --ignore-table=DBNAME.TABLE_2 \
-B DBNAME > dump_DBNAME_`date +%F`.sql
拼接表名清单:
sql
select group_concat(concat_ws('.',table_schema,table_name) separator ' --ignore-table=')
as not_need_table_list
from information_schema.tables
where table_schema = 'DBNAME' and table_name like '%2023%'\G
📖 重要参数含义官方解释:
--opt
This option, enabled by default, is shorthand for the combination of --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset. It gives a fast dump operation and produces a dump file that can be reloaded into a MySQL server quickly.
Because the --opt option is enabled by default, you only specify its converse, the --skip-opt to turn off several default settings. See the discussion of mysqldump option groups for information about selectively enabling or disabling a subset of the options affected by --opt.
--quick
This option is useful for dumping large tables. It forces mysqldump to retrieve rows for a table from the server a row at a time rather than retrieving the entire row set and buffering it in memory before writing it out.
--extended-insert
Write INSERT statements using multiple-row syntax that includes several VALUES lists. This results in a smaller dump file and speeds up inserts when the file is reloaded.
References
[1] https://dba.stackexchange.com/questions/157649/outofmemory-exception-duing-mysqldump
[2] https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_opt