mysql进阶1——proxysql中间件

2023-10-30

一、基本了解

mysql实现读写分离方式:

  1. 程序修改mysql操作,直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配,需要开发人员协助。
  2. amoeba,直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案,自己分配账户,和后端数据库权限管理独立,权限处理不够灵活。
  3. mysql-proxy,直接实现读写分离和负载均衡,不用修改代码,master和slave用一样的帐号,效率低。
  4. mycat中间件,需要开发介入。
  5. proxysql中间件,推荐使用。

ProxySQL是什么?

  1. ProxySQL 是一款可以实际用于生产环境的 MySQL 中间件,它有官方版和 percona 版两种。percona版是在官方版的基础上修改的,添加了几个比较实用的工具。生产环境建议用官方版。
  2. ProxySQL 是用 C++ 语言开发的,虽然也是一个轻量级产品,但性能很好(据测试,能处理千亿级的数据),功能也足够,能满足中间件所需的绝大多数功能,包括:
    • 最基本的读/写分离,且方式有多种
    • 可定制基于用户、基于schema、基于语句的规则对SQL语句进行路由。换句话说,规则很灵活。基于schema和与语句级的规则,可以实现简单的sharding(分库分表)。
    • 可缓存查询结果。虽然ProxySQL的缓存策略比较简陋,但实现了基本的缓存功能,绝大多数时候也够用了。此外,作者已经打算实现更丰富的缓存策略。
    • 监控后端节点。ProxySQL可以监控后端节点的多个指标,包括:ProxySQL和后端的心跳信息,后端节点的read-only/read-write,slave和master的数据同步延迟性(replication lag)

ProxySQL常用端口:

  • ProxySQL 启动后,将监听两个端口。admin管理接口是一个使用 MySQL 协议的接口,默认用户名和密码均为 admin。
  • admin管理接口,默认端口为6032。该端口用于查看、配置ProxySQL。
  • 接收SQL语句的接口,默认端口为6033,这个接口类似于MySQL的3306端口。
    在这里插入图片描述

二、安装部署

  • 下载proxysql安装包有三个路径,分别为官网Percona网站github社区
  • proxysql默认配置文件为/etc/proxysql.cnf,有两个端口。6032是管理proxysql服务本身的,6033是通过proxysql管理后端mysql服务的。
主机版本 主机名 IP 要安装的服务
CentOS7 proxysql 192.168.161.129 proxysql
mysql客户端
CentOS7 master 192.168.161.130 mysql主
CentOS7 slave 192.168.161.131 mysql从

1.下载安装。

wget https://github.com/sysown/proxysql/releases/download/v2.5.4/proxysql-2.5.4-1-centos7.x86_64.rpm
yum -y  localinstall proxysql-2.5.4-1-centos7.x86_64.rpm

2.启动服务。

systemctl enable --now proxysql

在这里插入图片描述
3.连接proxysql服务,通过mysql客户端连接,默认账号/密码:admin/admin。

yum -y install mariadb
mysql -uadmin -padmin -P6032 -h127.0.0.1

在这里插入图片描述

三、proxysql管理配置

  • ProxySQL使用的是SQLite3数据库,通过SQLite3引 擎进行解析、操作的。与MySQL关系型数据库的语法稍有不同,但ProxySQL会对不兼容的语法自动进行调整,比如desc命令就玩不了,需要使用命令查看pragma table_info(“表名”);
  • peoxysql中的数据都是以文件方式保存,文件里都是key/value形式保存数据,不能通过vim编辑器修改,只能通过特有的sql语句对其配置项修改。
  • 每次修改数据后,需要load、save保存到磁盘,不然重启服务修改的数据会消失。

3.1 内置库

库名 作用 备注
main 最重要的库,是一个内存数据库系统。
用于存放后端db实例、用户认证、路由规则等信息。
修改main库中的配置后,必须将其持久化到disk上才能永久保存。
disk 磁盘数据库,该数据库结构和内存数据库完全一致。
当持久化内存数据库中的配置时,其实就是写入到disk库中。
磁盘数据库的默认路径为 $DATADIR/proxysql.db
stats 统计信息库。包括到后端各命令的执行次数、流量、processlist、查询各类汇总、执行时间等。 这个库中的数据一般是在检索其内数据时临时填充的,它保存在内存中。<>br因为没有相关的配置项,所以无需持久化
monitor 是监控后端MySQL节点相关的库,主要是对后端db的健康、延迟检查。 该库中只有几个log类的表,
监控模块收集到的监控信息全都存放到对应的log表中
stats_history 是1.4.4版新增的库,用于存放历史统计数据。 默认路径为 $DATADIR/proxysql_stats.db

