oneproxy安装和配置实践

1.安装oneproxy

选择oneproxy6.2版本

 wget  http://www.onexsoft.com/software/oneproxy-rhel6-linux64-v6.2.0-ga.tar.gz 


解压缩后放入/usr/local下,在目录下的oneproxy.service 用于对oneproxy的启动,停止,重启

修改demo.sh 的安装路径为/usr/local/oneproxy

运行demo.sh

可以把oneproxy.service 复制到/etc/init.d/oneproxy,修改里面的安装路径,

chkconfig oneproxy on

2.conf/proxy.conf配置文件


[oneproxy]
proxy-license              = A2FF461456A67F28,D2F6A5AD70C9042D
user          = oneproxy
keepalive     = 1
event-threads = 4
log-file      = log/oneproxy.log
pid-file      = log/oneproxy.pid
proxy-charset = utf8_general_ci
# admin user:admin ;admin password:oneproxy
admin-username = admin
admin-password =4841E43E59A4337D61C5D14291D737EAA1A38B4E


#proxy-group-security       = 0
proxy-httpserver           = 0.0.0.0:8080
proxy-address              = :3307
proxy-auto-readonly        = 0
#proxy-slave-addresses.1    = db1:3306@default
proxy-master-addresses.1    =127.0.0.1 :3306@cluster_slog

proxy-group-policy         = cluster_slog:master_only
#user :root ,password:root  ;user:snow ,password:snow
proxy-user-list.1            = root/77A7916E10A51A9DC83F17390071DC003982F785@slog
proxy-user-list.2            = snow/15BA3A957175EE9897137F9E94E941CBAC8F3E68@slog

remote-address.1           = 192.168.33.11:4041

#proxy-part-template        = conf/template.txt
#proxy-part-tables         = conf/part.txt
proxy-part-tables          = conf/part_slog.txt


proxy-table-map.1=tool_uselocation_log:cluster_slog
proxy-table-map.1=tool_operate_log:cluster_slog
proxy-table-map.1=gift_log:cluster_slog

#proxy-sequence-group      = cluster_slog
proxy-sequence.1           = cluster_slog

3.分表配置

[
  {
        "table"   : "gift_log",
        "pkey"    : "uid",
        "type"    : "int",
        "method"  : "range",
        "partitions":
           [
               {"db":"slog", "suffix" : "_0", "group": "cluster_slog", "value" : "10" },
               {"db":"slog",  "suffix" : "_1", "group": "cluster_slog", "value" : "20" },
               {"db":"slog", "suffix" : "_2", "group": "cluster_slog", "value" : "30" },
               {"db":"slog",  "suffix" : "_3", "group": "cluster_slog", "value" : null     }
           ]
  },
  {
        "table"   : "tool_operate_log",
        "pkey"    : "uid",
        "type"    : "int",
        "method"  : "range",
        "partitions":
           [
               {"db":"slog", "suffix" : "_0", "group": "cluster_slog", "value" : "10" },
               {"db":"slog",  "suffix" : "_1", "group": "cluster_slog", "value" : "20" },
               {"db":"slog", "suffix" : "_2", "group": "cluster_slog", "value" : "30" },
               {"db":"slog",  "suffix" : "_3", "group": "cluster_slog", "value" : null     }
           ]
  },
  {
        "table"   : "tool_uselocation_log",
        "pkey"    : "ttid",
        "type"    : "int",
        "method"  : "hash",
        "partitions":4,
        "groups":["cluster_slog"]
  }


]

4.参数说明

table:为虚拟表名,

数据库中表以partitions的配置为准

group:用于集群管理,一般master服武器和slave放在同一个group下面

proxy-master-addresses=db_host:port@集群名

proxy-slave-addresses=db_host:port@集群名

proxy-group-policy=集群名:(master_only,master_balance,slave_failover,slave_read,slave_balance,主要有这几种)

proxy-user-list=username/password@dbname

proxy-database: 指定默认数据库

proxy-charset: 指定数据库字符集, 查看支持的字符集可以登陆到4041的命令窗口执行 list charset; 查看

5.重要命令

进入oneproxy管理shell命令:

mysql -uadmin -pOneProxy -P4041 --protocol=TCP

passwd  '要加密的密码'会生成加密密码,用于proxy.conf文件中管理密码和用户密码配置

启动命令也可以用到参数形式(注意行尾和换行符转义之间要有空格):

bin/oneproxy --keepalive --proxy-address=192.168.33.11:3307 \
--proxy-master-addresses=127.0.0.1:3306@slog \
--proxy-user-list=root/77A7916E10A51A9DC83F17390071DC003982F785@slog \
--log-file=${ONEPROXY_HOME}/log/oneproxy.log \
--pid-file=${ONEPROXY_HOME}/log/oneproxy.pid \
--proxy-part-tables=${ONEPROXY_HOME}/conf/part_slog.txt \
--proxy-database=slog \

