公司mysql数据库,导出特别去,本想优化下,搞了几天没搞好。
分析了几个原因,一开始以为InnoDb没设置好,可以设置了一下还是不行
有可能是因为表太多了,谁有这方面的经验,高分相送环境
mysql
InnoDB
表大概有5W表
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 84330032; in additional pool allocated 16700000
Buffer pool size 2450
Free buffers 2306
Database pages 64
Modified db pages 0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages read 64, created 0, written 0
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
分析了几个原因,一开始以为InnoDb没设置好,可以设置了一下还是不行
有可能是因为表太多了,谁有这方面的经验,高分相送环境
mysql
InnoDB
表大概有5W表
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 84330032; in additional pool allocated 16700000
Buffer pool size 2450
Free buffers 2306
Database pages 64
Modified db pages 0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages read 64, created 0, written 0
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
因为有大量的表已经不再table cache中了
估计会有很多表在mysqldump的时候 长时间处于opening table 状态,你可以show processlist;观察下
--max_allowed_packet 这个参数可以设置大一些
另外,这个快慢问题还跟你的表记录多少有直接关系哦
首先,创建保存输出文件的目录并备份数据库:
shell> mkdir DUMPDIRshell>mysqldump --tab=DUMPDIR db_name然后将DUMPDIR目录中的文件转移到目标机上相应的目录中并将文件装载到MySQL:
shell> mysqladmin create db_name # create databaseshell> cat DUMPDIR/*.sql | mysql db_name # create tables in databaseshell> mysqlimport db_name DUMPDIR/*.txt # load data into tables不要忘记复制MySQL数据库,因为授权表保存在该数据库中。你可能需要在新机器上用MySQL root用户运行命令,直到产生MySQL数据库。
将mysql数据库导入目标机器后,执行mysqladmin flush-privileges,以便服务器重载授权表信息。