我想将生产数据库传输到我的开发机器进行测试。
出于性能目的,它有6个带MEMORY
引擎的表格。
我做了mysqldump --routines -hxxx -uxxx -pxxx prod_database > prod_dump.sql
。当我在同一个生产服务器上执行mysql -hxxx -uxxx -pxx prod_clone_database < prod_dump
时(因为我有一个UAT的克隆,因为我们还没有购买UAT Mysql虚拟服务器),它运行正常。
当我这样做mysql -uroot -proot prod_clone < prod_dump.sql
时,我收到错误ERROR 1114 (HY000) at line 138735: The table 'sezione_a' is full
生产服务器运行具有1GB RAM的Linux,并且仅运行mysqld
守护程序。
我的笔记本电脑有16GB的RAM。为什么我得到一个表满错误?我该如何避免?由于该表中的数据与测试无关,我可以从转储中排除其DML吗?我还是需要DDL
答案 0 :(得分:4)
在MySQL中,默认情况下,使用内存引擎创建的临时表可以快速增长超过 max-heap-table-size 和 tmp-table-size <的16mb限制因为每行分配的内存比通常需要的多。例如,如果每行需要16kb,则只需要1k行即可达到限制。对于许多应用程序,可以使用 ROW_FORMAT = DYNAMIC 来解决此问题,如下所述:
http://www.percona.com/doc/percona-server/5.5/flexibility/improved_memory_engine.html