1. 批量插入

# 原来的sql
insert into  `tableName` (`id`,`name`) values ('1', '张三')  ;
insert into  `tableName` (`id`,`name`) values ('2', '李斯')  ;
insert into  `tableName` (`id`,`name`) values ('3', '王五')  ;
# 批量插入
insert into  `tableName` (`id`,`name`) values ('1', '张三') , ('2', '李斯')  , ('3', '王五')  ;

一条insert一次插入1000条数据最好

2. 修改mysql配置

下面设置的参数只在当前连接和新连接上生效,永久生效请修改my.cnf,所以导入成功后请重启使这些设置失效,请一定不要在生产数据库上进行设置,后果自负。

设置下面这些参数需要

>mysql mysql -u root -p123456

>mysql use databaseName;

设置允许最大的数据包容量

该参数如果不设置的话,如果sql文件过大的话,会报ERROR : (2006, 'MySQL server has gone away')

# 查看当前数据包大小
>mysql show variables like 'max_allowed_packet'; 

image.png

#设置成1G(mysql最大支持到1G)
>mysql set global max_allowed_packet=1024*1024*1024;

设置网络缓存长度

# 查看网络缓存长度
>mysql show variables like 'net_buffer_length'; 

image.png

#设置网络缓存长度,最大长度为max_allowed_packet的长度
>mysql set global net_buffer_length=1024*1024; 

设置是否启用同步的二进制文件

配置主从复制的应该知道,就要对binlog进行操作,因为mysql的所有操作都会写进binlog文件中,这里关闭该功能

>mysql set global sync_binlog = 0;

设置事务日志写入方式(innodb_flush_log_at_trx_commit)

>mysql set global innodb_flush_log_at_trx_commit=0;
  • 1 默认值,最慢,每次事务提交都要写入log并刷新到磁盘上,这是最保险的方式

  • 0 最快,每隔1S将log刷新到磁盘,但是不保证。事务提交不会触发log写入。很不安全,mysql挂了,那么上一秒的数据就都丢了。

  • 2 折中的一种,事务提交会写入log,但是log刷新还是每秒一次,不保证。这种时候,就算mysql崩了,但是只要操作系统还在运转,数据还是会被写到磁盘上。

另外一些可以设置的地方

#最新版本的 mysql,这些变量的默认值已经非常大了,都是几十 MB 级别的,一般不会成为性能瓶颈。

innodb_autoextend_increment 表空间自增值

innodb_log_buffer_size log 缓存区大小

innodb_log_file_size binlog 文件大小

bulk_insert_buffer_size 批量写入的数据大小

导入命令

>mysql source /root/test.sql