IT不打烊的tdsql_mysql学习记录

9 阅读9分钟

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