#安装准备 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; 观察死锁情况