本文来自社区用户投稿,感谢这位小伙伴的技术分享

巨杉数据库架构简介

巨杉数据库作为分布式数据库是计算和存储分离架构,由数据库实例层和存储引擎层组成的。存储引擎层负责数据库核心功能比如数据读写存储以及分布式事务管理。数据库实例层也就是这里的的SQL层负责把应用SQL请求处理后发存储引擎层处理,并且把存储引擎层响应结果反馈给应用层。支持结构化实例比如MySQL实例/PG实例/spark实例,也支持非结构化实例比如 Json实例/S3对象存储实例/PosixFs实例等等。这种架构支持的实例类型比较多,方便从传统数据库无缝迁移到巨杉数据库,减小了开发学习成本,之前也跟数据库圈同行交流,他们对架构也是十分认可。

这里的SQL层采用的是MySQL实例,存储引擎层是有三个数据节点和协调节点编目节点组成。其中数据节点就是用来存储数据的,协调节点不存储数据,是用来把MySQL的请求进行路由分发到数据库节点。编目节点用来存储集群的系统信息比如用户信息/分区信息等等。这里用一个容器来模拟一个物理机或云虚拟机,这里设置的是MySQL实例在一个容器里,编目和节点和协调节点放在了一个容器,三个数据节点分别放在一个容器,三个数据节点构成了三个数据组,每个数据组三个副本。Web应用的海量数据是通过分片切分的方式分散给不同的数据节点,像这里的数据ABC通过分片打散到三台机器。

这里的数据分片是通过分布式Hash算法DHT机制实现,DHT是distribute Hashing table 缩写。当写入数据时,首先通过MySQL实例把记录下发到协调节点,协调节点会通过分布式Hash算法根据每条记录的分区键进行散列,散列完之后协调节点根据分区键判断到底发送到哪一个分区,所以每个分区之间的数据是完全隔离互相独立的。采用这种方法,我们就可以把一个很大的表拆散到下面不同的子分区里面小表,实现数据拆分。

mysqldump和 mydumper/myloader 导入导出工具实战

SequoiaDB实现了对MySQL的完整兼容,那么有的用户会问了:

“既然是完整兼容,MySQL相关的工具是否能使用?”

“数据从MySQL迁移到SequoiaDB如何操作?”

下面我们就介绍SequoiaDB如何使用 mysqldump和 mydumper/myloader 进行数据的导入导出。

1. mysqldump

 

1)通过存储过程制造测试数据

  1. #mysql -h 127.0.0.1 -P -u root
  2. mysql>create database news;
  3. mysql>use news;
  4. mysql>create table user_info(id int(),unickname varchar());
  1. delimiter //
  2. create procedure `news`.`user_info_PROC`()
  3. begin
  4. declare iloop smallint default ;
  5. declare iNum mediumint default ;
  6. declare uid int default ;
  7. declare unickname varchar() default 'test';
  8. while iNum <= do
  9. start transaction;
  10. while iloop<= do
  11. set uid=uid+;
  12. set unickname=CONCAT('test',uid);
  13. insert into `news`.`user_info`(id,unickname)
  14. values(uid,unickname);
  15. set iloop=iloop+;
  16. end while;
  17. set iloop=;
  18. set iNum=iNum+;
  19. commit;
  20. end while;
  21. end//
  22. delimiter ;
  23. call news.user_info_PROC();

 

2)查看制造测试数据状况

  1. mysql> use news;
  2. Database changed
  3. mysql> show tables;
  4. +----------------+
  5. | Tables_in_news |
  6. +----------------+
  7. | user_info |
  8. +----------------+
  9. row in set (0.00 sec)
  10. mysql> select count(*) from user_info;
  11. +----------+
  12. | count(*) |
  13. +----------+
  14. | |
  15. +----------+
  16. row in set (0.01 sec)

3)执行下面mysqldump备份指令

  1. #/opt/sequoiasql/mysql/bin/mysqldump -h 127.0.0.1 -P -u
  2. root -B news > news.sql

查看到对应的文件为news.sql

然后登陆到数据库删除原来的数据库数据

  1. mysql> drop database news;
  2. Query OK, row affected (0.10 sec)
  3. mysql> show databases;
  4. +--------------------+
  5. | Database |
  6. +--------------------+
  7. | information_schema |
  8. | mysql |
  9. | performance_schema |
  10. | sys |
  11. +--------------------+
  12. rows in set (0.00 sec)

 

