• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL快速插入一亿测试数据

    1、建表

    1.1 建立测试表 t_user

    CREATE TABLE `t_user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `c_user_id` varchar(36) NOT NULL DEFAULT '' COMMENT '用户Id',
      `c_name` varchar(22) NOT NULL DEFAULT '' COMMENT '用户名',
      `c_province_id` int(11) NOT NULL COMMENT '省份Id',
      `c_city_id` int(11) NOT NULL COMMENT '城市Id',
      `create_time` datetime NOT NULL COMMENT '创建时间',
      PRIMARY KEY (`id`),
      KEY `idx_user_id` (`c_user_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    1.2 创建临时表

    CREATE TABLE `tmp_table` (
      `id` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    2、生成数据

    2.1 用 python生成 【一亿】 记录的数据文件(这个确实稍微花点时间)

    python -c "for i in range(1, 1+100000000): print(i)" > base.txt

    2.2 将生成的文件导入到临时表tmp_table中

    找到对应的数据库

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     
    mysql> use test;
    Database changed
    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | student        |
    | t_user         |
    | tmp_table      |
    +----------------+
    3 rows in set (0.00 sec)

    执行导入命令

    mysql> load data infile 'E:/base.txt' replace into table tmp_table;
    ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option 
    so it cannot execute this statement
    mysql>

    导入数据时有可能会报错,原因是mysql默认没有开secure_file_priv( 这个参数用来限制数据导入和导出操作的效果,例如执行LOAD DATA、SELECT … INTO OUTFILE语句和LOAD_FILE()函数。这些操作需要用户具有FILE权限。 )

    解决办法:在mysql的配置文件中(my.ini 或者 my.conf)中添加 secure_file_priv = 文件所在的路径 ,  然后重启mysql 解决。添加自己文件放置的路径即可。

    可以用 show variables like '%secure%'; 先看一下配置:

    mysql> show variables like '%secure%';
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | require_secure_transport | OFF   |
    | secure_auth              | ON    |
    | secure_file_priv         | NULL  |
    +--------------------------+-------+
    3 rows in set, 1 warning (0.00 sec)

    说明:

    secure_file_prive=null   限制mysqld 不允许导入导出
    secure_file_priv=/var/lib/mysql-files/   限制mysqld的导入导出只能发生在/var/lib/mysql-files/目录下
    secure_file_priv=' '     不对mysqld的导入导出做限制

    注意:配置要添加到 [mysqld] 节点下,至于路径加不加引号,你可以试试:

    重启MySQL,先查看配置:

    mysql> use test;
    Database changed
    mysql> show variables like '%secure%';
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | require_secure_transport | OFF   |
    | secure_auth              | ON    |
    | secure_file_priv         | E:\   |
    +--------------------------+-------+
    3 rows in set, 1 warning (0.00 sec)

    再重新导入:

    mysql> load data infile 'E:/base.txt' replace into table tmp_table;
    Query OK, 100000000 rows affected (3 min 53.42 sec)
    Records: 100000000  Deleted: 0  Skipped: 0  Warnings: 0
     
    mysql>

    亿级数据,233.42s,看一下别人的数据,差不多就是这个。

    3、以临时表为基础数据,插入数据到t_user中

    一亿数据需要:快半个小时了。。。(或许直接在命令行下运行更快点...)

    更新创建时间字段让插入的数据的创建时间更加随机:

    mysql> UPDATE t_user SET create_time=date_add(create_time, interval FLOOR(1 + (RAND() * 7)) year);
    Query OK, 100000000 rows affected (7 min 24.17 sec)
    Rows matched: 100000000  Changed: 100000000  Warnings: 0
     
    mysql> UPDATE t_user SET create_time=date_add(create_time, interval FLOOR(1 + (RAND() * 7)) year);
    Query OK, 100000000 rows affected (8 min 2.49 sec)
    Rows matched: 100000000  Changed: 100000000  Warnings: 0

    到此,一亿数据插入结束。

    4、参考

    MySQL如何快速的创建千万级测试数据

    The MySQL server is running with the --secure-file-priv option

    到此这篇关于MySQL快速插入一亿测试数据的文章就介绍到这了,更多相关MySQL 插入一亿数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • mysql大批量插入数据的4种方法示例
    • mysql中迅速插入百万条测试数据的方法
    • MySql中把一个表的数据插入到另一个表中的实现代码
    • 用一条mysql语句插入多条数据
    • MYSQL批量插入数据的实现代码
    • mysql技巧:提高插入数据(添加记录)的速度
    • mysql 从一个表中查数据并插入另一个表实现方法
    • 解决Mysql数据库插入数据出现问号(?)的解决办法
    上一篇:MySql批量插入时如何不重复插入数据
    下一篇:详解MySQL多版本并发控制机制(MVCC)源码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL快速插入一亿测试数据 MySQL,快速,插入,一亿,测试,