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

环境说明

本文仅作为最小实验环境,因此不使用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_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

启动多个实例

# 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 servers
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running

说明2个实例都已经启动了。

安装Kingshard

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

git clone https://github.com/flike/kingshard.git src/github.com/flike/kingshard
cd src/github.com/flike/kingshard
source ./dev.sh
make

设置配置文件
运行kingshard。

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

2.配置文件说明

# 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文件, 添加如下二行

127.0.0.1 node1
127.0.0.1 node2

配置如下

# 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) 若用户存在,跳过此步

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

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 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值,插入到不同的子表里面去了。

查看数据

[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查询, 只支持带条件的查询。

(0)

相关推荐

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

    环境说明 本文仅作为最小实验环境,因此不使用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 >

  • Windows下MySQL安装配置方法图文教程

    Windows下的安装与配置MySQL详细步骤思路,分享给大家,供大家参考,具体内容如下 本文介绍Windows XP下的安装与配置. 要想在Windows中运行MySQL,需要: Ø 32位Windows操作系统,例如9x.Me.NT.2000.XP或Windows Server 2003. 基于Windows NT的操作系统(NT,2000,XP,2003),将MySQL服务器做为服务来运行.强烈建议使用基于Windows NT的操作系统. Ø TCP/IP协议支持(也许是所有数据库系统的基

  • mysql安装配置详解教程(一)

    MySQL数据库具有跨平台性,不仅可以在Windows上运行,还可以在UNIX,Linux和Mac OS等操作系统上运行 1.先简单说下MySQL的版本: 根据操作系统的类型可分为:Windows版.UNIX版.Linux版和Mac OS版 根据用户群体的不同可分为:社区版(Community Edition)和企业版(Enterprise),社区版完全免费,企业版是收费的 根据发布顺序来区分可分为:4.1.5.0.5.1.5.4.6.0等版本 根据MySQL的开发情况分为:Alpha.Beta

  • MAC下mysql安装配置方法图文教程

    一.下载MySQL 访问MySQL的官网http://www.mysql.com/downloads/ 然后在页面中会看到"MySQL Community Server"下方有一个"download"点击. 进入MySQL的下载界面(http://www.mysql.com/downloads/mysql/),如果你是用的Mac OS来访问的话那么就会默认为你选好了Mac OS X 平台,而下面罗列的都是在Mac OS上能用的MySQL的版本,如果是用的其他平台,在

  • win10免安装版本的MySQL安装配置教程

    网上找了好多,发现好多不是linux系统的就是与现在新版本有出入,自己做小项目亲手实践了一下,供大家借鉴. MySQL版本:mysql-5.7.17 下载方法: 1.MySQL官方网址https://www.mysql.com/downloads/ 2.下载方法: a.选择对应模块: b.选择对应的版本(这里我选windows): c.选择32位或64位版本进行下载: d.点击下载,它会让登陆或注册,这里可以跳过: MySQL安装配置 1.将下载的.zip 文件解压后放到要安装的地方,位置随意.

  • MAVEN的安装配置与IDEA整合超详细教程

    去http://maven.apache.org/download.cgi下载你需要的Maven版本. 下载好以后,解压安装到一个目录,我的目录为 D:\Develop\apache-maven-3.5.2. 接着配置Maven环境:右键单击"此电脑"-属性-高级系统设置-高级-环境变量--新建- 新建系统变量MAVEN_HOME为你解压的目录 D:\Develop\apache-maven-3.5.2 ,如下图新建MAVEN_HOME变量: 找到变量名为Path的系统变量,编辑该变量

  • Apache PHP MySql安装配置图文教程

    每一项技术用的人多了,就会有人将其进行优化,做成一个简单.实用.大众化的工具,这对于初识者来说是非常方便的,但是对于长久学习或工作这方面的人技术人员来说是不可取的,所以还是要学习基础的实用方法.因此,我就在ubuntu下配置了Apache服务器来更深入的学习. 这是一个默认安装的方法,如果要指定 步骤一:安装apache2 1.sudo apt-get install apache2,然后输入管理员用户的密码 输入"y",然后回车,完成安装 2.默认的网站根目录的路径 Apache 安

  • IIS+PHP+MYSQL安装配置方法

    一.安装php 1) 在D盘新建一个名为PHP的文件夹,解压缩php-5.2.0-win32.zip到D:\PHP. 2) 在D:\PHP文件夹下找到php.ini-dist文件,将其复制一份以做备份.将复制后的文件更名为php-ini. 3) 在php.ini文件中找到以下行:extension_dir = "./"(注:该行指定PHP查找扩展的位置),编辑该行,如下所示: extension_dir = "D:/PHP/ext"(注:不要这里用的是斜杠/而不是反

  • MySQL安装配置方法教程

    所有平台的Mysql下载地址为: MySQL 下载. 挑选你需要的 MySQL Community Server 版本及对应的平台. 一.Linux/UNIX上安装Mysql Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址: MySQL - MySQL服务器.你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器. MySQL-client - MySQL 客户端程序,用于连接并操作Mysql服务器. MySQL-devel - 库和包含

  • 详细的Mysql安装 图解win2003+iis6+php+gd2+mysql安装配置第1/2页

    Mysql 安装 Mysql的安装文件可以直接到 http://www.mysql.com 下载,获得for win32的.zip包,建议选择4.0.20d版本.这里不详细说明. 下载获得Mysql的for win32安装包后,用winzip解压缩,直接运行setup.exe,需要注意的是选择一个安装路径,当然,安装路径可以任意,建议选择C:\MySQL目录.安装完成后MySQL也就完成了.默认的用户名是root,密码为空. Mysql安装完成后,请通过开始-程序-附件-命令提示符进入: 录入c

随机推荐