--proxy-charset=utf8_general_ci 

oneproxy客户端连接:mysql -uroot -proot -h127.0.0.1 -P3307  ,

如果成功进入则会有Server version: 5.5.18 OneProxy-6.2.0 (OneXSoft),表示进入的是oneproxy的客户端,

添加mysql用户:

MySQL>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

MySQL>FLUSH PRIVILEGES;



6.遇到的问题

1.Ignoring query to other database错误

在连接mysql时没有"-u"参数导致的
重新连接mysql 加上-u参数 一切正常

2.生成加密口令

可以用“bin/mysqlhash”来生成加密后的口令和passwd

3.在my.cnf中注释掉socket配置,不然会-h127.0.0.1后不能登录成功

4.当OneProxy无法从SQL取到分区列上的值时,会选择所有的分区,对于DML更新类操作,OneProxy因为不支持分布式事务,所在对DML语句能操作的分区数做了严格的限定,即只能操作一个分区。事实上对于在显式事务中的查询语句,也有同样的限制,比如我们显式开始一个事务,然后对虚拟表做全表查询,看看OneProxy会如何反馈?报错,

5.mysql分表后select查询oneproxy的问题解决

SQLSTATE[42000]: Syntax error or access violation: 1149 prepared statement not supported in OneProxy
报错表示不能在oneproxy使用prepare,
 查看new PDO时的param参数是否有PDO::ATTR_EMULATE_PREPARES  = false 的配置

 如果有该配置,改为true,或者直接去掉该选项,  问题能解决.

笔记:

PDO::ATTR_EMULATE_PREPARES  = false,表示 PDO 禁用模拟预处理语句,并使用 real parepared statements 。这可以确保SQL语句和相应的值在传递到mysql服务器之前是不会被PHP解析的(禁止了所有可能的恶意SQL注入攻击)。
 当调用 prepare() 时,查询语句已经发送给了数据库服务器,此时只有占位符 ? 发送过去,没有用户提交的数据;当调用到 execute()时,用户提交过来的值才会传送给数据库,他们是分开传送的,两者独立的,SQL攻击者没有一点机会。
 1、你不能让占位符 ? 代替一组值
 2.你不能让占位符代替数据表名或列名

 3 你不能让占位符 ? 代替任何其他SQL语法


7.注意事项

1、不支持 Server Side Cursor 接口,比如 mysql C API 里的 Prepare、Bind、 Execute调用接口
2、不支持 use命令切换数据库(use被改写为切换group)
3、默认禁止 CALL, PREPARE, EXECUTE, DEALLOCATE 命令,也就是说不能用存储过程
4、单库(单实例)分表–insert/update/delete要加字段名,如insert into t1(id,name) values(1,’张三’);
5、单库(单实例) 分表–目前分了N张表,如果以自增id做关联查询,那么每张表的自增id都是从1开始,在与其他表join关联查询时,数据会不准确
6、单库(单实例)分表–当where条件有分区列时,值不能有函数转换,也不能有算术表达式,必须是原子值,否则结果不准确
7、分库分表(多实例)–不支持垮库join,例如user_0表在10.0.0.1机器里,现在要join关联查询10.0.0.2机器里的money_detail表,不支持
8、分库分表(多实例)–不支持分布式事务,例如user_0表在10.0.0.1机器里,user_1表在10.0.0.2机器里,现在想同时update更新两张表,不支持
9、读写分离 –默认读操作全部访问slave,如果想强制走主库,例如涉及金钱类的查询操作,SQL改为select /master/ from t1 where id=1;
10、分库分表/分表 –where条件带分区列时,直接命中该表,如果未带分区列,会逐一扫描所有分表(单线程),考虑性能问题,要加并行查询(多线程),SQL改为select /parallel/ from t1 where name=’李四’; 并行查询会增加额外的CPU消耗

11、分表规则:支持range(范围),hash(取模),hash规则要提前规划好,具体分多少张表,如前期分64张表,1年后想扩容128张表,数据需要重新导出导入,成本非常高,目前二级分表还不支持。

12.sql语法

– select * from my_range order by id;

– select * from my_range order by id limit 2, 3;
– select col2, sum(id) from my_range group by col2;
– select distinct col2 from my_range;
• 不支持(仅在查询涉及多分片时)
– select count(distinct …) from …
– select avg(…) from …

– select … from … group by … having count(*) 

8.参考连接

oneproxy参数配置详情,

http://blog.csdn.net/h331895809/article/details/53282882

http://www.onexsoft.com/zh/onesql-cpu-binding.html


oneproxy pdf文档

链接:https://pan.baidu.com/s/1f-01Jm1d3jiBwwpAdNTcfw   密码:8tg9







猜你喜欢

转载自blog.csdn.net/xxq929604980/article/details/79581222