当前位置:Gxlcms > 数据库问题 > MySQL6-数据库维护

MySQL6-数据库维护

时间:2021-07-01 10:21:17 帮助过:17人阅读

本节中主要介绍了4种方式   方法1:Transportable Tablespaces MySQL原生支持的表拷贝方法,但是有很多限制条件,如MySQL版本在5.6.6以上;innodb_file_per_table必须为ON;源表和目标表的page size必须相同;不能用于分区表等   方法2:MySQL Enterprise Backup 企业版才有,普通版没有 对于InnoDb,是热备份,不影响读写;对于非InnoDb,如MyIsam,温备份,即备份期间只能读不能写。 更多参考:http://dev.mysql.com/doc/mysql-enterprise-backup/4.0/en/   方法3:Copying Data Files (Cold Backup Method) 冷备份,需要关闭MySQL;是否可以只备份单表呢【貌似不支持单表:单表其实就是方法1了,不能用于分区表】 流程如下: 1. Do a slow shutdown of the MySQL server and make sure that it stops without errors. 2. Copy all InnoDB data files (ibdata files and .ibd files) into a safe place. 3. Copy all the .frm files for InnoDB tables to a safe place. 4. Copy all InnoDB log files (ib_logfile files) to a safe place. 5. Copy your my.cnf configuration file or files to a safe place.   方法4:Export and Import (mysqldump)逻辑备份 One way to increase the performance of this method is to switch off autocommit mode when importing data, assuming that the tablespace has enough space for the big rollback segment that the import transactions generate. Do the commit only after importing a whole table or a segment of a table   mysqldump不是mysql语句,而是与mysql并列的命令,需要在cmd中执行,举例如下: mysqldump -h 192.168.65.66 -u root -p cadserverdb ta_user_info > C:\Users\lizy-i\Desktop\ta_user_info.sql 其中cadserverdb是数据库名称,ta_user_info是表名。也可以加入条件,只导出部分表数据,如 mysqldump -h 192.168.65.66 -u root -p cadserverdb ta_user_info --where="id<10000" > C:\Users\lizy-i\Desktop\ta_user_info.sql   mysqldump导出的内容是sql语句,既包括表结构(即建表语句),也包括表数据(即insert指令);可以使用-d或-t指定只导出表结构或表中数据。由于这种方法先建表再插入,因此如果是分区表,则数据可以进入正确的分区。   测试:1万条3列的数据,用了8秒钟左右导入   方法5:select与load(非官方文档的方法,测试可用;可能不限于Innodb表) 这种方法与mysqldump的区别在于,首先它只导出表中数据,不导出表结构;其次它导出的是文本数据本身,而不是sql命令。 在cmd下执行如下代码(没有使用into outfile,效果一样),可以将数据存入文本中 mysql -u root -p sample -e "select * from ta_user_info" > C:\Users\lizy-i\Desktop\ta_user_info.txt 在cmd或mysql中执行以下代码,可以将文件中的数据导入数据库(注意local不可以省略否则报错:permission denied) mysql -h localhost -u root -p sample -e "load data local infile ‘C:/Users/lizy-i/Desktop/ta_user_info.txt‘ into table ta_user_info2" 经测试,导入的数据能够进入正确的分区。 测试:1万条3列的数据,用了6秒钟左右导入 【注意,关于速度的测试数据,并没有精确测量,也没有多次测量取平均值】   注意,Navicat提供了导出和导入功能,既可以是sql形式,也可以是txt形式。对比后发现,导入速度相对更慢一些;而且,txt的导入比sql的导入快很多,可能差个几十倍都不止。 下面比较一下Navicat导出导入txt和上述select/load导入导出txt的速度对比。 表如下:ta_device_cad_ios有150万行数据;ta_device_cad_andr有641万行数据。导出是在正式服务器上进行,性能较好,导入是在测试服务器上进行,性能相对较弱,因此对于同一个表格,导入和导出的速度对比并不公平,重点关注两种方式的速度对比。 对于ios数据,Navicat导出耗时43s,导入耗时1079s;select/load导出耗时16s,导入耗时30s。后者速度快很多很多。 对于andr数据,Navicat每次导出的数据大小不同,耗时不同,行数不同,而且数据显示是16进制形式;导入时Navicat崩溃。个人猜测是表格太大,Navicat导出时进行了编码;在导入时要解码需要一次将所有数据读入,导致内存不足。 而是用select/load方式,导出耗时43s,导入耗时128s。 综上所述,使用select/load方式导数据,比Navicat自带的导出/导入向导,性能强很多。    

MySQL6-数据库维护

标签:停止   restore   结构   txt   exp   活动   ble   方法   注意   

人气教程排行