#安装准备
ip\dns\yum
关闭fw\selinux
修改主机名
配置hosts
hostnamectl set-hostname tdsql04
vim /etc/hosts
scp /etc/hosts root@192.168.0.101:/etc/hosts
挂载/dada
mkfs.xfs /dev/vdb
vim /etc/fstab
/dev/vdb /data xfs defaults 1 1
mount -a
免密认证
ssh-keygen
ssh-copy-id root@192.168.0.103
========================================================
安装
unzip tdsql_10.3.22.6.0.x86_64.zip
cd tdsql_10.3.22.6.0/tdsql_install/scripts/
./start_deploy.sh
CPU:请填写CPU实际逻辑核数
内存:请填写实际内存绝对值的75%(经验值)
磁盘:请设置为实际磁盘空间(RAID后)绝对值的75%~90%。其中建议数据盘:日志盘的比例为3:1(经验值)
挂在目录、data
计算存储3个节点
其他一个
hdfs一个
安装web界面端口
8081
admin/123456
登录界面
http://ip/tdsqlpcloud/
admin/123456
集群管理集群设置
配置hdfs 单节点9870
创建非分布式实例
创建分布式实例
==========================================
数据库登录,都是通过proxy代理访问
分布式,-c参数查看所有set节点,多set,每个set都有一主多备,主备分布在不同服务器
mysql -h192.168.0.152 -P15002 -ussq -pHuawei12#$% -c
集中式登录,Proxy监控里查看端口和IP,端口是15xxx,主库进行修改操作,备库只能查看,
mysql -h192.168.0.151 -P15003 -u -ppasswd
drop tables t1;
==========================================
1、扩容赤兔
登录控制机
/root/tdsql_10.3.22.6.0/tdsql_install
vim tdsql_add_hosts
[tdsql_newchitu]
tdsql_newchitu1 ansible_ssh_host=192.168.0.3 --->需要填写扩容的赤兔机器ip
cd /root/tdsql_10.3.22.6.0/tdsql_install
ansible-playbook -i tdsql_add_hosts playbooks/tdsql_add_chitu.yml
在原赤兔节点执行
scp -p /data/website/tdsqlpcloud/www/config/database.php 192.168.0.102:/data/website/tdsqlpcloud/www/config/
scp -p /data/website/tdsqlpcloud/www/config/install.lock 192.168.0.102:/data/website/tdsqlpcloud/www/config/
在新赤兔节点执行
chown -R nginx:nginx /data/website
新赤兔服务地址:http://192.168.0.x/tdsqlpcloud
===================================================
2、升级
上传升级工具包/data目录
tdsql_10.3.22.6.0_WEB_UPGRADE.x86_64.zip
tdsql_10.3.22.6.0_WEB_UPGRADE
解压
unzip tdsql_10.3.22.6.0_WEB_UPGRADE.x86_64.zip
cd /data/tdsql_10.3.22.6.0_WEB_UPGRADE/tdsql_install
启动升级程序
bash scripts/upgrade.sh "/root/tdsql_10.3.22.6.0/tdsql_install"
y
http://192.168.0.154:8081
admin/Hp 赤兔的账号密码
软件包管理,上传软件包
/root/tdsql_10.3.22.6.0_WEB_UPGRADE/packages
tdsql-mysql5717-22.6.0.tl2.x86_64.tgz
tdsql-oss-22.6.3.tl2.x86_64.tgz
组件升级,同步组件状态
先升级DB公共包
在升级OSS
最后升级实例
实例 升级 存储节点(只能升备机,主需要主备切换)
\s 检查数据库版本
=======================================================
3、启动hdfs(重启第一节点,需执行)
su - tdsql
hdfs --daemon start journalnode
2)在hdfs1和hdfs2上启动namenode
hdfs --daemon start namenode
3)在hdfs1和hdfs2上启动zkfc
hdfs --daemon start zkfc
4)在所有hdfs机器上启动datanode
hdfs --daemon start datanode
hdfs dfsadmin -report
==================================================
重做备机(非分布式,重新安装一个新节点,同步数据之后,删除旧节点)
添加备机(添加一个新节点,从备节点同步数据)
主备切换
====================================================
4、dcn同步
新建一个数据库,容灾模式与源数据库一直,如一主一备,新数据库,不能有任何数据和账号信息
然后“数据同步”选中dcn同步,可以是不同集群的实例同步,也可以是同集群不同实例同步。
删除同步实例,需要先把dcn同步关闭,并删除
===================================================
5、备份
先把hdfs服务器配置好,在集群管理-集群设置-点击集群-修改配置,服务器列表HDFS,单节点端口:9870
,分布式数据库备份,会提示OC解密失败,可能是数据库还没有完全启动,可以等一会,多尝试几次
===================================================
6、回档
集中数据库会重新按源数据库模式,进行一比一复制,执行sql语句,回档操作
====================================================
7、闪回
主动闪回,有仅写日志和真正闪回,忽略闪回范围内DDL
可根据时间和guid闪回
查询 TDSQL MySQL 的 GUID
GTID(Global Transaction Identifier,全局事务标识符)用于标识每一个已提交的事务,以下是查询方式:
分布式数据库只能用时间闪回,不能用gtid
集中数据库闪回
2026-03-25 04:43:23
MySQL [test]> select * from bb;
+---+------+
| a | b |
+---+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+---+------+
3 rows in set (0.00 sec)
MySQL [test]> delete from bb where a=1;
Query OK, 1 row affected (0.00 sec)
MySQL [test]> select * from bb;
+---+------+
| a | b |
+---+------+
| 2 | 2 |
| 3 | 3 |
+---+------+
2 rows in set (0.00 sec)
-----------------------
执行闪回,尽写日志,
闪回时间:2026-03-25 04:43:23
只有主节点有闪回日志,备节点没有闪回日志
[root@tdsql02 sql]# pwd
/data/tdsql_run/4004/mysqlagent/sql
[root@tdsql02 sql]# ls
dcn.sql masterFlashback.sql report.sql slowlog.sql
--------------------------
执行闪回,真正闪回
闪回时间:2026-03-25 04:43:23
按时间闪回,不知道为啥没有闪回????
================================
分布式数据库创建表
--------------------------------
8、#创建单表:分布式数据库,必须要有主键key
建库
-- 1. 创建数据库
CREATE DATABASE IF NOT EXISTS mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 2. 查看是否创建成功
SHOW DATABASES;
-- 3. 切换到该数据库
USE mydb;
-- 4. 查看当前数据库
SELECT DATABASE();
-- 5. 删除数据库(谨慎操作)
DROP DATABASE IF EXISTS mydb;
----------------------------------------
表的创建
create table single_t(a int,b int,PRIMARY KEY(a));
表的删除
DROP TABLE 表名;
---------------------------------------
数据的增
insert into single_t(a,b) values (3,4);
改
UPDATE single_t SET b = 100 WHERE a = 3;
删
DELETE FROM single_t WHERE a = 3;
查查询数据
select * from single_t;
----------------------------------
9、#创建广播表:
create table global_t(a int,b int,PRIMARY KEY(a)) shardkey=noshardkey_allset;
----------------------------------
11、#创建一级HASH
create table test1(a int,b int,c char(20),primary key(a)) shardkey=a;
insert into t1(a,b,c) values (1,1,'aaa');
----------------------------------
12、#创建一级range分区
create table t1(a int key ,b int) tdsql_distributed by range(a) (s1 values less than(100),s2 values less than(200));
----------------------------------
13、#创建一级分表LIST分区
create table t2(a int key ,b int) tdsql_distributed by list(a) (s1 values in(1,2),s2 values in (3,4));
----------------------------------
14、#创建二级RANGE分区
CREATE TABLE employees_int(
id INT key NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired date,
Separated DATE NOT NULL DEFAULT'9999-12-31',
job_code INT,
store_id INT
)
shardkey=id
PARTITION BY RANGE(year(hired))(
PARTITION P0 VALUES LESS THAN(1991),
PARTITION P1 VALUES LESS THAN(1996),
PARTITION P2 VALUES LESS THAN(2001)
);
----------------------------------
15、#创建二级LIST分区
CREATE TABLE customers_1 (
first_name VARCHAR(25) key,
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE)
shardkey=first_name
PARTITION BY LIST(city) (
PARTITION pRegion_1 VALUES IN('Beijing','Tianjin','Shanghai'),
PARTITION pRegion_2 VALUES IN('chongqing','Wulumuqi','Dalian'),
PARTITION pRegion_3 VALUES IN('Suzhou','Hangzhou','Xiamen'),
PARTITION pRegion_4 VALUES IN('Shenzhen','Guangzhou','chengdu'));
插入数据
INSERT INTO customers_1 (first_name, last_name, street_1,street_2, city,renewal) VALUES('Alice','Wang','123 Main St','Apt 4','Beijing','2023-01-01');
#删除和新增二级分区
alter table customers_1 drop partition pRegion_1;
alter table customers_1 add partition(partition pRegion_5 VALUES IN( 'Wuhan','Nanjing','Guiyang'));
explain SElEcT u.username,u.phone FRoM orders o JoIN users u ON o.user_id = u.user_id WHERE o.user_id=99968;
ALTER TABLE orders add idx_user_id(user_id);
----------------------------------
16、#创建序列
-- 设置最大值,其他未定义项均选择默认值,创建序列成功后,可在 MYSQL.TDSQL_SEQUENCES 表中查看到序列元数据
CREATE DATABASE db_employees;
use db_employees;
CREATE TDSQL_SEQUENCE my_sequence start with 1 tdsql_minvalue 1 tdsql_maxvalue 50000 tdsql_increment by 5;
create table employees (
id int primary key,
first_name varchar(50),
last_name varchar(50)
) shardkey=id;
insert into employees(id,first_name,last_name) values (tdsql_nextval(my_sequence),'Jane','doe');
select tdsql_nextval(my_sequence);
SHOW CREATE TDSQL_SEQUENCE my_sequence;
alter tdsql_sequence my_sequence tdsql_increment by 5 tdsql_maxvalue 2000000 ;
==================================
17、分布式数据库注释透传功能
-- set数量、名称、ip、hash_range范围、主备节点等
/*proxy*/show status;
-- 一致性读(consistent_read)是否开启、日志相关等
/*proxy*/show config;
/*sets:set_1*/
/*sets:set_1,set_2*/ (set名字可以通过/*proxy*/show status查询)
/*sets:allsets*/select * from global_t;
=======================================
18、索引:
创建索引
-- 方式1:CREATE INDEX(推荐,语法清晰)
CREATE [索引类型] INDEX `索引名` ON `testdb`.`orders`(`字段名1` [排序方式], `字段名2`...);
-- 方式2:ALTER TABLE(适合批量修改表结构时)
ALTER TABLE `testdb`.`orders` ADD [索引类型] INDEX `索引名`(`字段名1`, `字段名2`...);
单索引
alter table testdb.orders add index index_user_id(user_id);
复合索引
create index idx_user_id_amount on testdb.orders(user_id,amount);
a 的单列索引
CREATE INDEX idx_a ON aa (a);
a、b 的联合索引
CREATE INDEX idx_a_b ON aa (a, b);
删除单列索引 idx_a
DROP INDEX idx_a ON aa;
删除联合索引 idx_a_b
DROP INDEX idx_a_b ON aa;
通过赤兔平台进行性能分析,诊断冗余索引
=======================
19、查询事务状态
默认隐式自动提交
-- 查看当前 autocommit 状态
SHOW VARIABLES LIKE 'autocommit';
-- 关闭自动提交(每次操作需手动 COMMIT)
SET autocommit = 0;
-- 开启自动提交(每条 SQL 自动提交,默认状态)
SET autocommit = 1;
常用事务控制语句
START TRANSACTION; -- 开启事务
COMMIT; -- 提交事务,永久保存
ROLLBACK; -- 回滚事务,撤销所有更改
SAVEPOINT sp1; -- 设置保存点
ROLLBACK TO SAVEPOINT sp1; -- 回滚到指定保存点
RELEASE SAVEPOINT sp1; -- 释放保存点
举例:
-- 1. 开启事务
START TRANSACTION;
-- 2. 执行 SQL 操作(以 aa 表为例)
INSERT INTO aa (a, b) VALUES (1, 100);
INSERT INTO aa (a, b) VALUES (2, 200);
UPDATE aa SET b = 300 WHERE a = 1;
-- 3. 提交事务(确认保存)
COMMIT;
-- 或者回滚事务(撤销所有操作)
-- ROLLBACK;
======================================
20、数据库同步故障检测
-------------------------------------------------------------
分布式:这个4004,通过在赤兔,分布式数据库,DB监控,查看set备节点的端口
查看登录备机,查看状态
cd /data/tdsql_run/4004/mysql-server-8.0.24/install
./jmsyql.sh 4004
show slave status\G;
[root@tdsql01 install]# ./jmysql.sh 4003
cmd: e
/data/tdengine/data/4003/prod/mysql.sock
/data/tdsql_run/4003/mysql-server-8.0.24
mysql: [Warning] Using a password on the command line interface can be insecure .
Welcome to the TXSQL monitor. Commands end with ; or \g.
Your TXSQL connection id is 9248
Server version: 8.0.33-v24-txsql-22.4.1-20230926 Source distribution
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
txsql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.152
Master_User: tdsqlsys_repl
Master_Port: 4003
Connect_Retry: 60
Master_Log_File: binlog.000008
Read_Master_Log_Pos: 743385
Relay_Log_File: relay.000017
Relay_Log_Pos: 743205
Relay_Master_Log_File: binlog.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
------------------------------------------------------
集中式数据库,登录备节点数据库执行
show slave status\G;
===============================================================
21、Tdsql-读binlog日志
-- 查看当前正在写入的 Binlog 文件及位置
SHOW MASTER STATUS;
分布式数据库
ps -ef |grep 4003
解析binlog日志工具路径
/data/tdsql_run/4002/mysqlagent/bin/mysqlbinlog
日志目录
cd /data/tdengine/log/4002/dblogs/bin
在日志目录下执行解析binlog日志:
/data/tdsql_run/4003/mysql-server-8.0.24/bin/mysqlbinlog -vv binlog.000001 > /tmp/testbinlog.txt
===============================================================
22、分布式数据库特性测试:异常场景处理:死锁处理机制
开启事务:
start transaction;
以分片表为例(但不限于,尽量展示能力):制造分片表在不同数据节点的死锁。1.建立一个数据库连接,语句如下:
Session1;
begin;
select * from customer where id=8 for update;
执行完成上一步后,再另外建立一个数据库连接,语句如下:
Session 2:
begin;
delete from customer where id=2;
回到sessionl
update customer set name='nichunyang' where id=2;
在到session2执行
2.
select * from customer where id=8 lock in share mode;
观察死锁情况
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。