3.1.1 main库表

表名 作用
runtime_global_variables global_variables的运行时版本
runtime_mysql_group_replication_hostgroups mysql_group_replication_hostgroups的运行时版本
runtime_mysql_query_rules mysql_query_rules的运行时版本
runtime_mysql_replication_hostgroups mysql_replication_hostsgroups的运行时版本
runtime_mysql_servers mysql_servers的运行时版本
runtime_mysql_users mysql_users的运行时版本
runtime_scheduler scheduler调度程序的运行时版本
mysql_replication_hostgroups 定义hostgroup的主从关系。
mysql_server表字段 释义
hostgroup_id ProxySQL通过hostgroup的形式组织后端db实例,一个hostgroup代表同属于一个角色。
表的主键是(hostgroup_id, hostname, port),以hostname:port在多个hostgroup中存在。
一个hostgroup可以有多个实例,即是多个从库,可能通过weight分配权重。
hostgroup_id 0是一个特殊的hostgroup,路由查询的时候,没有匹配到规则则默认选择hostgroup 0。
status ONLINE:当前后端实例状态正常。
SHUNNED:临时被剔除,可能因为后端too many connection error,或者超过了max_replication_lag。
OFFLINE_SOFT:软离线状态,不再接受新的连接,但已建立的连接会等待活跃事务完成。
OFFLINE_HARD:硬离线状态,不再接受新的连接,已建立的连接或被强制中断,当后端实例宕机或网络不可达,会出现。
max_connections 允许连接到该后端实例的最大连接数,不能大于MySQL的max_connections。
如果后端实例hostname:port在多个hostgroup里,以较大者为准,而不是各自独立允许的最大连接数。
max_replication_lag 允许的最大延迟,主库不受影响,默认为0。
如果>0,monitor模块监控主从延迟大于阈值时,会临时把它的状态变更为SHUNNED。
max_latency_ms mysql_ping响应时间,大于这个阈值会把它从连接池剔除,即使是ONLINE。
comment 备注,不建设为空。
mysql_users表字段 释义
username、password 连接到后端MySQL或ProxySQL实例的凭证,参考密码管理。
密码可插入明文,也可通过PASSWORD()插入密文,proxysql以*开头判断插入是否是密文。
但是runtime_mysql_users里统一是密文,所以明文插入,再SAVE MYSQL USERS TO MEM,此时看到的也是HASH密文。
active 是否生效该用户,active=0的用户将在数据库中被跟踪,但不会加载到内存中的数据结构中。
default_hostgroup 这个用户的请求没有匹配到规则时,默认发到hostgroup,默认0。
default_schema 这个用户连接时没有指定schema时,默认使用的schema。
默认为NULL,实际上受变量mysql-default_schema的影响,默认为information_schema。
transaction_persistent 如果设置为1,连接上ProxySQL的会话后,若在一个hostgroup上开启了事务,那么后续的sql都继续维持在这个hostgroup上,不论是否会匹配上其它路由规则,直到事务结束。
frontend 如果设置为1,则用户名、密码对ProxySQL进行身份验证。
backend 如果设置为1,则用户名、密码根据任何主机组向mysqld服务器进行身份验证。
mysql_query_rules查询规则表 释义
rule_id 表主键,自增,规则处理是以rule_id为顺序进行。
active 只有active=1时的规则才会参与匹配。
username 过滤匹配用户名的条件,如果是非空值,则仅当连接使用正确的用户名时,查询才匹配。
schemaname 匹配schemaname的过滤条件,如果是非空值,则仅当连接schemaname用作默认模式时,查询才匹配。
flagIN,flagOUT,apply 用来定义路由链chains of rules。
首先会检查flagIN=0的规则,以rule_id的顺序;如果没有匹配上,则走这个用户的default_hostgroup。
当匹配一条规则后,会检查flagOUT。
如果不为NULL,并且flagIN!=flagOUT,则进入以flagIN为上一个flagOUT值的新规则链。
如果不为NULL,并且flagIN=flagOUT,则应用这条规则。
如果为NULL,或者apply=1,则结束,应用这条规则。
如果最终没有匹配到,则找到这个用户的default_hostgroup。
client_addr 匹配客户端来源IP。
proxy_addr,proxy_port 匹配本地proxysql的ip、端口。
digest 精确匹配的查询。
match_digest 正则匹配查询。query,digest是指对查询去掉具体值后进行”模糊化“后的查询,类似pt-query-digest的效果。
match_pattern 正则匹配查询。
negate_match_pattern 反向匹配,相当于对match_digest/match_pattern的匹配取反。
re_modifiers 修改正则匹配的参数,比如默认的:忽略大小写CASELESS、禁用GLOBAL。
replace_pattern 查询重写,默认为空。
destination_hostgroup 路由查询到这个hostgroup,当然如果用户显式start transaction且transaction_persistent=1,
那么即使匹配到了,也依然按照事务里第一条sql的路由规则去走的。
cache_ttl 查询结果缓存的毫秒数。
timeout 这一类查询执行的的最大时间(毫秒),超时则自动kill。后端DB的保护机制
retries 语句在执行失败时,重试次数。默认由mysql-query_retries_on_failure变量指定,为1。建议不要重试,有风险。
delay 查询延迟执行,这是ProxySQL提供的限流机制,会让其它的查询优先执行。
默认值mysql-default_query_delay为0。
mirror_flagOUT,mirror_hostgroup 与镜像相关的设置。
error_msg 默认为NULL,如果指定了则这个查询直接被block掉,将error_msg返回给客户端。
multiplex 连接是否利用,请参考文章。
log 是否记录查询日志,可以看到log是否记录的对象是根据规则。
scheduler调度表 释义
id 调度程序作业的唯一标识符。
active 如果设置为1,则作业处于活动状态。
interval_ms 工作的开始频率(以毫秒为单位),最小interval_ms为100毫秒
filename 可执行文件的完整路径。
arg1-arg5 传递作业的参数。最多5个。
comment 注释。