4)用source导入新的数据

  1. #/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P -u root
  1.  

使用mysqldump导出的完整sql语句,直接登陆数据库执行导入即可:

  1. #/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P -u root
  2. mysql>source news.sql
  3. mysql> use news;
  4. Reading table information for completion of table and column names
  5. You can turn off this feature to get a quicker startup with-A
  6. Database changed
  7. mysql> show tables;
  8. +----------------+
  9. | Tables_in_news |
  10. +----------------+
  11. | user_info |
  12. +----------------+
  13. row in set (0.00 sec)

可以看到返回结果,的确支持mysqldump数据导出工具和source导入工具。

2. mydumper和myloader使用

这一章节将介绍有关mydumper和myloader工具的使用。

有的同学对于mysqldump与mydumper有点混淆:mysqldump是MySQL原厂自带的。mydumper/myloader是由MySQL /Facebook等公司开发维护的一套逻辑备份恢复工具,DBA较常使用,需要单独安装,具体安装方式可以在网络上进行查询。

针对SequoiaDB使用mydumper/myloader的情况,

我们首先查看mydumper版本号

  1. # mydumper --version
  2. mydumper 0.9., built against MySQL 5.7.

 

1)mydumper导出数据

  1. # mydumper -h 127.0.0.1 -P -u root -B news -o /home/sequoiadb
  1.  

删除原来的数据库

  1. mysql> show databases;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | news |
  8. | performance_schema |
  9. | sys |
  10. +--------------------+
  11. rows in set (0.00 sec)
  12. mysql> drop database news;
  13. Query OK, row affected (0.13 sec)
  14. mysql> show databases;
  15. +--------------------+
  16. | Database |
  17. +--------------------+
  18. | information_schema |
  19. | mysql |
  20. | performance_schema |
  21. | sys |
  22. +--------------------+
  23. rows in set (0.00 sec)

2)myloader 导入数据

可以看到数据已经被删除,利用myloader导入数据

  1. #myloader -h 127.0.0.1 -P -u root -B news -d /home/sequoiadb

登陆到数据库中查看

  1. # /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P -u root
  2.  
  3. mysql> show databases;
  4. +--------------------+
  5. | Database |
  6. +--------------------+
  7. | information_schema |
  8. | mysql |
  9. | news |
  10. | performance_schema |
  11. | sys |
  12. +--------------------+
  13. rows in set (0.00 sec)
  14. mysql> use news;
  15. Reading table information for completion of table and column names
  16. You can turn off this feature to get a quicker startup with -A
  17. Database changed
  18. mysql> show tables;
  19. +----------------+
  20. | Tables_in_news |
  21. +----------------+
  22. | user_info |
  23. +----------------+
  24. row in set (0.00 sec)
  25. mysql> select count(*) from user_info;
  26. +----------+
  27. | count(*) |
  28. +----------+
  29. | |
  30. +----------+
  31. row in set (0.00 sec)

mydumper 及 myloader 导入数据没问题,看来巨杉数据库 Sequoiadb 的确支持 MySQL 的兼容工具 mydumper 及 myloader。

迁移 MySQL 数据库数据只需要把 MySQL 数据利用 mydumper 导出之后,在巨杉数据库利用 myloader 导入到巨杉数据库即可。

总结

巨杉数据库采用计算-存储分离的架构,实现了MySQL的100%完整兼容。通过本文,我们也可以看到,巨杉数据库可以支持所有标准MySQL的周边工具,同时分布式可扩展性将大大提升已有应用的扩展性以及整体数据管理能力。因此,巨杉数据库SequoiaDB可以说是传统单点MySQL方案的一种有力替换。

