本文來自社區用戶投稿,感謝這位小夥伴的技術分享mysql
巨杉數據庫做爲分佈式數據庫是計算和存儲分離架構,由數據庫實例層和存儲引擎層組成的。存儲引擎層負責數據庫核心功能好比數據讀寫存儲以及分佈式事務管理。數據庫實例層也就是這裏的的SQL層負責把應用SQL請求處理後發存儲引擎層處理,而且把存儲引擎層響應結果反饋給應用層。支持結構化實例好比MySQL實例/PG實例/spark實例,也支持非結構化實例好比 Json實例/S3對象存儲實例/PosixFs實例等等。這種架構支持的實例類型比較多,方便從傳統數據庫無縫遷移到巨杉數據庫,減少了開發學習成本,以前也跟數據庫圈同行交流,他們對架構也是十分承認。算法
這裏的SQL層採用的是MySQL實例,存儲引擎層是有三個數據節點和協調節點編目節點組成。其中數據節點就是用來存儲數據的,協調節點不存儲數據,是用來把MySQL的請求進行路由分發到數據庫節點。編目節點用來存儲集羣的系統信息好比用戶信息/分區信息等等。這裏用一個容器來模擬一個物理機或雲虛擬機,這裏設置的是MySQL實例在一個容器裏,編目和節點和協調節點放在了一個容器,三個數據節點分別放在一個容器,三個數據節點構成了三個數據組,每一個數據組三個副本。Web應用的海量數據是經過分片切分的方式分散給不一樣的數據節點,像這裏的數據ABC經過分片打散到三臺機器。sql
這裏的數據分片是經過分佈式Hash算法DHT機制實現,DHT是distribute Hashing table 縮寫。當寫入數據時,首先經過MySQL實例把記錄下發到協調節點,協調節點會經過分佈式Hash算法根據每條記錄的分區鍵進行散列,散列完以後協調節點根據分區鍵判斷到底發送到哪個分區,因此每一個分區之間的數據是徹底隔離互相獨立的。採用這種方法,咱們就能夠把一個很大的表拆散到下面不一樣的子分區裏面小表,實現數據拆分。數據庫
SequoiaDB實現了對MySQL的完整兼容,那麼有的用戶會問了:bash
「既然是完整兼容,MySQL相關的工具是否能使用?」網絡
「數據從MySQL遷移到SequoiaDB如何操做?」架構
下面咱們就介紹SequoiaDB如何使用 mysqldump和 mydumper/myloader 進行數據的導入導出。分佈式
1. mysqldump工具
1)經過存儲過程製造測試數據oop
#mysql -h 127.0.0.1 -P 3306 -u root
mysql>create database news;
mysql>use news;
mysql>create table user_info(id int(11),unickname varchar(100));複製代碼
delimiter //
create procedure `news`.`user_info_PROC`()
begin
declare iloop smallint default 0;
declare iNum mediumint default 0;
declare uid int default 0;
declare unickname varchar(100) default 'test';
while iNum <=10 do start transaction;
while iloop<=10 doset uid=uid+1;
set unickname=CONCAT('test',uid);
insert into `news`.`user_info`(id,unickname)
values(uid,unickname);set iloop=iloop+1;
end while;
set iloop=0;
set iNum=iNum+1;
commit;
end while;
end//delimiter ;
call news.user_info_PROC();複製代碼
2)查看製造測試數據情況
mysql> use news;
Database changedmysql> show tables;
+----------------+
| Tables_in_news |
+----------------+
| user_info |
+----------------+
1 row in set (0.00 sec)
mysql> select count(*) from user_info;
+----------+
| count(*) |
+----------+
| 121 |
+----------+
1 row in set (0.01 sec)複製代碼
3)執行下面mysqldump備份指令
#/opt/sequoiasql/mysql/bin/mysqldump -h 127.0.0.1 -P 3306 -u
root -B news > news.sql複製代碼
查看到對應的文件爲news.sql
而後登錄到數據庫刪除原來的數據庫數據
mysql> drop database news;
Query OK, 1 row affected (0.10 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)複製代碼
4)用source導入新的數據
#/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root複製代碼
使用mysqldump導出的完整sql語句,直接登錄數據庫執行導入便可:
#/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
mysql>source news.sql
mysql> use news;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with-A
Database changed
mysql> show tables;
+----------------+
| Tables_in_news |
+----------------+
| user_info |
+----------------+
1 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版本號
# mydumper --versionmydumper
0.9.1, built against MySQL 5.7.17複製代碼
1)mydumper導出數據
# mydumper -h 127.0.0.1 -P 3306 -u root -B news -o /home/sequoiadb複製代碼
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| news |
| performance_schema |
| sys |
+--------------------+5 rows in set (0.00 sec)
mysql> drop database news;
Query OK, 1 row affected (0.13 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+4 rows in set (0.00 sec)複製代碼
2)myloader 導入數據
能夠看到數據已經被刪除,利用myloader導入數據
#myloader -h 127.0.0.1 -P 3306 -u root -B news -d /home/sequoiadb複製代碼
登錄到數據庫中查看
# /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root複製代碼
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| news |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use news;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_news |
+----------------+
| user_info |
+----------------+
1 row in set (0.00 sec)
mysql> select count(*) from user_info;
+----------+
| count(*) |
+----------+
| 121 |
+----------+
1 row in set (0.00 sec)複製代碼
mydumper 及 myloader 導入數據沒問題,看來巨杉數據庫 Sequoiadb 的確支持 MySQL 的兼容工具 mydumper 及 myloader。
遷移 MySQL 數據庫數據只須要把 MySQL 數據利用 mydumper 導出以後,在巨杉數據庫利用 myloader 導入到巨杉數據庫便可。
總結
巨杉數據庫採用計算-存儲分離的架構,實現了MySQL的100%完整兼容。經過本文,咱們也能夠看到,巨杉數據庫能夠支持全部標準MySQL的周邊工具,同時分佈式可擴展性將大大提高已有應用的擴展性以及總體數據管理能力。所以,巨杉數據庫SequoiaDB能夠說是傳統單點MySQL方案的一種有力替換。