3.1.2 stats库表

stats_mysql_commands_counters表 释义
command 已执行的SQL命令的类型,如FLUSH、INSERT、KILL、SELECT FOR UPDATE等。
Total_Time_us 执行该类型命令的总时间(以毫秒为单位)。
Total_cnt 执行该类型的命令的总数。
cnt_100us-cnt_INFs 在指定的时间限制内执行的给定类型的命令总数和前一个命令的总数。
stats_mysql_connection_pool表 释义
hostgroup 后端服务器所属的主机组,单个后端服务器可以属于多个主机组。
srv_host,srv_port mysqld后端服务器正在侦听连接的TCP端点的IP和Port。
status 后端服务器的状态。可以有ONLINE,SHUNNED,OFFLINE_SOFT,OFFLINE_HARD。
ConnUsed ProxySQL当前使用多少个连接来向后端服务器发送查询。
ConnFree 目前有多少个连接是空闲。
ConnOK 成功建立了多少个连接。
ConnERR 没有成功建立多少个连接。
Queries 路由到此特定后端服务器的查询数。
Bytes_data_sent 发送到后端的数据量。
Bytes_data_recv 从后端接收的数据量。
Latency_ms 从Monitor报告的当前ping以毫秒为单位的延迟时间。
stats_mysql_global表 释义
Variable_Name 代表与MySQL相关的代理级别的全局统计。
如Client_Connections_aborted:由于无效凭据或max_connections而导致的前端连接数已达到。
如Client_Connections_connected:当前连接的前端连接数。
如Client_Connections_created:到目前为止创建的前端连接数。等等。
Variable_Value 统计所对应的值。
stats_mysql_processlist表 释义
ThreadID ProxySQL线程的内部ID。
SessionID ProxySQL会话ID,通过这个ID可以进行kill操作。
user 与MySQL客户端连接到ProxySQL的用户。
db 当前选择的数据库。
cli_host,cli_port 连接ProxySQL的IP和TCP端口。
hostgroup 当前主机组。如果正在处理查询,则是查询已被路由或将要路由的主机组,或默认主机组。
可以通过这个查看该SQL到底是到哪个HG里。
l_srv_host,l_srv_port ProxySQL的IP和TCP端口。
srv_host,srv_port 后端MySQL服务器的IP和端口。
command 正在执行的MySQL查询的类型。
time_ms 命令执行的时间(以毫秒为单位)。
info 正在执行的SQL。
stats_mysql_query_digest表 释义
hostgroup 发送查询的主机组。值-1表示查询查询缓存。
schemaname 查询的数据库。
user 连接ProxySQL的用户名。
digest 一个十六进制散列,表示其参数剥离的SQL。
digest_text 参数剥离的实际SQL文本
count_star 执行查询的总次数(参数的值不同)。
first_seen unix时间戳,是通过代理路由查询的第一时刻。
last_seen unix时间戳,当查询通过代理路由时的最后一刻(到目前为止)。
sum_time 执行此类查询的总时间(以微秒为单位)。
min_time,max_time - 执行此类查询时期望的持续时间范围。
min_time是到目前为止所看到的最小执行时间。
max_time表示最大执行时间,以微秒为单位。
stats_mysql_query_rules表 释义
rule_id 路由规则的ID与main.mysql_query_rules的id对应。
hits 此路由规则的匹配总数。 如果当前传入的查询符合规则,则会记录一次命中。

