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

您所在的位置:网站首页 sqlyog导入表数据 Mysql导入数据很慢 更改设置提速;常见mysql操作指令;关于my.ini不见的问题

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

2023-12-19 07:16| 来源: 网络整理| 查看: 265

昨天需要导入数据,大概一个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 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. 设置参数 将前面代码块里参数输入进来 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) 导入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文件怎么办

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3