在数据恢复时,需要将备份的数据文件重新导入到数据库实例中。如果你发现你的SQL文件有100G,导入需要10多个小时;是不是很无奈啊?
一、数据导入的方法
1.1、登录MySQL终端使用Source命令导入数据
使用source命令或者\.方式导入SQL脚本文件。
a、每执行一条SQL语句,都会输出执行情况。
b、当遇到错误时,不会阻塞后面的SQL语句。
1.2、调用mysql客户端读取SQL语句文件
调用方式:mysql dataname < sql_file
a、安静模式执行,当遇到错误时会报错和停止。可以使用–force管理。
b、省去info信息的输出,应该比source方式要快一些。
1.3、登录MySQL终端使用Load加载数据
调用方式:load data infile 'path/to/file' into table test_table
a、以非常高的速度从文本文件读取数据行到数据表中。
b、load 是和select into outfile 结合使用的。
c、将数据从数据表中导出到文本中。完全将数据内容从数据库管理机制中剥离出来,存储为Execl表格格式。
1.4、使用mysqlimport客户端工具
和前者相似。
1.5、导入数据的方法比较
以上四种数据导入方式中,前两种可以用来处理mysqldump客户端工具导出的数据,后两种则是用来处理文件中格式化的数据(select into outfile)。
select into outfile 这种方式也可以备份数据并且在数据导入时要快很多,不过有自身的局限性。
1、将数据脱离了数据库管理机制。数据库的表结构需要单独备份处理。每张表一个文件。
2、不能备份存储过程、函数、触发器。
3、不能获取备份时刻的binlog日志位置,不能保证数据的一致性。
请根据情况使用。
前两种方式导入SQL 脚本文件方式,推荐使用后者。
二、优化MySQL 提高数据导入速度
优化数据库导入速度的思路
2.1、减少数据库操作
关闭二进制日志:去掉log-bin配置选项。
减小事务提交后日志刷新频率:innodb_flush_log_at_trx_commit=0每秒1次。
2.2、增加日志尺寸
较大的事务日志缓冲区,减少写入日志的I/O操作:innodb_log_buffer_size
较大的日志文件,减少检查点和写入I/O:innodb_log_file_size
2.3、增加写入线程
InnoDB引擎写操作的I/O线程数:innodb_write_io_threads(不要超过CPU核心数)
2.4、增加缓存池
innodb_buffer_pool_size
innodb_buffer_pool_chunk_size
innodb_buffer_pool_instances
2.5、关闭双写缓冲区(doublewrite)
启动MySQL示例时,使用--innodb-doublewrite=0选项参数。