3.1.3 monitor库

表名 作用
mysql_server_connect/mysql_server_connect_log 连接到所有MySQL服务器以检查它们是否可用,该表用来存放检测连接的日志。
由变量mysql-monitor_connect_interval来控制其检测的时间间隔,
由参数mysql-monitor_connect_timeout控制连接是否超时(默认200毫秒)。
mysql_server_ping/mysql_server_ping_log 使用mysql_ping API ping后端MySQL服务器检查它们是否可用,该表用来存放ping的日志。
由变量mysql-monitor_ping_interval控制ping的时间间隔,默认值:10000(毫秒,相当于10秒)。
mysql_server_replication_lag_log 后端MySQL服务主从延迟的检测。
由参数mysql-monitor_replication_lag_interval控制检测间隔时间, 如果复制滞后太大,可以暂时关闭从。
由mysql_servers.max_replication_lag列控制。默认值:10000(毫秒,相当于10秒)。

3.2 常用管理变量

区分admin管理接口的用户名和mysql_users中的用户名:

  • admin管理接口的用户是连接到管理接口(默认端口6032)上用来管理、配置ProxySQL的。
  • mysql_users表中的用户名是应用程序连接ProxySQL(默认端口6033),以及ProxySQL连接后端MySQL Servers使用的用户。它的作用是发送、路由SQL语句,类似于MySQL Server的3306端口。所以,这个表中的用户必须已经在后端MySQL Server上存在且授权了。
  • admin管理接口的用户必须不能存在于mysql_users中,这是出于安全的考虑,防止通过admin管理接口用户猜出mysql_users中的用户。

注意事项:

  • 命令中的有些单词可以简写。比如disk/memory/runtime/config可以缩写,只要能识别即可。
  • 例如memory可以缩写为mem,runtime可以缩写为run。

3.2.1 添加管理用户

基本了解:

  • admin-admin_credentials变量控制的是admin管理接口的管理员账户。
  • 默认的管理员账户和密码为admin/admin,但是这个默认的用户只能在本地使用。
  • 如果想要远程连接到ProxySQL必须自定义一个管理员账户。

1.连接本地proxysql,查看当前用户密码。

mysql -uadmin -padmin -P6032 -h127.0.0.1
select @@admin-admin_credentials;

2.添加新管理员帐户qingjun/citms。

set admin-admin_credentials='admin:admin;qingjun:citms';

//刷新,保存到磁盘。
load admin variables to runtime;
save admin variables to disk;

3.其他服务器连接prosysql。

mysql -uqingjun -pcitms -P6032 -h192.168.161.129

在这里插入图片描述
4.查看proxysql用户表。

//根据表的字段来查看,与mysql语法相同。
select * from global_variables where variable_name='admin-admin_credentials';  


//根据proxysql语法查看。
select @@admin-admin_credentials;

在这里插入图片描述

3.2.2 添加普通用户

基本了解:

  • admin-stats_credentials 变量控制admin管理接口的普通用户,这个变量中的用户没有超级管理员权限,只能查看monitor库和main库中关于统计的数据,其它库都是不可见的,且没有任何写权限。
  • 默认的普通用户名和密码均为 stats ,与admin一样,默认只能用于本地登录,若想远程查看则要添加查看的专有用户。

1.只能查看到monitor、main库的内容。

mysql -ustats -pstats -P6032 -h127.0.0.1

在这里插入图片描述
2.设置远程连接用户。

set admin-stats_credentials='stats:stats;baimu:123456'; 
load admin variables to runtime;
save admin variables to disk;

在这里插入图片描述
3.使用远程用户在其他机器上登录proxysql。

mysql -ubaimu -p123456 -h192.168.161.129 -P6032

在这里插入图片描述

3.2.3 修改监听套接字

基本了解:

  • admin-mysql_ifaces 变量指定admin接口的监听地址,格式为冒号分隔的hostname:port列表。默认监听在 0.0.0.0:6032

1.默认的监听套接字是0.0.0.0:6032。

select @@admin-mysql_ifaces;

在这里插入图片描述
2.修改监听端口。

//修改监听端口为8888,之后连接proxysql就是用8888连接。
set admin-mysql_ifaces='0.0.0.0:8888';
load admin variables to runtime;
save admin variables to disk;

