如何 让 sql server 表 默认 有顺序_avue里面的select怎么设置默认值

关于MYSQL的读写的需求,大部分都是在跟读作战,怎么读写分离,是在应用上实现, 或者通过的dns 转接,还是通过简单的中间件实现, 实际上这和需求以及当时可以满足需求的技术以及功耗比有关, 当然这也和数据库的量有关,所以没有那个更好,各花入个眼,没有那个更....

                                                                                                                                                                                                        m'n

由于在目前的企业中大批使用了proxysql 作为替代MHA中的VIP功能的方式,已适应目前的需求,所以自然对于读写分离和只读的需求的事情就需要通过proxysql 来实现. 至于proxysql  有多好用,这个不必再说,之前的几期已经阐明了.

今天会实现两个功能,

1 某个账号只能去读取从库,不能去主库进行操作

2 某个账号,可以进行读写分离的功能实现

首先2台MYSQL 主从是要做的,另外如果喜欢可以加上MHA,这里已经忽略上次几期对于 MYSQL replication cluster 和  Innodb cluster 与 PROXYSQL 之间的如何顺利配置和工作的问题,,直接跳到,配置账号的步骤.

如何 让 sql server 表 默认 有顺序_avue里面的select怎么设置默认值_02

在MYSQL 中配置只读账号.

insert into mysql_users(username,password,default_hostgroup,default_schema) values ('read_only','1234.com',601,'mysql');

如何 让 sql server 表 默认 有顺序_avue里面的select怎么设置默认值_03

不知道 601 的意思的同学可以参照前两篇文字里面的hostgroup  定义,这里里面600表示写库 601 表示读库 这里面可以自定义.

所以经过上面的设置后,通过read_only账号则一定会访问读库,而不会访问写库.

如何 让 sql server 表 默认 有顺序_sql_04

红色的位置已经标明我们已经通过这个账号直接到了读库,而不是写库.

第一个需求已经完成了,那就到了第二个需求,我需要进行读写,这里需要进行相关的匹配,这个需求主要需要考虑几点

1  哪些开头的语句需要转移到读库

2  需要对于语句出现在事务的读做特殊处理

3  需要确认读库和主库的之间是否有延迟

问题一个一个回答

1   select 语句,一定是SELECT 语句,当然在proxysql中绑定是需要注意的

2   这个是需要验证的

3   在proxysql中是有相关的配置,通过second behind master 参数来做比对

在继续下面的文字之前,个人觉得在大部分的读写分离目前还是采用应用逻辑来做的不少,当然也有中间件来做的,在实际当中还是应用逻辑配合中间件来做的更合理一些,完全一种技术想HOLD整个的场景是有疏漏的.  

问题1  在mysql的 query rule 中增加关于select 开头的语句的去向

如何 让 sql server 表 默认 有顺序_mysql_05

并加载到proxysql中,然后直接测试到底是不是select的查询去了从库

这里会进行一个标识方便确认,这里将主库的一个表和从库的对应的表的数据进行不一致的处理,让从库比主库多一条数据库.

下面截图是从中间件访问,不同的语句可以访问同一个表,到达不同的数据库,第一个是到达从库,因为从库比主库的表多一行数据, 而使用了for update后则语句直接到了主库.

如何 让 sql server 表 默认 有顺序_mysql_06

这就回答了第二个问题,如果我们有事务,则业务场景是我们读取数据,并且马上根据数据的结果进行DML 操作,则需要在语句中增加 for update .

满足事务统一在主库进行的要求. 而一般的查询,在从库进行,进行相关的读写分离,和事务中特殊的SELECT 语句与普通SELECT 查询的分割.

最后 一个问题通过UPDATE mysql_servers SET max_replication_lag=3;

来设置判断主从之间的存在差异以及容忍的时间,这里设置了是3秒 ,当然有关于与各个服务器进行monitor的配置也要进行变动.

另外在多提一个问题,如果我有多个从库,那怎么让80%的查询到一个从库,让20%的查询到另一个从库,可以设置吗?  答可以

如何 让 sql server 表 默认 有顺序_读写分离_07