- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章为MySQL安装配置代理工具Kingshard的基本教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
环境说明 。
本文仅作为最小实验环境,因此不使用master, slave模式. 单机上使用mysql_mutil运行二个mysql实列 初始化数据目录 。
1
2
|
# mysql_install_db --datadir=/var/lib/mysql2/ --user=mysql
# mysql_install_db --datadir=/var/lib/mysql3/ --user=mysql
|
生成配置文件 。
利用mysqld_multi工具生成配置文件 。
1
|
# mysqld_multi --example > mysqld_multi.conf
|
修改根据自己的需求修改mysqld_multi.conf 例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld2]
socket = /var/lib/mysql2/mysql.sock2
port = 3307
pid-file = /var/lib/mysql2/hostname.pid2
datadir = /var/lib/mysql2
#language = /usr/share/mysql/english
user = unix_user1
[mysqld3]
socket = /var/lib/mysql3/mysql.sock3
port = 3308
pid-file = /var/lib/mysql3/hostname.pid3
datadir = /var/lib/mysql3
#language = /usr/share/mysql/swedish
user = unix_user2
|
启动多个实例 。
1
|
# mysqld_multi --defaults-extra-file=./mysqld_multi.conf start
|
或者 mysqld_multi --defaults-extra-file=./mysqld_multi.conf start 2; mysqld_multi --defaults-extra-file=./mysqld_multi.conf start 3(分别启动) 注意这里的2、3对应conf配置文件 mysqld2、mysqld3,以此来区分。 查看实例状态 。
1
|
[root@testnode kingshard]
# mysqld_multi --defaults-extra-file=./mysqld_multi.conf report
|
1
2
3
|
Reporting MySQL servers
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
|
。
安装Kingshard 。
1.安装Go语言环境,具体步骤请Google.
1
2
3
4
|
git clone https:
//github
.com
/flike/kingshard
.git src
/github
.com
/flike/kingshard
cd
src
/github
.com
/flike/kingshard
source
.
/dev
.sh
make
|
设置配置文件 运行kingshard。 。
1
|
.
/bin/kingshard
-config=etc
/multi
.yaml
|
2.配置文件说明 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# kingshard的地址和端口
addr : 127.0.0.1:9696
# 连接kingshard的用户名和密码
user : kingshard
password : kingshard
# log级别,[debug|info|warn|error],默认是error
log_level : debug
# 只允许下面的IP列表连接kingshard
allow_ips: 127.0.0.1
# 一个node节点表示mysql集群的一个数据分片,包括一主多从(可以不配置从库)
nodes :
#node节点名字
name : node1
# 连接池中默认的空闲连接数
idle_conns : 16
# kingshard连接该node中mysql的用户名和密码,master和slave的用户名和密码必须一致
user : kingshard
password : kingshard
# master的地址和端口
master : 127.0.0.1:3306
# slave的地址和端口,可不配置
slave :
#kingshard在300秒内都连接不上mysql,则会下线该mysql
down_after_noalive : 300
-
name : node2
idle_conns : 16
rw_split: true
user : kingshard
password : kingshard
master : 192.168.59.103:3307
slave :
down_after_noalive: 100
# 分表规则
schemas :
-
db : kingshard
nodes: [node1,node2]
rules:
default: node1
shard:
-
table: test_shard_hash
key: id
nodes: [node1, node2]
type: hash
locations: [4,4]
-
table: test_shard_range
key: id
type: range
nodes: [node1, node2]
locations: [4,4]
table_row_limit: 10000
|
3.Tips kingshard采用的是yaml方式解析配置文件,需要注意的是yaml配置文件不允许出现tab键,且冒号后面需要跟一个空格。配置文件编写完成后,可以在yaml lint网站验证是否有格式错误.
。
配置Kingshard 。
修改/etc/hosts文件, 添加如下二行 。
1
2
|
127.0.0.1 node1
127.0.0.1 node2
|
配置如下 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# server listen addr
addr : 127.0.0.1:9696
# server user and password
user : kingshard
password : kingshard
# log level[debug|info|warn|error],default error
log_level : debug
# only allow this ip list ip to connect kingshard
#allow_ips: 127.0.0.1
# node is an agenda for real remote mysql server.
nodes :
-
name : node1
# default max idle conns for mysql server
idle_conns : 16
# if rw_split is true, select will use slave server
rw_split: true
# all mysql in a node must have the same user and password
user : root
password : root
# master represents a real mysql master server
master : 127.0.0.1:3307
# slave represents a real mysql salve server,and the number after '@' is
#read load weight of this slave.
#slave : 192.168.0.11:3307@2,192.168.0.12:3307@5
slave :
#down_after_noalive : 300
-
name : node2
# default max idle conns for mysql server
idle_conns : 16
# if rw_split is true, select will use slave server
rw_split: true
# all mysql in a node must have the same user and password
user : root
password : root
# master represents a real mysql master server
master : 127.0.0.1:3308
# slave represents a real mysql salve server
slave :
# down mysql after N seconds noalive
# 0 will no down
down_after_noalive: 100
# schema defines which db can be used by client and this db's sql will be executed in which nodes
schemas :
-
db : kingshard
nodes: [node1,node2]
rules:
default: node1
shard:
-
table: test_shard_hash
key: id
nodes: [node1, node2]
type: hash
locations: [4,4]
-
table: test_shard_range
key: id
type: range
nodes: [node1, node2]
locations: [4,4]
table_row_limit: 10000
|
设置mysql实例信息 。
设置用户 分类登陆mysqld2, mysqld3, 创建root用户(该用户是给kingshard管理的,测试为了方便所以直接使用root) 若用户存在,跳过此步 。
1
2
|
/usr/bin/mysqladmin
-h 127.0.0.1 -P 3307 -u root password
'root'
/usr/bin/mysqladmin
-h 127.0.0.1 -P 3308 -u root password
'root'
|
建数据库 分类登陆mysqld2, mysqld2,创建kingshard数据库 。
1
2
|
/usr/bin/mysql
-h 127.0.0.1 -P 3307 -u root -proot -e
"create database kingshard;"
/usr/bin/mysql
-h 127.0.0.1 -P 3308 -u root -proot -e
"create database kingshard;"
|
启动Kingshard 。
1
|
# ./bin/kingshard -config=etc/multi.yaml
|
测试shard功能 。
使用test_shard_hash测试 shard hash分表功能. 创建分表 创建test_shard_hash分表(_0000~_0007), _0001~_0003在node1(mysqld2)上创建, _0004~_0007在node2(mysqld3)上创建.
1
2
|
for
i
in
`seq 0 3`;do /usr/bin/mysql -h 127.0.0.1 -P 3307 -u root -proot kingshard -e
"CREATE TABLE IF NOT EXISTS test_shard_hash_000"
${i}
" ( id BIGINT(64) UNSIGNED NOT NULL, str VARCHAR(256), f DOUBLE, e enum('test1', 'test2'), u tinyint unsigned, i tinyint, ni tinyint, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
;done
for
i
in
`seq 4 7`;do /usr/bin/mysql -h 127.0.0.1 -P 3308 -u root -proot kingshard -e
"CREATE TABLE IF NOT EXISTS test_shard_hash_000"
${i}
" ( id BIGINT(64) UNSIGNED NOT NULL, str VARCHAR(256), f DOUBLE, e enum('test1', 'test2'), u tinyint unsigned, i tinyint, ni tinyint, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
;done
|
插入数据 mysql连接到kingshard插入数据 。
1
|
for
i
in
`seq 1 10`;do mysql -h 127.0.0.1 -P 9696 -u kingshard -pkingshard -e
"insert into test_shard_hash (id, str, f, e, u, i) values(${i}, 'abc$i', 3.14, 'test$i', 255, -127)"
;done
|
kingshard日志如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
2015/07/29 07:39:15 - INFO - 127.0.0.1:40135->127.0.0.1:3307:select @@version_comment limit 1
2015/07/29 07:39:15 - INFO - 127.0.0.1:40135->127.0.0.1:3307:insert into test_shard_hash_0001(id, str, f, e, u, i) values (1, 'abc1', 3.14, 'test1', 255, -127)
2015/07/29 07:39:15 - INFO - 127.0.0.1:40136->127.0.0.1:3307:select @@version_comment limit 1
2015/07/29 07:39:15 - INFO - 127.0.0.1:40136->127.0.0.1:3307:insert into test_shard_hash_0002(id, str, f, e, u, i) values (2, 'abc2', 3.14, 'test2', 255, -127)
2015/07/29 07:39:15 - INFO - 127.0.0.1:40137->127.0.0.1:3307:select @@version_comment limit 1
2015/07/29 07:39:15 - INFO - 127.0.0.1:40137->127.0.0.1:3307:insert into test_shard_hash_0003(id, str, f, e, u, i) values (3, 'abc3', 3.14, 'test3', 255, -127)
2015/07/29 07:39:15 - INFO - 127.0.0.1:40138->127.0.0.1:3307:select @@version_comment limit 1
2015/07/29 07:39:15 - INFO - 127.0.0.1:40138->127.0.0.1:3308:insert into test_shard_hash_0004(id, str, f, e, u, i) values (4, 'abc4', 3.14, 'test4', 255, -127)
2015/07/29 07:39:15 - INFO - 127.0.0.1:40139->127.0.0.1:3307:select @@version_comment limit 1
2015/07/29 07:39:15 - INFO - 127.0.0.1:40139->127.0.0.1:3308:insert into test_shard_hash_0005(id, str, f, e, u, i) values (5, 'abc5', 3.14, 'test5', 255, -127)
2015/07/29 07:39:15 - INFO - 127.0.0.1:40140->127.0.0.1:3307:select @@version_comment limit 1
2015/07/29 07:39:15 - INFO - 127.0.0.1:40140->127.0.0.1:3308:insert into test_shard_hash_0006(id, str, f, e, u, i) values (6, 'abc6', 3.14, 'test6', 255, -127)
2015/07/29 07:39:15 - INFO - 127.0.0.1:40141->127.0.0.1:3307:select @@version_comment limit 1
2015/07/29 07:39:15 - INFO - 127.0.0.1:40141->127.0.0.1:3308:insert into test_shard_hash_0007(id, str, f, e, u, i) values (7, 'abc7', 3.14, 'test7', 255, -127)
2015/07/29 07:39:15 - INFO - 127.0.0.1:40142->127.0.0.1:3307:select @@version_comment limit 1
2015/07/29 07:39:15 - INFO - 127.0.0.1:40142->127.0.0.1:3307:insert into test_shard_hash_0000(id, str, f, e, u, i) values (8, 'abc8', 3.14, 'test8', 255, -127)
2015/07/29 07:39:15 - INFO - 127.0.0.1:40143->127.0.0.1:3307:select @@version_comment limit 1
2015/07/29 07:39:15 - INFO - 127.0.0.1:40143->127.0.0.1:3307:insert into test_shard_hash_0001(id, str, f, e, u, i) values (9, 'abc9', 3.14, 'test9', 255, -127)
2015/07/29 07:39:15 - INFO - 127.0.0.1:40144->127.0.0.1:3307:select @@version_comment limit 1
2015/07/29 07:39:15 - INFO - 127.0.0.1:40144->127.0.0.1:3307:insert into test_shard_hash_0002(id, str, f, e, u, i) values (10, 'abc10', 3.14, 'test10', 255, -127)
|
通过kingshard的日志可以看到数据插入时根据不同的hash值,插入到不同的子表里面去了.
查看数据 。
1
|
[root@testnode kingshard]# mysql -h 127.0.0.1 -P 9696 -u kingshard -pkingshard -e
"select * from test_shard_hash where id in (2, 3, 4, 5)"
|
1
2
3
4
5
6
7
8
|
+----+------+------+-------+------+------+------+
| id | str | f | e | u | i | ni |
+----+------+------+-------+------+------+------+
| 2 | abc2 | 3.14 | test2 | 255 | -127 | NULL |
| 3 | abc3 | 3.14 | | 255 | -127 | NULL |
| 4 | abc4 | 3.14 | | 255 | -127 | NULL |
| 5 | abc5 | 3.14 | | 255 | -127 | NULL |
+----+------+------+-------+------+------+------+
|
注意kingshard不支持 select * from test_hard_hash查询, 只支持带条件的查询.
最后此篇关于为MySQL安装配置代理工具Kingshard的基本教程的文章就讲到这里了,如果你想了解更多关于为MySQL安装配置代理工具Kingshard的基本教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如何将十进制数字转换为mixed radix表示法? 我猜想给定每个基数数组的输入和十进制数,它应该输出每列值的数组。 最佳答案 伪代码: bases = [24, 60, 60] input = 8
我有 Table-A,其中有“x”行。 (对于这个例子有 8 行) 我通过使用游标创建了列数为“x”的Table-C。 (使其动态化;如果将更多行添加到 Table-A,则会在 Table-C 中创建
我有一个关于对象的(很可能是简单而愚蠢的)问题。我创建了实例“Person”的对象“jon”。当我打电话时 console.log(jon.name) 控制台会给我输出“jon”。到目前为止,一切都很
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: javascript function vs. ( function() { … } ()); 抱歉,如果这太基础了
我正在尝试用 Java 重新创建射弹轨迹,但是,我遇到了一些问题。我看过很多解释公式之类的视频,但他们的方程中有一个目标,而我没有。我的意思是,他们有一个范围来计算子弹的下落,但我试图弄清楚子弹最终会
(希望如此)来自一个完整的 Rust 初学者的一个简单问题。我的循环有什么问题? num 计算结果为“69”的速度相当快,但是一旦 num 设置为“69”,循环就永远不会退出。我肯定遗漏了一些明显的东
我在 id="name"的元素上应用“.length”,但它计数为 29 而不是 14。我想知道我的错误在哪里?如果有人可以让我知道,那就太好了。谢谢! var name=document.getEl
我知道这很简单,但由于某种原因我无法让它工作。我正在尝试在 Java 中创建自定义颜色,但它似乎不起作用。 import java.awt.Color; Color deepGreen = new C
我有一个大文件,其中每一行都包含一个子字符串,例如 ABC123。如果我执行 grep ABC file.txt 或 grep ABC1 file.txt 我按预期返回这些行,但如果我执行 grep
我想将以下实体映射转换为 Priority 对象。在 getter 上,当我将“Short”更改为“Priority”并遵循 this.priority 时,它会提示 'basic' 属性类型不应该是
我正在开发一个相当基本的函数,我发现很难弄清楚为什么我会得到我的输出。 def mystery(n): print(n) if n < 4: my
我正在尝试对 WordPress 安装的新闻部分实现同位素过滤。我是 JavaScript/jQuery 的新手,正在尝试随时随地学习。我首先使用 Filters section of the Iso
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我在另一个实体类中引用一个实体并收到此错误。下面是示例代码。我在 persistence.xml 中也有这些类。 是什么导致了这个问题?我正在使用 Spring 数据 JPA 和 Hibernate。
我正在解析 HTML 并重新格式化图像以使其更好地适应。由于某种原因,当我有多个图像需要解析时,我会超出范围,而且我一生都无法弄清楚为什么。 当 imgArray.count >1 时,我将使用带有递
我是 SQL 新手,正在尝试创建一个基本的子查询。我需要找出经理的平均年龄和实习生的平均年龄之间的差异。 标题为一栏 - 经理或实习生年龄是一列,全部在同一个表中。 我会使用两个子查询来做类似的事情:
我习惯了 csh,所以不得不使用 bash 有点烦人。这段代码有什么问题? if[$time > 0300] && [$time 和 300 && time < 900 )) then mod
我建立了这个页面:http://excelwrestling.com/poola.php即将到来的双重锦标赛。我的大部分数据都是从我的 mySQL 数据库中提取的,现在只有一些示例数据。 我希望链接选
是否有任何原因导致以下内容不起作用: for (i=0;i < someArray.length;i++) { if (someArray[i].indexOf("something") !=
我现在正在学习 Javascript,有一个问题一直困扰着我! 因此,我在这里所需要做的就是在此输入框中键入颜色,单击按钮并将标题更改为键入的颜色(仅当键入的颜色位于变量中指定的数组中时)。 我的代码
我是一名优秀的程序员,十分优秀!