在这里插入图片描述
3.去除-h参数登录。

//创建默认套接字存放目录。
mkdir /var/lib/mysql/
chown -R proxysql.proxysql /var/lib/mysql/


//使用管理员用户修改。
mysql -uadmin -padmin -P8888 -h127.0.0.1
set admin-mysql_ifaces='0.0.0.0:8888;/var/lib/mysql/mysql.sock'; 
load admin variables to runtime;
save admin variables to disk;

在这里插入图片描述

四、多层配置系统

多层匹配系统的好处:

  • 可以在线修改几乎所有配置(仅有的两个需要重启才能生效的变量为 mysql-threads 和 mysql-stacksize ),并在线生效、持久化保存。

4.1 系统结构

  1. 最底层是disk库和主配置文件/etc/proxysql.cnf 。ProxySQL第一次启动时,读取的是主配置文件,此时会生成proxysql.db文件。此后就是从disk 库中读取配置,并加载到内存,最终加载到runtime 生效。
  2. 中间层的是 memory ,表示内存数据库,就是指main 库中不以runtime开头的表。通过管理接口修改的所有配置,都保存在内存数据库(main)中。当 ProxySQL 重启或者崩溃时,这个内存数据库中的数据会丢失,所以需要 save 到 disk 库中。
  3. 最上层的是 runtime ,指main 库中以runtime开头的表,是已生效的配置。所以,修改了 main 库中的配置后,必须 load 到 runtime 数据结构中才能使其生效。
       +-------------------------+
       |         RUNTIME         |
       +-------------------------+
              /|\          |
               |           |
           [1] |       [2] |
               |          \|/
       +-------------------------+
       |         MEMORY          |
       +-------------------------+ _
              /|\          |      |\
               |           |        \
           [3] |       [4] |         \ [5]
               |          \|/         \
       +-------------------------+  +---------------+
       |          DISK           |  |  CONFIG FILE  |
       +-------------------------+  +---------------+


序号[1] :将内存数据库中的配置加载到RUNTIME数据结构中
          LOAD XXX FROM MEMORY
          LOAD XXX TO RUNTIME  (常用)

序号[2] :将RUNTIME数据结构中的配置持久化到内存数据库中
          SAVE XXX FROM RUNTIME
          SAVE XXX TO MEMORY
  
序号[3] :将磁盘数据库中的配置加载到内存数据库中
          LOAD XXX FROM DISK
          LOAD XXX TO MEMORY

序号[4] :将内存数据库中的配置持久化到磁盘数据库中
          SAVE XXX FROM MEMORY
          SAVE XXX TO DISK (常用)

序号[5] :从传统配置文件中读取配置加载到内存数据库中
          LOAD XXX FROM CONFIG


XXX表示要加载、保存的是哪类配置,目前支持一下几类:
1.mysql users
2.mysql servers
3.mysql variables
4.mysql query rules
5.admin variables
6.scheduler
7.proxysql_servers:目前ProxySQL集群功能还处于实验阶段,所以该类配置不应该去使用

4.2 修改变量加载配置

MySQL [(none)]> show tables from disk;
+------------------------------------+
| tables                             |
+------------------------------------+
| global_variables                   |  # (1)
| mysql_collations                   |  # (N)
| mysql_group_replication_hostgroups |  # (2)
| mysql_query_rules                  |  # (3)
| mysql_query_rules_fast_routing     |  # (4)
| mysql_replication_hostgroups       |  # (5)
| mysql_servers                      |  # (6)
| mysql_users                        |  # (7)
| proxysql_servers                   |  # (8)
| scheduler                          |  # (9)
+------------------------------------+


(1)中包含两类变量,以amdin-开头的使用admin variables修改;以mysql-开头的使用mysql variables修改。
(2,5,6)使用mysql servers修改。
(3,4)使用mysql query rules修改。
(7)使用mysql users修改。
(9)使用scheduler修改。
(N)只是一张表,保存的是ProxySQL支持的字符集和排序规则,它是不用修改的
(8)是ProxySQL的集群配置表,该功能目前还处于实验阶段。如果想要配置该功能,则load/save proxysql_servers to/from ...

