SymmetricDS 完全配置安装手册
概述
SymmetricDS 是一個基于 Java 的數據庫同步框架。本文并不打算帶你熟悉 SymmetricDS 的實現原理,只是從安裝與配置入手,讓你感受一下 SymmetricDS 運行效果。如果你的系統中是干凈(空白)的,那么你需要做的事情就比較多了。本文希望盡可能全面且細致地講解配置過程,而不至于你按照本文的教程安裝,出現無法使用的情況。如果真的有這樣的情況產生,你可以在下面進行留言。以下是我在安裝環境時配置的一些記錄,希望于你有益。
版權說明
著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
本文作者:Q-WHai
發表日期: 2016年7月12日
本文鏈接:https://qwhai.blog.csdn.net/article/details/51891291
來源:CSDN
更多內容:分類 >> 數據庫
我的環境
相關配置
安裝配置 JDK
這里需要你的 JDK 版本為 jdk1.6 以上,關于 JDK 的安裝和配置這里就不多說了,網上一大堆。
防火墻
此處為測試環境,故設置了關閉防火墻
$ sudo service iptables stop $ sudo chkconfig iptables off # 設置防火墻不隨系統啟動,這一條你可以選擇性添加SSH 免密碼登錄
關于 SSH 的免密碼登錄在這里不是很重要,只是本人在下發文件的時候用到了。你可以選擇性配置。
配置過程可參見本人另一篇博客《Hadoop 2.2.0 集群搭建》
創建 MySQL 新用戶
這里為了避免使用 root 帳戶,所以創建了新的數據庫操作用戶:symmetric
首先使用 root 帳戶登錄 MySQL,并執行如下 SQL 語句:
上面的 SQL 語句可以讓你有一個 symmetric 的MySQL 用戶,可是這個用戶在很多地方都沒有操作權限。這里需要修改某些操作的權限:
mysql> UPDATE mysql.user SETSelect_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y' WHEREUSER="symmetric" ANDHOST="localhost"; mysql> FLUSH privileges;配置 MySQL 驅動
在 Java 中,如果需要連接 MySQL 數據庫,需要使用 JDBC 的數據庫連接技術。在使用 JDBC 的時候比較容易忽略的就是連接驅動的配置了。
這一點在 Windows 下還好,不過要在 Linux 下使用 JDBC 就需要配置 MySQL 的驅動程序了。
在文件末尾處添加如下內容:
export CLASSPATH=${CLASSPATH}:/home/hadoop/libs/mysql-connector-java-5.1.6-bin.jar設置配置立即生效
$ source /etc/profileSymmetricDS
首先上傳 symmetric-server-3.7.34 到 master 節點自定義的一個目錄下,再重命名移動到用戶根目錄。
$ mv symmetric-server-3.7.34/ ~/symmetric然后再下發此文件夾:
$ scp -r ~/symmetric/ slave:~/symmetric/配置 corp
這里的 corp 也就是我的 master 節點。
復制 symmetric 目錄下的 samples/corp-000.properties 文件到 engines 目錄下:
并修改此文件內容
$ vim engines/corp-000.properties修改后的內容如下:
engine.name=corp-000db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://master/sampledb.user=symmetric db.password=123456registration.url= sync.url=http://master:8080/sync/corp-000group.id=corp external.id=000job.purge.period.time.ms=7200000 job.routing.period.time.ms=5000 job.push.period.time.ms=10000 job.pull.period.time.ms=10000 initial.load.create.first=true這里我只保留了實際的內容,不包含注釋。
配置 store
這里的 store 也就是我的 slave 節點。
復制 symmetric 目錄下的 samples/store-001.properties 文件到 engines 目錄下:
并修改此文件內容
$ vim engines/store-001.properties修改后的內容如下:
engine.name=store-001db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://slave/sampledb.user=symmetric db.password=123456registration.url=http://master:8080/sync/corp-000group.id=store external.id=001job.routing.period.time.ms=5000 job.push.period.time.ms=10000 job.pull.period.time.ms=10000配置文件可執行
在默認的情況下,symmetric/bin 目錄下的文件沒有執行權限,所以這里我們要為這些文件添加可執行權限:
$ chmod 755 bin/*創建數據庫
$ mysql -usymmetric -p123456 mysql> create database sample;創建數據表
自動化創建
在 symmetric 中默認已經給出了自動化的數據創建過程,不過這種自動化的創建有一些不足的地方,那就是數據不夠完整。這樣就會致使在后面自動化插入數據時出現找不到數據表的情況,所以這里我比較推薦你使用下面手動創建的方式。自動化的創建方式只作為參考:
創建指令
創建結果
mysql> show tables; +-----------------------------+ | Tables_in_sample | +-----------------------------+ | sym_channel | | sym_conflict | | sym_data | | sym_data_event | | sym_data_gap | | sym_extension | | sym_extract_request | | sym_file_incoming | | sym_file_snapshot | | sym_file_trigger | | sym_file_trigger_router | | sym_grouplet | | sym_grouplet_link | | sym_incoming_batch | | sym_incoming_error | | sym_load_filter | | sym_lock | | sym_node | | sym_node_channel_ctl | | sym_node_communication | | sym_node_group | | sym_node_group_channel_wnd | | sym_node_group_link | | sym_node_host | | sym_node_host_channel_stats | | sym_node_host_job_stats | | sym_node_host_stats | | sym_node_identity | | sym_node_security | | sym_outgoing_batch | | sym_parameter | | sym_registration_redirect | | sym_registration_request | | sym_router | | sym_sequence | | sym_table_reload_request | | sym_transform_column | | sym_transform_table | | sym_trigger | | sym_trigger_hist | | sym_trigger_router | | sym_trigger_router_grouplet | +-----------------------------+ 42 rows in set (0.00 sec)手動創建
手動創建雖然比較繁瑣,但是數據比較完整,整個過程也很順利。
SQL
item
CREATE TABLE item( item_id INTEGER PRIMARY KEY,name VARCHAR(100) );item_selling_price
CREATE TABLE item_selling_price(item_id INTEGER REFERENCES item(item_id),store_id VARCHAR(5),price DECIMAL(10,2),cost DECIMAL(10,2),PRIMARY KEY(item_id, store_id) );sale_transaction
CREATE TABLE sale_transaction(tran_id INTEGER PRIMARY KEY,store_id VARCHAR(5) NOT NULL,workstation VARCHAR(3) NOT NULL,day VARCHAR(10) NOT NULL,seq INTEGER NOT NULL );sale_return_line_item
CREATE TABLE sale_return_line_item(tran_id INTEGER PRIMARY KEY REFERENCES sale_transaction(tran_id),item_id INTEGER NOT NULL REFERENCES item(item_id),price DECIMAL(10,2) NOT NULL,quantity INTEGER NOT NULL,returned_quantity INTEGER );于是創建了如下 4 張數據表:
mysql> show tables; +-----------------------+ | Tables_in_sample | +-----------------------+ | item | | item_selling_price | | sale_return_line_item | | sale_transaction | +-----------------------+修改 HOST
由于之前的配置文件中設置了 HOST 為 master,所以這里需要修改用戶 symmetric 的 HOST。
mysql> UPDATE user SET HOST='%' WHERE user='symmetric'; mysql> FLUSH privileges;生成分銷系統表
在 symmetric 中默認已經給出了自動化生成分銷系統表的方式,只要一句指令即可:
指令
檢查結果
查看 MySQL 中的數據表
填充數據
雖然上面說了一堆東西,但是還只是一堆空的數據表,如下我們就把 symmetric 自帶的數據填充到數據表中。操作過程如下:
指令
結果檢查
mysql> select * from item_selling_price; +----------+----------+-------+------+ | item_id | store_id | price | cost | +----------+----------+-------+------+ | 11000001 | 001 | 0.20 | 0.10 | | 11000001 | 002 | 0.30 | 0.20 | +----------+----------+-------+------+ 2 rows in set (0.00 sec)啟動 SymmetricDS
因為這里是兩個節點之間的數據同步,所以我們需要啟動兩個節點:corp 和 store
start corp node
corp 設置開啟的端口為 8080
start store node
store 設置開啟的端口為 9090
上面兩個窗口的啟動之后,會進入等待狀態,所以如果有其他操作,就需要另外打開窗口了。
注冊節點
這里還有一步需要處理就是注冊節點,注冊操作在 corp 和 store 啟動之后進行。
$ ./bin/symadmin --engine corp-000 open-registration store 001 Log output will be written to /home/hadoop/symmetric/logs/symmetric.log [] - AbstractCommandLauncher - Option: name=engine, value={corp-000} [corp-000] - JdbcDatabasePlatformFactory - Detected database 'MySQL', version '5', protocol 'mysql' [corp-000] - JdbcDatabasePlatformFactory - The IDatabasePlatform being used is org.jumpmind.db.platform.mysql.MySqlDatabasePlatform [corp-000] - MySqlSymmetricDialect - The DbDialect being used is org.jumpmind.symmetric.db.mysql.MySqlSymmetricDialect [corp-000] - ExtensionService - Found 0 extension points from the database that will be registered [corp-000] - StagingManager - The staging directory was initialized at the following location: /home/hadoop/symmetric/tmp/corp-000 [corp-000] - ClusterService - This node picked a server id of master [corp-000] - ExtensionService - Found 0 extension points from the database that will be registered [corp-000] - ClientExtensionService - Found 9 extension points from spring that will be registered [corp-000] - RegistrationService - Registration was reopened for 001 Opened registration for node group of 'store' external ID of '001'發送初始負載
發送初始負載的目的是將最開始的時候 corp 節點數據表中的數據同步到 store 節點中。如果你開始的數據表中沒有這些數據,那么就可以不用發送此負載了。
指令
結果
Log output will be written to /home/hadoop/symmetric/logs/symmetric.log [] - AbstractCommandLauncher - Option: name=engine, value={corp-000} [corp-000] - JdbcDatabasePlatformFactory - Detected database 'MySQL', version '5', protocol 'mysql' [corp-000] - JdbcDatabasePlatformFactory - The IDatabasePlatform being used is org.jumpmind.db.platform.mysql.MySqlDatabasePlatform [corp-000] - MySqlSymmetricDialect - The DbDialect being used is org.jumpmind.symmetric.db.mysql.MySqlSymmetricDialect [corp-000] - ExtensionService - Found 0 extension points from the database that will be registered [corp-000] - StagingManager - The staging directory was initialized at the following location: /home/hadoop/symmetric/tmp/corp-000 [corp-000] - ClusterService - This node picked a server id of master [corp-000] - ExtensionService - Found 0 extension points from the database that will be registered [corp-000] - ClientExtensionService - Found 9 extension points from spring that will be registered Successfully enabled initial load for node 001測試驗證
這里的驗證為在 corp(即 master) 節點上修改一條數據,觀察兩個節點中數據表的變化。
在 corp 節點的數據庫中執行相應 SQL 語句:
更新
mysql> UPDATE item_selling_price SET price='0.21' WHERE item_id='11000001' AND store_id='001';corp
mysql> select * from item_selling_price; +----------+----------+-------+------+ | item_id | store_id | price | cost | +----------+----------+-------+------+ | 11000001 | 001 | 0.21 | 0.10 | | 11000001 | 002 | 0.30 | 0.20 | +----------+----------+-------+------+ 2 rows in set (0.00 sec)store
mysql> select * from item_selling_price; +----------+----------+-------+------+ | item_id | store_id | price | cost | +----------+----------+-------+------+ | 11000001 | 001 | 0.21 | 0.10 | +----------+----------+-------+------+ 1 row in set (0.00 sec)插入
注意這里不要只添加一條記錄,因為涉及到了數據庫的觸發器,我們虛擬了一條交易記錄,如下:
mysql> INSERT INTO item (item_id, name) VALUES (110000055, 'Soft Drink'); mysql> INSERT INTO item_selling_price (item_id, store_id, price) VALUES (110000055, '001', 0.65); mysql> INSERT INTO item_selling_price (item_id, store_id, price) VALUES (110000055, '002', 1.00);當一條交易被完成之后,我們再去檢查一下 store 節點中的數據信息:
mysql> select * from item_selling_price; +-----------+----------+-------+------+ | item_id | store_id | price | cost | +-----------+----------+-------+------+ | 11000001 | 001 | 0.22 | 0.10 | | 110000055 | 001 | 0.65 | NULL | +-----------+----------+-------+------+ 2 rows in set (0.00 sec) mysql> select * from item; +-----------+------------+ | item_id | name | +-----------+------------+ | 11000001 | Yummy Gum | | 110000055 | Soft Drink | +-----------+------------+ 2 rows in set (0.00 sec)數據的確是有增加的,驗證完成。
Ref
- http://blog.csdn.net/xichenguan/article/details/41720861
征集
如果你也需要使用ProcessOn這款在線繪圖工具,可以使用如下邀請鏈接進行注冊:
https://www.processon.com/i/56205c2ee4b0f6ed10838a6d
總結
以上是生活随笔為你收集整理的SymmetricDS 完全配置安装手册的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 决策树之 C4.5 算法
- 下一篇: FFmpeg常用命令合集