支持在服务端口直接使用SQL语句进行在线修改分片字段的操作,业务表在变更期间不会锁表,业务可对原表进行正常的SIUD操作。
alter修改分片字段语法如下:
alter table table_name change shard column new_column;例如将源表sbtest1分片字段id修改为k,执行:
mysql> alter table sbtest1 change shard column k;
Query OK, 0 rows affected (2 min 2.27 sec)支持在服务端口直接使用SQL语句进行在线查询mysql系统库里的user表数据。伪mysql库的意思是:计算节点在安装后,并不会自动创建一个名为 mysql 的数据库,同时也不允许手动创建mysql库,但是此mysql库是隐式存在的,库中主要存储的有用户权限表,其中user表用来记录允许连接到计算节点的账号信息。
注意 在 user 表里显示的所有权限都是全局级的,适用于所有数据库。user表数据不允许手动修改,仅可以通过mysql.user的方式进行查询。
user表的字段信息说明如下:
字段名 | 说明 |
|---|---|
host | 显示在管理平台界面上配置的数据库用户对应的主机名 |
user | 显示在管理平台界面上配置的数据库用户名 |
authentication_string | 显示在管理平台界面上配置的数据库用户的主密码 |
select_priv | 显示此数据库用户是否拥有全局SELECT命令查询操作的权限,与数据库用户配置的全局权限有关 |
insert_priv | 显示此数据库用户是否拥有全局INSERT命令插入数据操作的权限,与数据库用户配置的全局权限有关 |
update_priv | 显示此数据库用户是否拥有全局UPDATE命令修改现有数据操作的权限,与数据库用户配置的全局权限有关 |
delete_priv | 显示此数据库用户是否拥有全局DELETE命令删除现有数据操作的权限,与数据库用户配置的全局权限有关 |
create_priv | 显示此数据库用户是否拥有全局CREATE命令创建新的数据库或表操作的权限,与数据库用户配置的全局权限有关 |
drop_priv | 显示此数据库用户是否拥有全局DELETE命令删除现有数据库或表操作的权限,与数据库用户配置的全局权限有关 |
reload_priv | 同super_priv |
shutdown_priv | 固定值为N |
process_priv | 固定值为N |
file_priv | 显示此数据库用户是否拥有全局FILE命令操作的权限,与数据库用户配置的全局权限有关 |
grant_priv | 同super_priv |
references_priv | 同create_priv |
index_priv | 同create_priv |
alter_priv | 显示此数据库用户是否拥有全局ALTER命令重命名和修改表结构操作的权限,与数据库用户配置的全局权限有关 |
show_db_priv | 固定值为Y |
super_priv | 显示此数据库用户是否拥管理端访问及操作的权限,与数据库用户配置的全局权限有关 |
create_tmp_table_priv | 固定值为N |
lock_tables_priv | 固定值为N |
execute_priv | 固定值为Y |
repl_slave_priv | 固定值为N |
repl_client_priv | 固定值为N |
create_view_priv | 本同create_priv |
show_view_priv | 固定值为Y |
create_routine_priv | 同create_priv |
alter_routine_priv | 同alter_priv |
create_user_priv | 同super_priv |
event_priv | 固定值为N |
trigger_priv | 同create_priv |
create_tablespace_priv | 固定值为N |
ssl_type | 固定值为空 |
ssl_cipher | 固定值为空 |
x509_issuer | 固定值为空 |
x509_subject | 固定值为空 |
max_questions | 固定值为0 |
max_updates | 固定值为0 |
max_connections | 与计算节点参数中maxConnections字段值保持一致,此值为全局值,表示为前端最大连接数。 |
max_user_connections | 显示配置的用户最大连接数 |
plugin | 固定值为mysql_native_password |
password_expired | 固定值为N |
password_last_changed | 与计算节点的配置库中hotdb_user表中的update_time字段值保持一致,为密码修改的最近的一次时间 |
password_lifetime | 固定值为NULL |
account_locked | 会根据用户是否被锁定来进行显示(Y锁定,N未锁定) |
create_role_priv | 固定值为N,仅存储节点8.0以上版本显示。 |
drop_role_priv | 固定值为N,仅存储节点8.0以上版本显示。 |
password_reuse_history | 固定值为NULL,仅存储节点8.0以上版本显示。 |
password_reuse_time | 固定值为NULL,仅存储节点8.0以上版本显示。 |
password_reuse_current | 固定值为NULL,仅存储节点8.0以上版本显示。 |
user_attributes | 固定值为NULL,仅存储节点8.0以上版本显示。 |
查询mysql.user表数据,执行示例如下:
root@127.0.0.1:hotdb 5.7.25 06:44:26> select * from mysql.user\G
*************************** 1. row ***************************
HOST: %
USER: root
SELECT_PRIV: Y
INSERT_PRIV: Y
UPDATE_PRIV: Y
DELETE_PRIV: Y
CREATE_PRIV: Y
DROP_PRIV: Y
RELOAD_PRIV: Y
SHUTDOWN_PRIV: N
PROCESS_PRIV: N
FILE_PRIV: Y
GRANT_PRIV: Y
REFERENCES_PRIV: Y
INDEX_PRIV: Y
ALTER_PRIV: Y
SHOW_DB_PRIV: Y
SUPER_PRIV: Y
CREATE_TMP_TABLE_PRIV: N
LOCK_TABLES_PRIV: N
EXECUTE_PRIV: Y
REPL_SLAVE_PRIV: N
REPL_CLIENT_PRIV: N
CREATE_VIEW_PRIV: Y
SHOW_VIEW_PRIV: Y
CREATE_ROUTINE_PRIV: Y
ALTER_ROUTINE_PRIV: Y
CREATE_USER_PRIV: Y
EVENT_PRIV: N
TRIGGER_PRIV: Y
CREATE_TABLESPACE_PRIV: N
SSL_TYPE:
SSL_CIPHER:
X509_ISSUER:
X509_SUBJECT:
MAX_QUESTIONS: 0
MAX_UPDATES: 0
MAX_CONNECTIONS: 5000
MAX_USER_CONNECTIONS: 0
PLUGIN: mysql_native_password
AUTHENTICATION_STRING: *7453ab8f069c2d2bafa64669db5771059e3fc946
PASSWORD_EXPIRED: N
PASSWORD_LAST_CHANGED: 2022-12-12 00:00:00
PASSWORD_LIFETIME: NULL
ACCOUNT_LOCKED: N
CREATE_ROLE_PRIV: N
DROP_ROLE_PRIV: N
PASSWORD_REUSE_HISTORY: NULL
PASSWORD_REUSE_TIME: NULL
PASSWORD_REQUIRE_CURRENT: NULL
USER_ATTRIBUTES: NULL
1 row in set (0.00 sec)DBLINK
支持DBLINK功能,可与MySQL、Oracle或其他流行数据库建立通信连接,执行跨不同类型的数据库的查询等操作。此外还可使用DBLINK功能读取外部文件数据。
1.创建DBLINK语法
建立外部数据库连接
CREATE [PUBLIC] DATABASE LINK link_name
CONNECT TO remote_username IDENTIFIED BY 'remote_password'
USING 'jdbcurl'
WITH 'driver=oracle.jdbc.driver.OracleDriver;jar=ojdbc8.jar,ucp.jar;';建立外部文件连接
CREATE [PUBLIC] DATABASE LINK link_name
USING 'file'
WITH 'format=csv;location=/data/csv_data';2.语法说明
该语句的作用是创建一个数据库链接,允许当前数据库与另一个远程数据库或外部文件建立连接,并使用给定的用户名、密码和JDBC连接等信息。目前针对外部数据库,计算节点支持与MySQL、Oracle或其他流行数据库建立通信连接。
建立外部数据库连接语法说明如下:
注意 由于不同版本的Oracle有不同的jar包,因此用户需要自己上传jar包至/lib路径下,也就意味着使用Oracle的DBLINK必须填写WITH语句。
建立外部文件连接语法说明如下:
USING 'file':区别于USING 'jdbcurl',此处为固定格式,无需修改参数,表示使用外部文件;
WITH format:指定连接的文件格式,目前仅支持CSV。CSV文件需要在首行标明列名和数据类型。
注意 A.支持的数据类型:string、boolean、byte、char、short、int、long、float、double、date、timestamp、time、decimal(a,b)。若不指定数据类型,默认为string。 B.日期类型数据需以短横线-为分隔符,如:2023-08-23 C.decimal类型的字段需加双引号“”,如:“b:decimal(5,2)”
CSV示例:
DEPTNO:int,NAME:string
10,"Sales"
20,"Marketing"
30,"Accounts"3.语法示例
MySQL> CREATE DATABASE LINK linkname1 CONNECT TO test IDENTIFIED BY 'test' USING 'jdbc:oracle:thin:@//192.168.240.66:1521/pdb01' WITH 'driver=oracle.jdbc.driver.OracleDriver;jar=ojdbc8.jar,ucp.jar;';
-- 创建名为linkname1的DBLINK,通过用户test连接Oracle数据库
MySQL> CREATE PUBLIC DATABASE LINK public_linkname1 CONNECT TO test IDENTIFIED BY 'test' USING 'jdbc:oracle:thin:@//192.168.240.66:1521/pdb01' WITH 'driver=oracle.jdbc.driver.OracleDriver;jar=ojdbc8.jar,ucp.jar;';
-- 创建名为public_linkname1的PUBLIC DBLINK,通过用户test连接Oracle数据库
MySQL> CREATE DATABASE LINK linkname2 CONNECT TO test IDENTIFIED BY 'test' USING 'jdbc:mysql://192.168.240.66:3323/hotdb';
-- 创建名为linkname2的DBLINK,通过用户test连接MySQL的hotdb数据库
MySQL> CREATE PUBLIC DATABASE LINK public_linkname2 CONNECT TO test IDENTIFIED BY 'test' USING 'jdbc:mysql://192.168.240.66:3323/hotdb';
-- 创建名为public_linkname2的PUBLIC DBLINK,通过用户test连接MySQL的hotdb数据库4.注意事项
ERROR: [CREATE] command denied to user '<数据库用户>' to database link '<dblink名>'ERROR: duplicate database link name外部数据库DBLINK操作
1.使用DBLINK语法 支持通过SQL语句来使用DBLINK对远程数据库的表进行操作,DBLINK的语法格式如下:
<表名>@link_name2.语法示例
MySQL> SELECT * FROM table1@linkname1;
-- 向linkname1内的表table1查询数据
MySQL> SELECT * FROM "TestA"@linkname2;
-- 向linkname2内的表“TestA”(大小写敏感的表名)查询数据
MySQL> SELECT * FROM table0 join table1@linkname1 on join_condition;
-- 查询table0与linkname1内的表table1的join关联,根据一定的join条件进行查询MySQL> INSERT INTO table1@linkname2 values(aaa,bbb,ccc);
-- 向linkname2内的表table1插入数据:MySQL> UPDATE table1@linkname2 set xxx=yyy where aaa=bbb;
-- 向linkname2内的表table1更新数据:MySQL> DELETE from table1@linkname2 where xxx=yyy;
-- 向linkname2内的表table1删除数据:3.注意事项
使用DBLINK无法访问或者JDBC URL填写错误,则报错无法解析指定的JDBC连接:
ERROR: could not resolve the JDBC connect specified数据库用户A :仅拥有逻辑库a的SELECT权限,没有全局的SELECT权限: 允许的操作:可以在逻辑库a内使用dblink的select语句,也可以使用public dblink的select语句。 不允许的操作:无法使用除了SELECT以外其他权限语句,也无法在其他逻辑库内使用dblink。 数据库用户B :仅有全局的SELECT权限: 允许的操作:可以在任何逻辑库内使用dblink的select语句,也可以使用public dblink的select语句。 不允许的操作:无法使用除了SELECT以外其他权限语句。
外部文件数据DBLINK操作
当使用DBLINK与外部文件创建链接时,计算节点支持对外部文件数据的查询,支持与内部表关联查询,支持更新与删除内部表join外部文件,此时外部文件数据仅作为SQL语句的执行条件。外部文件DBLINK的语法格式如下:
<文件名>@link_name
-- <文件名>:填写存放在计算节点对应目录下,需要执行操作的CSV文件名;
-- link_name:填写创建DBLINK时配置的link_name;
-- 执行操作时,会去对应DBLINK配置的路径下寻找该文件名对应的文件;1.支持使用SELECT查询语句,支持内部表关联查询
示例:
SELECT * FROM file1@linkname1;
-- 查询名为linkname1的DBLINK链接下的file1文件数据
SELECT * FROM table0 JOIN file1@linkname1 on join_condition;
-- 从内部表table0和名为linkname1的DBLINK连接的外部文件file1中,根据特定的JOIN关联条件执行联接查询
SELECT * FROM table0 WHERE id in (select id from file1@linkname1);
-- 查询内部表table0中与DBLINK外部文件file1中id字段匹配的所有数据
SELECT * FROM file1@linkname1 WHERE id in (select id from table0);
-- 查询DBLINK外部文件file1数据中与内部表table0中id字段匹配的所有数据注意 查询时,系统会自动搜索搭建DBLINK时配置的文件路径,去该目录下搜索对应文件。文件需存放在所有计算节点的相同路径下。
2.支持使用INSERT 插入语句,从外部文件中选择数据并将其插入到内部表
示例:
INSERT INTO table0 SELECT * FROM file1@linkname1;
-- INSERT INTO table0:表示要将数据插入到名为“table0”的内部表中
-- SELECT * FROM file1@linkname1:表示要从位于DBLINK链接“linkname1”的外部文件“file1”中选择所有数据。
-- 通过这个语句,将文件“file1”中的数据插入到表“table0”中注意 需要确保链接“linkname1”是正确配置的,并且数据结构与类型等方面是匹配的
4/支持使用UPDATE修改内部表JOIN外部文件,此时外部文件仅作为条件
示例:
UPDATE table0 JOIN file1@linkname1 on join_condition set table0.xxx=file1@linkname1.xxx WHERE file1@linkname1.id=1;
-- 通过连接条件,将内部表table0中与外部文件file1通过名为linkname1的DBLINK连接的数据进行修改;
-- 将内部表table0的字段xxx更新为外部文件file1中id为1的记录对应的字段xxx的值1.修改DBLINK语法
修改外部数据库DBLINK
ALTER [PUBLIC] DATABASE LINK link_name
CONNECT TO remote_username IDENTIFIED BY 'remote_password'
USING 'jdbcurl'
[ WITH 'driver=oracle.jdbc.driver.OracleDriver;jar=ojdbc8.jar,ucp.jar;' ];修改外部文件DBLINK
ALTER [PUBLIC] DATABASE LINK link_name
USING 'file'
WITH 'format=csv;location=/data/csv_data';2.语法说明 该语句中的参数与CREATE DATABASE LINK逻辑一致,其作用是修改一个已存在的数据库链接的连接信息,变更其远程数据库连接的用户名、密码、连接字符串。或修改一个已存在的外部文件数据DBLINK的连接信息,变更需要建立链接的文件路径。
3.语法示例
MySQL> ALTER DATABASE LINK linkname1 CONNECT TO test IDENTIFIED BY 'test' USING 'jdbc:oracle:thin:@//192.168.240.66:1521/pdb01' WITH 'driver=oracle.jdbc.driver.OracleDriver;jar=ojdbc8.jar,ucp.jar;';
-- 修改名为linkname1的DBLINK(Oracle),更新remote_username、remote_password、jdbcurl、driver的信息。
MySQL> ALTER PUBLIC DATABASE LINK public_linkname1 CONNECT TO test IDENTIFIED BY 'test' USING 'jdbc:oracle:thin:@//192.168.240.66:1521/pdb01' WITH 'driver=oracle.jdbc.driver.OracleDriver;jar=ojdbc8.jar,ucp.jar;';
-- 修改名为public_linkname1的PUBLIC DBLINK(Oracle),更新remote_username、remote_password、jdbcurl、driver的信息。
MySQL> ALTER DATABASE LINK linkname2 CONNECT TO test IDENTIFIED BY 'test' USING 'jdbc:mysql://192.168.240.66:3323/hotdb';
-- 修改名为linkname2的DBLINK(MySQL),更新remote_username、remote_password、jdbcurl的信息。
MySQL> ALTER PUBLIC DATABASE LINK linkname2 CONNECT TO test IDENTIFIED BY 'test' USING 'jdbc:mysql://192.168.240.66:3323/hotdb';
-- 修改名为public_linkname2的PUBLIC DBLINK(MySQL),更新remote_username、remote_password、jdbcurl的信息。4.注意事项
1.删除DBLINK语法
DROP [PUBLIC] DATABASE LINK link_name;2.语法说明
该语句用于删除一个已存在的数据库链接。
3.语法示例
MySQL> DROP DBLINK linkname1;
-- 删除名为linkname1的DBLINK。
MySQL> DROP PUBLIC DBLINK linkname1;
-- 删除名为linkname1的PUBLIC DBLINK。4.注意事项
使用DROP DATABASE LINK语句需要有全局的DROP权限,否则报权限不足提醒:
ERROR: [DROP] command denied to user '<数据库用户>' to database link '<dblink名>'用户可以使用SHOW DBLINKS语句查询已创建的DBLINK。

1.字段说明
2.注意事项
SHOW DBLINKS语句展示当前数据库用户下的所有私有DBLINK信息,及所有公有的PUBLIC DBLINK信息。若当前数据库用户拥有SUPER权限,则展示所有数据库用户下的所有公私有DBLINK信息。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。