4.3 启动加载流程

  1. 若ProxySQL 是刚安装的,或者磁盘数据库文件为空(甚至不存在),或者启动 ProxySQL 时使用了选项 --initial,这几种情况启动 ProxySQL 时,都会从传统配置文件 config file 中读取配置加载到内存数据库,并自动 load 到 runtime 数据结构、save到磁盘数据库,这是初始化 ProxySQL 运行环境的过程。
  2. 若不是第一次启动ProxySQL ,由于已经存在磁盘数据库文件,这时 ProxySQL 会从磁盘数据库中读取几乎所有的配置(即使传统配置文件中配置了某项,也不会去解析)。
  3. 有3项是必须从传统配置文件中读取,分别是:
    • datadir:ProxySQL启动时,必须从配置文件中确定它的数据目录,因为磁盘数据库文件、日志以及其它一些文件是存放在数据目录下的。如果使用/etc/init.d/proxysql管理ProxySQL,则除了修改/etc/proxysql.cnf的datadir,还需要修改该脚本中的datadir。
    • restart_on_missing_heartbeats:MySQL线程丢失多少次心跳,就会杀掉这个线程并重启它。默认值为10。
    • execute_on_exit_failure:如果设置了该变量,ProxySQL父进程将在每次ProxySQL崩溃的时候执行已经定义好的脚本。建议使用它来生成一些崩溃时的警告和日志。注意,ProxySQL的重启速度可能只有几毫秒,因此很多其它的监控工具可能无法探测到ProxySQL的一次普通故障,此时可使用该变量

总结: proxysql启动时,会从配置文件/etc/proxysql.cnf加载配置项,当服务启动后会生成/var/lib/proxysql/proxysql.db文件,此后读取的大部分配置都是从/var/lib/proxysql/proxysql.db中读取。

1.proxysql服务已启动,已生成在proxysql.db文件,连接mysql服务器的端口是默认的6033。


2.将proxysql.db删除或移走,修改主配置文件,重启服务,6033变成3306

mv /var/lib/proxysql/proxysql.db  /opt/
vim /etc/proxysql.cnf 
......
interfaces="0.0.0.0:3306"    //将6033修改成3306

systemctl restart proxysql

在这里插入图片描述
3.此时不移走proxysql.db文件,在修改主配置文件该参数为3307,重启服务,发现依然是3306。是因为此时读取的是proxysql.db文件里的参数配置。

vim /etc/proxysql.cnf 
......
interfaces="0.0.0.0:3307"    //将3306改成3307