巨杉学习笔记 | SequoiaDB MySQL导入导出工具使用实战的更多相关文章

  1. Mysql导入导出工具Mysqldump和Source命令用法详解

    Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...

  2. [转]Mysql导入导出工具Mysqldump和Source命令用法详解

    Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...

  3. Java基础学习总结(49)——Excel导入导出工具类

    在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ...

  4. MongoDB 学习笔记之 MongoDB导入导出

    MongoDB数据导入导出: mongoexport: -host 机器 -port 端口 -u 用户名 -p 密码 -d 库名 -c 表名 -f 列名 -o 导出的文件名 -q 查询条件 --csv ...

  5. 好记性不如烂笔头-linux学习笔记3mysql数据库导入导出

    1 数据库文件导出 mysqldump -uroot -p123456 test > 1.sql 2数据库文件导入 mysql -uroot -p123456 test <1.sql 3 ...

  6. 吴裕雄--天生自然MySQL学习笔记:MySQL 导入数据

    1.mysql 命令导入 使用 mysql 命令导入语法格式为: mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql) 实例: # mysql -uroot -p12 ...

  7. sqlserver自带的导入导出工具,分别导入大批量mysql和oracle数据时的感受

    sqlserver自带的导入导出工具,分别导入大批量mysql和oracle数据时,mysql经常出现格式转换出错,不好导入  导入的数据量比较大时,还不如自己写个工具导入 今天在导oracle时,想 ...

  8. MySQL多线程数据导入导出工具Mydumper

    http://afei2.sinaapp.com/?p=456 今天在线上使用mysqldump将数据表从一个库导入到另外一个库,结果速度特别慢,印象中有个多线程的数据导入导出工具Mydumper,于 ...

  9. ArcGIS案例学习笔记_3_2_CAD数据导入建库

    ArcGIS案例学习笔记_3_2_CAD数据导入建库 计划时间:第3天下午 内容:CAD数据导入,建库和管理 目的:生成地块多边形,连接属性,管理 问题:CAD存在拓扑错误,标注位置偏移 教程:pdf ...

随机推荐

  1. 记录一个解决IOS极光推送解决问题方法的网址csdn

    https://blog.csdn.net/Three_Zhang/article/details/54667258

  2. 【学习笔记】B站-2019-NLP(自然语言处理)之 BERT 课程 -- 相关课程笔记

    BERT 课程笔记 1. 传统方案遇到的问题 BERT的核心在于Transformer,Transformer就类似seq2seq网络输入输出之间的网络结构. 传统的RNN网络:最大的问题,因为不能并 ...

  3. python + excel工资条自动生成

    年终绩效分配结果出来了,领导要求每人要清楚地知道自己的情况.要求:总绩效和各分类都要清楚.这就表示我们要给每人六个纸条,一个总的,五个分的.打出来,裁开,分发给每个人!累死人.所以,我就想能否每人生成 ...

  4. Vue中进度条的使用

    1. 安装npm install --save nprogress 2.导入js和css import NProgress from 'nprogress'import 'nprogress/npro ...

  5. VS2019 backspace键失效,无法使用

    原因:据网上其他资源了解,可能是和其它的快捷键冲突了,但是我这边没有设置快捷键,突然就这样了,出现原因不详,有了解的伙伴可以留言学习一下. 解决方法:工具=>设置=>键盘=>点击重置

  6. 04_TypeScript类

    1.类的定义 //ts定义类和ES6相似,不同的是属性需要修饰符并定义数据类型 class Person{ public name:string; constructor(n:string){ thi ...

  7. unity目前学的一些操作

    目前是根据b站的一位迈扣老师的30集基础教学学习的,用的是sunny land这个资源包进行的教学,这位老师讲得很清晰,吐词清晰,思路也清晰,推荐哦.其实我比较喜欢这样的老师,思路 吐词清晰.就像以前 ...

  8. 在javascript编程语言中,数据类型boolean的相关知识

    一. 1.字符串类型: 空字符串返回false,非空字符串均返回true; 2.数值类型: 0或NaN返回false,其他数值返回true; 3.布尔类型: false返回false,true返回tr ...

  9. win10子系统ubuntu忘记密码解决方案

    准备部署一个rocket.chat 需要安装mongodb 3.6  准备直接在子系统中安装一下,结果忘记ROOT密码了 找了一下子系统重置密码  记录如下 ubuntu config --defau ...

  10. 页面置换算法——最近最久未使用算法(c语言实现)

    操作系统实验:用C语言编程实现最近最久未使用置换算法(LRU) 最近最久未使用置换算法(LRU),全称Least Recently Used,是一种页面置换算法. 对于在内存中但又不用的数据块(内存块 ...