Mysql导入数据很慢 更改设置提速;常见mysql操作指令;关于my.ini不见的问题

昨天需要导入数据,大概一个10M多点的sql文件,开始没导入过这么大的,用sqlyog和mysql的控制台导入都非常慢,大概3个小时了才50%,于是开始查怎么提速。
文章分三个部分,
1 影响速度的因素,
2 介绍如何操作,
3 一些关于my.ini的问题以及操作指令链接。

一、影响因素

总结下来如下:
主要原因是mysql的数据保护机制,当前导入数据的方式比较安全,校验比较多,所以非常慢。
关于参数的介绍可以参考一下别人的解释说明:MYsql导入为什么这么慢
总结下来主要是这么几个参数的问题:
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崩了,但是只要操作系统还在运转,数据还是会被写到磁盘上。
max_allowed_packet
net_buffer_length

mysql>show variables like 'max_allowed_packet'; 
mysql>show variables like 'net_buffer_length';
mysql -h127.0.0.1 -uroot -proot123 data_base_name --max_allowed_packet=16777216 --net_buffer_length=16384<your_sql_script.sql

sync_binlog = 0

mysql> set GLOBAL sync_binlog = 0;

0 不刷新 binlog,也就是 mysql 只管写数据,至于数据啥时候刷新,由操作系统负责。

1 每1次事务都要强制刷新,写入磁盘,可以看出,这是一种非常保险的方式,但是可想而知,性能会比较差,取决于存储介质的读写速度

N,每 N 次事务强制刷新一次磁盘。设的大一些,可以得到一定的性能提升,但是遇到系统崩溃,会丢失 N 个事务的数据。

另外一些可以设置的地方
innodb_autoextend_increment 表空间自增值

innodb_log_buffer_size log 缓存区大小

innodb_log_file_size binlog 文件大小

bulk_insert_buffer_size 批量写入的数据大小

这些变量全都可以在 mysql 官方的文档里面查到,不同的版本有不同的默认值,最新版本的 mysql,这些变量的默认值已经非常大了,都是几十 MB 级别的,一般不会成为性能瓶颈。

二、更改步骤

建议直接使用mysql导入,不用管理软件
1.打开控制台,输入密码进入msyql

C:\Users\QIANG ZHANG>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.16 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  1. 设置参数 将前面代码块里参数输入进来
mysql> set GLOBAL innodb_flush_log_at_trx_commit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> set GLOBAL sync_binlog = 0;
Query OK, 0 rows affected (0.00 sec)
  1. 导入sql文件
    需要先建立数据库,没有则新建
    新建数据库testDB
mysql> create database testdb;
Query OK, 1 row affected (0.04 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
|          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+
6 rows in set (0.00 sec)

使用数据库

mysql> use testdb;
Database changed

导入数据

mysql> source F:\xxxxx.sql;

三 注意事项和操作指南

在查找一些攻略时,有人提到了别的参数,但是在更改时发现,提示这是一个只读变量,不能更改

mysql> set innodb_log_file_size = 1024M;
ERROR 1238 (HY000): Variable 'innodb_log_file_size' is a read only variable

这样的话只能在my.ini中进行修改
有写ini文件可能找不到,可以参考这个链接新建my.ini,注意提前备份好数据库
找不到my.ini文件怎么办

常见数据库操作指令
数据库指令

你可能感兴趣的:(数据库,mysql,数据库)