systemctl restart proxysql

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql进阶1——proxysql中间件 的相关文章

  • SQL查询:按字符长度排序?

    是否可以按字符总数对sql数据行进行排序 e g SELECT FROM database ORDER BY data length 我想你想用这个 http dev mysql com doc refman 5 0 en string f
  • 如何在 mysql 中两次连接同一个表?

    我有2张桌子 其中一个 域 具有域 ID 和域名 dom id dom url 另一列包含实际数据 其中 2 列需要 TO 和 FROM 域名 所以我有 2 列 rev dom from 和 rev dom for 它们都存储域表中的域名
  • 编写多个mysql脚本

    是否可以在复合脚本中包含其他 mysql 脚本 理想情况下 我不想为包含的脚本创建存储过程 对于较大的项目 我想分层维护几个较小的脚本 然后根据需要组合它们 但现在 我很乐意学习如何包含其他脚本 source是一个内置命令 您可以在 MyS
  • MySQL REPLACE 在自动递增行中

    假设我有一个 MySQL 表 其中包含三列 id a and b和名为id is an AUTO INCREMENT场地 如果我将如下查询传递给 MySQL 它将正常工作 REPLACE INTO table id a b VALUES 1
  • 如何在一对一关系上使用 onDelete: 'CASCADE'

    当用户被删除时 我尝试删除用户的个人资料 但它并没有删除个人资料上的任何内容 用户实体 Entity export class User PrimaryGeneratedColumn id number Column name string
  • 用Java将图像添加到数据库

    我正在尝试将图像添加到 mysql 数据库中的 BLOB 字段 图像大小将小于 100kb 但是我遇到了问题 想知道将这些数据添加到数据库的更好方法是什么 com mysql jdbc MysqlDataTruncation 数据截断 第
  • MySQL按总和连接表问题

    我在连接表时遇到问题 以下是示例表 表A 30行 ID Name Description 1 Type Unicode Art 2 Header Spreadsheet 3 Auto Align Off 表B 100行 ID Name De
  • SQL DML:日期值不正确 (MySQL)

    我在数据库中创建了一个表 CREATE TABLE official receipt student no INT UNSIGNED academic year CHAR 8 trimester ENUM 1 2 3 or no MEDIU
  • Mysql 连接到服务器:用户 root@localhost 的访问被拒绝

    edit9 是否有可能我只是缺少文件夹的一些权限 我真的非常非常感谢更多的建议 edit3 由于这篇文章没有得到足够的回复 而且这绝对是至关重要的 我尽快完成这件事 我重建了我的帖子以显示我认为到目前为止我已经扣除的内容 注意 通过许多不同
  • 严格标准:资源 ID#73 用作偏移量,转换为整数

    我使用这个 PHP 函数获取 MySql 结果 function fetcharray query id if query id query id this gt query res if query id this gt q array
  • 如何通过单个mysql查询更新多个表?

    我有两个表 tb1 和 tb2 我必须在用户级别更新两个表的公共列 我对两个表都有一个共同的标准 例如用户名 所以我想这样更新 UPDATE tb1 tb2 SET user level 1 WHERE username Mr X 但不知何
  • MySQL:更新所有行将字段设置为0,但将一行的字段设置为1

    是否有一种有效的方法将行字段的选择更新为 0 但根据 ID 将其中一行设置为 1 基本上 我在数据库中有多个对象 我想在其中一个 inuse 之间切换 因此查询将其中一行 按 id 设置为 inuse 1 将其他行设置为 inuse 0 谢
  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • 计算表中的行数

    获取 MySQL 数据库中特定表的总行数的语法是什么 我一直都这么做 SELECT count FROM table 上面将为您提供所有行的总数 您可以轻松添加 WHERE 子句来获取某个子集的计数 SELECT count FROM ta
  • 使用 PHP 和 jSON 从 MySQL 获取 UIImage

    我正在开发一个小型新闻阅读器 它通过对 URL 执行 POST 请求来从网站检索信息 响应是一个带有未读新闻的 JSON 对象 例如 应用程序上的最新新闻的时间戳为 2013 03 01 当用户刷新表时 它会发布 domain com ap
  • 当我耗尽 bigint 生成的密钥时会发生什么?怎么处理呢?

    我自己无法想象一个好的答案 所以我想在这里问 在我心里 我总是想知道 如果AUTO INCREMENT PRIMARY ID我的专栏MySQL表用完了吗 举例来说 我有一个有两列的表 一个ID auto increment primary
  • MySQL 查询获取每小时计数

    我需要统计每小时发生的操作次数 我的数据库按操作的时间戳保存日志 我明白我可以做一个 SELECT table time COUNT table time from table t group by t time 然而 也有一段时间没有采取
  • 测验程序的 MySql 数据库设计

    我目前正在开发一个项目 主要是创建一个测验应用程序 它将能够进行包含 10 到 20 个问题的多项选择题或简答题的测验 它需要能够根据正确答案检查用户的答案 然后对用户的答案进行评分 稍后 我可能会实现一个后端功能来在线创建测验 但现在我将
  • 多个数据库连接

    我有三张桌子 categories content info and content The categories表包含类别的id及其 IDparent类别 The content info包含两列 entry id帖子的 ID 和cat
  • 未找到教义列:1054“字段列表”中未知列“s.features”

    我在站点表中添加了一个新列 features 并使用 Doctrine 重新生成了模型 此代码导致错误 siteTable Doctrine Core getTable Site site siteTable gt findOneByNam

