Apache ShardingSphere-Proxy使用
* 测试环境已安装jdk
yum install java
一、创建目录
mkdir -p /software/mysql1/logs mkdir -p /software/mysql1/data mkdir -p /software/mysql1/conf mkdir -p /sofrware/mysql1/mysql-files mkdir -p /software/mysql2/logs mkdir -p /software/mysql2/data mkdir -p /software/mysql2/conf mkdir -p /sofrware/mysql2/mysql-files
二、使用docker创建2个服务
docker run -p 13301:3306 --name mysql1 \ -v /software/mysql1/conf:/etc/mysql \ -v /software/mysql1/logs:/var/log/mysql \ -v /software/mysql1/data:/var/lib/mysql \ -v /software/mysql1/mysql-files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql \ --lower_case_table_names=1 docker run -p 13302:3306 --name mysql2 \ -v /software/mysql2/conf:/etc/mysql \ -v /software/mysql2/logs:/var/log/mysql \ -v /software/mysql2/data:/var/lib/mysql \ -v /software/mysql2/mysql-files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql \ --lower_case_table_names=1
查看mysql端口
[root@test]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql1 172.17.0.2 [root@test]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql2 172.17.0.3
2个节点分别创建数据库demo_ds_0、demo_ds_1
三、下载mysql驱动
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar
四、下载Apache ShardingSphere
wget https://downloads.apache.org/shardingsphere/5.0.0-alpha/apache-shardingsphere-5.0.0-alpha-shardingsphere-proxy-bin.tar.gz
解压
tar zxvf apache-shardingsphere-5.0.0-alpha-shardingsphere-proxy-bin.tar.gz
重命名文件夹
mv apache-shardingsphere-5.0.0-alpha-shardingsphere-proxy-bin shardingsphere-proxy
移动mysql驱动到 lib目录下
mv /software/mysql-connector-java-5.1.47.jar /software/shardingsphere-proxy/lib/
修改配置文件 路径 /software/shardingsphere-proxy/lib/conf
server.yaml
authentication: users: root: password: root sharding: password: 12345 authorizedSchemas: ds props: max-connections-size-per-query: 1 acceptor-size: 16 # The default value is available processors count * 2. executor-size: 16 # Infinite by default. proxy-frontend-flush-threshold: 128 # The default value is 128. # LOCAL: Proxy will run with LOCAL transaction. # XA: Proxy will run with XA transaction. # BASE: Proxy will run with B.A.S.E transaction. proxy-transaction-type: LOCAL proxy-opentracing-enabled: false proxy-hint-enabled: false query-with-cipher-column: true sql-show: true check-table-metadata-enabled: false
config-sharding.yaml
schemaName: ds dataSources: ds_0: url: jdbc:mysql://172.17.0.2:3306/demo_ds_0?serverTimezone=UTC&useSSL=false username: root password: 123456 connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 maxPoolSize: 50 minPoolSize: 1 maintenanceIntervalMilliseconds: 30000 ds_1: url: jdbc:mysql://172.17.0.3:3306/demo_ds_1?serverTimezone=UTC&useSSL=false username: root password: 123456 connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 maxPoolSize: 50 minPoolSize: 1 maintenanceIntervalMilliseconds: 30000 rules: - !SHARDING tables: ds_table: actualDataNodes: ds_${0..1}.ds_table_${0..1} databaseStrategy: standard: shardingColumn: user_id shardingAlgorithmName: database_inline tableStrategy: standard: shardingColumn: order_id shardingAlgorithmName: table_inline shardingAlgorithms: database_inline: type: INLINE props: algorithm-expression: ds_${user_id % 2} table_inline: type: INLINE props: algorithm-expression: ds_table_${order_id % 2}
五、启动,使用13333端口
sh ./shardingsphere-proxy/bin/start.sh 13333
六、登陆
七、创建一张表
CREATE TABLE `NewTable` ( `user_id` varchar(32) NULL , `order_id` varchar(32) NULL , `number` int(20) NULL , `updatetime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP );
虚拟主库
注:newtable、t1111 两张表未设置分表分库
实际数据
在虚拟库上执行,创建索引,4个实体表会自动创建如下索引
ALTER TABLE `ds_table`
ADD INDEX `user_id_index` (`user_id`) ,
ADD INDEX `order_id_index` (`order_id`) ;
插入数据
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (1, 1, 3);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (2, 2, 4);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (3, 3, 5);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (4, 1, 6);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (5, 2, 7);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (6, 3, 8);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (7, 1, 9);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (8, 2, 10);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (9, 3, 11);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (10, 1, 12);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (11, 2, 11);
INSERT INTO `ds_table` (`order_id`, `user_id`, `number`) VALUES (12, 3, 12);
完