侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

为MySQL安装配置代理工具Kingshard的基本教程

数据库  /  管理员 发布于 6年前   187

环境说明

本文仅作为最小实验环境,因此不使用master, slave模式. 单机上使用mysql_mutil运行二个mysql实列
初始化数据目录

# mysql_install_db --datadir=/var/lib/mysql2/ --user=mysql# mysql_install_db --datadir=/var/lib/mysql3/ --user=mysql

 
生成配置文件

利用mysqld_multi工具生成配置文件

# mysqld_multi --example > mysqld_multi.conf

 
修改根据自己的需求修改mysqld_multi.conf
例:

[mysqld_multi]mysqld   = /usr/bin/mysqld_safemysqladmin = /usr/bin/mysqladminuser    = multi_adminpassword  = my_password [mysqld2]socket   = /var/lib/mysql2/mysql.sock2port    = 3307pid-file  = /var/lib/mysql2/hostname.pid2datadir  = /var/lib/mysql2#language  = /usr/share/mysql/englishuser    = unix_user1 [mysqld3]socket   = /var/lib/mysql3/mysql.sock3port    = 3308pid-file  = /var/lib/mysql3/hostname.pid3datadir  = /var/lib/mysql3#language  = /usr/share/mysql/swedishuser    = unix_user2

 
启动多个实例

# 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,以此来区分。
查看实例状态

[root@testnode kingshard]# mysqld_multi --defaults-extra-file=./mysqld_multi.conf report
Reporting MySQL serversMySQL server from group: mysqld2 is runningMySQL server from group: mysqld3 is running
 
说明2个实例都已经启动了。

安装Kingshard

1.安装Go语言环境,具体步骤请Google。

git clone https://github.com/flike/kingshard.git src/github.com/flike/kingshardcd src/github.com/flike/kingshardsource ./dev.shmake

设置配置文件
运行kingshard。 

./bin/kingshard -config=etc/multi.yaml

 
2.配置文件说明

# kingshard的地址和端口addr : 127.0.0.1:9696 # 连接kingshard的用户名和密码user : kingshardpassword : kingshard # log级别,[debug|info|warn|error],默认是errorlog_level : debug# 只允许下面的IP列表连接kingshardallow_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文件, 添加如下二行

127.0.0.1 node1127.0.0.1 node2

 
配置如下

# server listen addraddr : 127.0.0.1:9696 # server user and passworduser : kingshardpassword : kingshard # log level[debug|info|warn|error],default errorlog_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 nodesschemas :-  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) 若用户存在,跳过此步

/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数据库

/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

# ./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)上创建。

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;";donefor 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插入数据

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日志如下:

2015/07/29 07:39:15 - INFO - 127.0.0.1:40135->127.0.0.1:3307:select @@version_comment limit 12015/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 12015/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 12015/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 12015/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 12015/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 12015/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 12015/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 12015/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 12015/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 12015/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值,插入到不同的子表里面去了。


查看数据

[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)"
+----+------+------+-------+------+------+------+| 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中用户授权以及删除授权的方法
    下一条:
    MySQL中用通用查询日志找出查询次数最多的语句的教程
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客