随机推荐

  • 使用PL/SQL&自定义函数(Oracle)

    1 PL SQL概述 PL SQL是过程语言PL与结构化查询语言SQL结合而成的编程语言 PL SQL是针对Oracle数据库的 它是过程语言 结构化查询语言的结合 过程语言PL 如变量声明 流程的控制 循环等 查询语言SQL SQL语言
  • NER实体识别漏标对模型性能的影响及优化方法

    论文地址 https arxiv org pdf 2012 05426 pdf 1 先简单介绍一下一些基础的东西 我们在进行实体识别 NER 的时候 标注成本是很大的 同时难免会遇到标错和漏标实体的情况 在我看来 漏标和标错可以说是一个概念
  • Python飞机大战(完整版)

    简介 一共分为2个py文件 分别是主类 和精灵类 飞机大战图片地址 链接 https pan baidu com s 18T6n9JFIDxBqYX9CnHi7ZQ 密码 tqbr 注释 项目启动后如果报libpng warning iCC
  • STM32F103移植FreeRTOS必须搞明白的系列知识---3(堆栈)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • com.netflix.discovery.shared.transport.TransportException(问题解决)

    com netflix discovery shared transport TransportException Cannot execute request on any known server com sun jersey api
  • pymysql语句使用变量

    pymysql语句中想要使用变量的方法 1 替代 cursor excute insert into table1 values s value 2 逗号传参 cursor excute insert into table1 values
  • Linux下在非root权限下修改gcc版本(亲测可用)

    一 前言 最近在安装 香港中文大学 商汤科技联合实验室开源的基于 PyTorch 的检测库 mmdetection时候发现gcc版本需要在4 9以上 但是考虑到实验室服务器集群上gcc的版本还是比较旧的 作为一个非root用户又没有操作权限
  • STM32移植到GD32(以32的工程为模板简单三步完成移植)

    STM32移植到GD32 一 移植说明 最近有个项目想用GD替代原有的STM32 因为GD的成本更低 然后我就找了一些GD的资料 发现目前网上已有的一些资料都比较老 比如ST移植到GD的攻略 很多都停留在GD刚推广不久的过渡时期 目前已经不
  • 数据结构之排序:快速排序

    快速排序 Quick Sort 由 C A Hoare 在1962年提出 是冒泡排序的一种改进 采用了分治策略 将原问题划分成若干个规模更小但与原问题相似的子问题 然后递归方法解决 合并问题的解 基本思想 通过一趟排序将序列分割成独立的两个
  • C++ & QT 琐碎知识点

    此文仅记录C 和QT 学习过程中一些琐碎知识点 shadow build 是将源码路径和构建路径分开 主要将makefile和其它生成的文件分开 保证源码文件的清洁 qmke和cmake都有采用 pro user 用于记录打开工程的路径 所
  • SpringCloud Stream消息驱动

    目录 一 SpringCloud Stream概述 二 Binder 三 Consumer Groups 针对消费者 四 Publish Subscribe 介绍一下yml配置的含义 五 消息分组 六 消息分区 1 生产者方配置 2 消费者
  • osgEarth的Rex引擎原理分析(三十五)osgEarth地球椭球体ellipsoid 大地基准面datum 地图投影Projection详解

    目标 二十九 中的问题83 地球椭球体的中心为地心 形状为椭球体 大地基准面是适应某一区域的椭球体 球体中心不一定在地心 地图投影是球面和平面映射关系的方法 Horizontal Datum A datum is a reference p
  • 学Transformer前,你需要了解的Attention机制(基于注意力机制的Seq2seq可视化神经机器翻译模型)

    在我们开始学习transformer之前 应该了先解下什么是attention注意力机制 相关内容获取 欢迎关注公众号 AI技术星球 发送 222 序列到序列 Sequence to sequence 模型已经在机器翻译 文本摘要和图像字幕
  • ubuntu18.04 配置nfs服务

    1 安装nfs服务器软件 sudo apt install nfs kernel server 2 修改配置文件 添加nfs server上用于共享的目录 并设置允许访问该目录的客户机IP 及其读写权限 sudo vim etc expor
  • YOLOV5 和 Yolov5s各个版本的 发展史、论文、各个版本代码资源分享合集 !!!

    点击上方 码农的后花园 选择 星标 公众号 精选文章 第一时间送达 2020年2月份YOLO之父Joseph Redmon宣布退出计算机视觉的研究的时候 很多人都以为目标检测神器YOLO系列就此终结 没想到的是 2020年4月份曾经参与YO
  • 后台获取数据库时间出现的格式问题记录

    问题描述 要从数据库获取时间类型然后传给前台页面 数据库中的时间格式是yyyy MM dd HH mm ss 如图所示 但是获取出来时格式就变成了Mon Dec 13 10 04 16 CST 2021这种 解决 可以在前端或者后端解决 后
  • MYSQL数据库和表

    一 安装MYSQL数据库时生成系统使用的数据库 1 显示数据库 2 创建数据库 3 选择数据库 mysql gt use stusys Database changed 4 修改数据库 mysql gt alter database stu
  • win32应用程序_不是有效的win32应用程序怎么解决

    在日常办公中经常用到电脑 有许多使用技巧 本次给大家介绍不是有效的win32应用程序怎么办 快来看看吧 方法一 不是有效的win32应用程序表示这个应用程序和系统不兼容 用户可以在计算机属性页面查看系统是32位还是64位 之后下载相对应的应
  • 【源码】贝叶斯变化点检测与时间序列分解

    BEAST 突变 季节性和趋势的贝叶斯估计器 是一种快速 通用的贝叶斯模型平均算法 用于将时间序列或1D序列数据分解为单个组件 例如突变 趋势和周期 季节性变化 如Zhao等人 2019 所述 BEAST可用于变化点检测 即断点或结构中断
  • mysql进阶1——proxysql中间件

    文章目录 一 基本了解 二 安装部署 三 proxysql管理配置 3 1 内置库 3 1 1 main库表 3 1 2 stats库表 3 1 3 monitor库 3 2 常用管理变量 3 2 1 添加管理用户 3 2 2 添加普通用户