公司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

解决方案 »

  1.   

    你是用什么方法进行导出的? mysqldump ?
      

  2.   

    mysqldump 的同时,还有其它连接进行操作吗?mysqldump 会锁表。 另外你如果有 5万个表,速度也不会太快。
      

  3.   

    5万个表 很慢也很正常
    因为有大量的表已经不再table cache中了
    估计会有很多表在mysqldump的时候 长时间处于opening table 状态,你可以show processlist;观察下
      

  4.   

    mysqldump -uroot -h127.0.0.1 -p --all-databases --single-transaction --add-drop-database --add-drop-table --comments --complete-insert --default-character-set=utf8 --result-file=path/file.sql--single-transaction 试一试这个参数
    --max_allowed_packet 这个参数可以设置大一些
      

  5.   

    INNOSB无法直接COPY,用MYSQLDUMP导出,在导出时最好没有用户使用,你的表多,速度不会快。
      

  6.   

    在保持两机器环境变量,安装目录等细节完全一样的情况下,你可以直接拷数据文件到另一台机器。这样做风险比较大就是了。。linux的一般在/var/lib/mysql目录下,这个目录里以你的数据库名字命名的目录,里面就是数据文件。
      

  7.   

    在mysqldump 加个参数 --quick 试下看看
    另外,这个快慢问题还跟你的表记录多少有直接关系哦
      

  8.   

    使用mysqldump和mysqlimport来转移数据库。对于大的表,比只是使用mysqldump要快得多。在下面的命令中,DUMPDIR代表用来保存mysqldump输出的目录全路径名。
    首先,创建保存输出文件的目录并备份数据库:
    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,以便服务器重载授权表信息。