数据库的部署安装

使用了docker Linux容器的MariaDB数据库,但是无论是数据库还是操作系统,从使用效果来讲都差不多。环境不一定都相同,能运行mysql命令就行,此步可略过。

    1. 拉取docker hub上的MariaDB镜像
      docker pull mariadb
      //或者拉取mysql的镜像
      docker pull mysql:5.7
    1. 运行镜像容器
      docker run --name mariadbfisha -e MYSQL_ROOT_PASSWORD=123456 -d mariadb
      run:容器启动命令。
      --name:设置容器名为mariadbfisha
      -e:创建容器时传入环境变量,设置了数据库root的登录密码
      -d:以后台模式创建
      最后加上拉取的镜像
    1. 进入容器进行交互
      docker exec -it mariadbfisha bash
      exec:在运行的容器中操作。
      -it:分为-t和-i,t表示tty使用命令行交互,i表示展示容器输入信息。大概就是交互和展示的设置。
      mariadbfisha:为启动的容器
      最后开启了容器中的bash会话。
    1. 登录数据库
      注意前面使用MYSQL_ROOT_PASSWORD设置管理员密码123456
      mysql -u root -p123456
      //直接以明文的形式输入密码值,注意-p后面没有空格
    1. mysql基本命令参数使用
      //使用-D可以指定使用的数据库
      mysql -u root -D 库名 -p
      //使用-h可以指定mysql的连接主机
      //使用-P指定连接的端口
      mysql -u root -p -h 192.168.1.103 -P 3306

如果以后要在物理机上运行Maria DB的话还可以了解更多docker设置,端口映射等等。

导入mysql官方测试数据

使用临时表的方式创建大数据量测试数据

目标:创建一个用户表(在表中存放一百万行数据),用户表描述:

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c_user_id` varchar(36) NOT NULL DEFAULT '',
  `c_name` varchar(22) NOT NULL DEFAULT '',
  `c_province_id` int(11) NOT NULL,
  `c_city_id` int(11) NOT NULL,
  `create_time` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`c_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 创建一个只含id的临时表
    CREATE TABLE tmp_table (
     id INT,
     PRIMARY KEY (id)
    );
  2. 使用脚本生成数据
    python -c "for i in range(1, 1+1000000): print(i)" > base.txt
  3. 登录数据库并把数据导入临时表
    mysql> load data infile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/base.txt' replace into table tmp_table;
  • 使用show variables like '%secure%';命令查看你的secure_file_priv目录;我这里为C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/
  • 如果secure_file_priv目录值为空,需要在my.ini/my.conf文件中加入'secure_file_priv = xxxx'即可
  1. 借助临时表插入数据
    mysql> INSERT INTO t_user
     ->   SELECT
     ->     id,
     ->     uuid(),
     ->     CONCAT('userNickName', id),
     ->     FLOOR(Rand() * 1000),
     ->     FLOOR(Rand() * 100),
     ->     NOW()
     ->   FROM
     ->     tmp_table;
    Query OK, 1000000 rows affected (10.37 sec)
  2. 扰乱数据
    UPDATE t_user SET create_time=date_add(create_time, interval FLOOR(1 + (RAND() * 7)) year);
    UPDATE t_user SET create_time=date_add(create_time, interval FLOOR(1 + (RAND() * 7)) year);

    OK.

发展历史

MariaDB由MySQL的创始人Michael Widenius主导开发的,他年轻的时候将自己创建的Mysql AB公司(主要开发了mysql),以10亿美元的价格卖给了Sun公司,但是最后sun公司被Oracle公司收购,Mysql的所有权也归了Oracle公司所有。

那么为什么Mysql的创始人还要创建MariaDB来"对抗"Mysql呢??
因为现在MySQL的开发者主要是甲骨文的 MySQL 团队,存在MySQL闭源的潜在风险。而MariaDB主要社区在开发,通过公开投票和邮件列表讨论的方式进行,任何人都可以向 MariaDB 提交补丁,MariaDB 开发团队会考虑将这些补丁添加到主代码库中,Widenius先生觉得由Oracle来发展MySQL,不靠谱,于是决定另开分支,因此有了MariaDB。

就性能上讲,很大程度上取决于具体的使用场景、查询、用户和连接数量等因素,MariaDB 称与Mysql没有显著的性能差异。现在大多数Linux系统默认数据库都是MariaDB,用户可以使用 MariaDB 的所有功能。