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';
#设置成1G(mysql最大支持到1G)
>mysql set global max_allowed_packet=1024*1024*1024;
设置网络缓存长度
# 查看网络缓存长度
>mysql show variables like 'net_buffer_length';
#设置网络缓存长度,最大长度为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