TiDB 主要是为 Linux/Unix 系统设计的。需要先安装 Docker Desktop for Windows,并确认 Docker 已经正常运行,在终端窗口中可以正常执行 docker 命令。
docker安装
参考Windows11操作系统下安装、使用Docker保姆级教程 安装docker会进行多次电脑重启,请确保环境可以进行重启操作。
docker中安装TiDB
Docker 安装 TiDB 的过程可以概括为以下步骤:
- 首先,安装 Docker。你可以选择相应的命令来安装,依据你的操作系统的不同而变更。以 Ubuntu 为例,你可以运行以下命令安装 Docker:
sudo apt-get update sudo apt-get install docker.io
- 之后,你需要拉取 TiDB 的 docker 镜像。在命令行中运行以下指令:
docker pull pingcap/tidb:latest
- 在成功拉取镜像后,你可以运行以下命令来启动 TiDB:
docker run --name tidb-server -d -p 4000:4000 pingcap/tidb:latest
这条命令将创建并运行一个名为 tidb-server
的容器,并将 4000 端口映射至宿主机的 4000 端口。
4. 你可以使用以下命令验证 TiDB 是否成功运行:
mysql -h 127.0.0.1 -P 4000 -u root
如果你看到了 MySQL 的命令行界面,那么恭喜你,你已经成功运行了 TiDB!
无法拉取TiDB 的 docker 镜像
//命令窗口提示
latest: Pulling from pingcap/tidb
no matching manifest for windows/amd64 10.0.22631 in the manifest list entries
需要将 Docker 切换到 Linux 容器模式下运行,然后再尝试拉取。
- 在 Windows 系统托盘中找到并点击右键 Docker Desktop 图标。
- 在弹出的菜单中,点击 “Switch to Linux containers…”。
- 等待 Docker Desktop 重启并切换到 Linux 模式后,再尝试运行拉取镜像的命令,应该就能成功了。
navicat连接TiDB数据库
链接 TiDB 数据库通过 Navicat,可以按照以下步骤进行:
- 打开 Navicat,点击左上角的 "连接" 或 "新建连接"。
- 在弹出的窗口中,选择 "MySQL"。
- 在新的窗口中填入相关信息:
- 连接名:命名。
- 主机名/IP 地址:如果你的 TiDB 在本地运行,则填写 "127.0.0.1";如果在服务器上,则填写服务器的 IP 地址。
- 端口:TiDB 默认端口为 "4000",除非你有特殊修改,否则填写 "4000"。
- 用户名:如果没有特别设置,就填写 "root"。
- 密码:TiDB 的 root 用户默认无密码,如果你设置了密码,就填入你的密码。
- 点击 "测试连接",如果显示 "连接成功",那么你就成功连接到 TiDB 数据库了。
- 点击 "确定",保存你的连接设置。 就这样,你应该已经通过 Navicat 成功连接到 TiDB 数据库了。
使用navicat将mysql数据迁移到TiDB
方式一
- 点击navicat上方工具选项,选中数据传输。
- 源选择mysql数据库,目标选择TiDB数据库。之后按照提示正常操作即可。 使用这种方式需注意数据库字符编码,目前确认能正常迁移的只有TiDB具备的编码格式.
方式二
- 安装并设置 Navicat: Navicat 是一个易用的数据库管理员,它允许你连接到 MySQL 和 TiDB 数据库,使你可以在一个应用程序中同时管理这两个数据库。
- 在 MySQL 中备份你的数据: 使用 Navicat 的数据转储功能,可以在 MySQL 中创建一个关于你所有数据库结构和数据的备份文件。
- 建立连接到 TiDB: 在 Navicat 中,你需要创建一个新的连接到你的 TiDB 数据库。你会需要知道你的 TiDB 的主机名、端口、用户名和密码。
- 导入 MySQL 数据到 TiDB: 当你已经创建了一个连接到你的 TiDB 数据库,你可以使用 Navicat 的数据传输向导来从 MySQL 中导入你的数据。
警告: 尽管 Navicat 可以连接并管理 TiDB,但是并不完全支持所有 TiDB 的特性。在进行数据迁移之前,你应该查看 Navicat 关于 TiDB 的文档和资源来理解它的限制和可能的问题。 最后,虽然 Navicat 是一个流行的工具,但对于大规模的数据库迁移,更推荐使用 TiDB 官方建议的工具,如 TiDB Lightning 以及 Dumpling 进行操作,特别是当涉及到大数据量迁移时,它们可以提供更好的效率和稳定性。
原mysql项目直接使用TiDB数据库
使用若依系统进行测试,将若依原始mysql数据库迁移到TiDB数据库后,直接在application.yml配置为TIDB数据库可正常使用功能,暂未发现不兼容现象。
url: jdbc:mysql://127.0.0.1:4000/数据库?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&allowMultiQueries=true&useSSL=false
user: root
password:
TiDB数据库与mysql数据库那些不同
TiDB 和 MySQL 都是关系型数据库,但是它们在架构和功能上存在一些关键的区别:
- 架构:TiDB 使用分布式架构,能够提供海量数据存储和计算能力。On the other hand, MySQL 采用单机架构,会在大数据场景下遇到一些挑战。
- 横向扩展:TiDB 提供了自动的弹性扩展能力,可以根据业务量动态调整计算和存储资源,节省了手动扩展的成本。然而,MySQL 在扩展上需要人工干预,如分库分表、读写分离等。
- 事务支持:TiDB 支持分布式事务,以及与 MySQL 相似的语法,令迁移到 TiDB 变得更简单。而 MySQL 支持单机事务。
- 数据一致性:TiDB 使用 Raft 一致性协议保证数据一致,即使发生故障,也能确保数据一致性。相比之下,MySQL 在数据库集群环境中,可能需要额外的手段来保证数据一致性。
- SQL 兼容性:TiDB 目标是与 MySQL 协议、语法 100% 兼容,绝大部分情况下可以无缝替换 MySQL。然而,并非所有 MySQL 的特性 TiDB 都完全支持。 综上所述,MySQL 更适用于单机小型应用,而 TiDB 更适合在需要大规模读写能力和弹性扩展场景的应用下使用。两者具体的使用则需要根据实际的业务需求和场景来决定。
TiDB数据库与mysql数据库有那些语法不同
虽然 TiDB 的目标是要尽可能的与 MySQL 语法保持兼容,但是由于 TiDB 是基于分布式架构,所以仍存在一些与 MySQL 不同的语法特性。以下列出了一些主要的不同点:
- 存储引擎:MySQL 支持多种存储引擎,如 InnoDB,MyISAM,Memory等。每种存储引擎都有自身的特性,特定的用途和限制。然而,TiDB 只支持一种存储引擎,也就是 TiKV。
- 优化器提示:虽然 TiDB 也实现了优化器提示,但并未完全仿照 MySQL。一些 MySQL 中的优化器提示在 TiDB 中可能并不适用。
- 分区表:TiDB 在分区表支持上有一些限制,例如不支持 HASH 分区等。
- 字符集:关于字符集,MySQL 支持很多种,而 TiDB 只支持 utf8 和 utf8mb4。
- 全文索引:TiDB 不支持全文索引,而 MySQL 支持。
- 一些特定的 SQL 模式和变量:TiDB 并不全面支持所有的 MySQL sql_mode值。建议在对 TiDB 进行配置时,确保与 MySQL 的 sql_mode 设置相同,以确保兼容性。
- 触发器、存储过程和函数:TiDB 的支持比 MySQL 有限。
- 外键:TiDB 实际上并不真正支持外键。 这些都是部分的语法差异,因此在考虑从 MySQL 到 TiDB 的迁移时,需要仔细考虑这些因素。在尝试迁移之前,建议进行充分的兼容性测试,并就结果与 TiDB 开发组织进行讨论。
mysql和TiDB在相同配置下数据量逐渐增加性能的对比
针对MySQL和TiDB在相同配置下数据量逐渐增加时的性能对比,根据目前所掌握的信息来看:
- 在数据量较轻的情况下,由于需要考虑TiDB内部的通信成本,其优势可能不如MySQL明显。
- 当数据规模增大时,TiDB的优势就开始显现。这主要是因为TiDB采用了自研的分布式SQL优化器,这使得在大数据量的情况下,TiDB相较于MySQL性能更优。
- 让我们来看一下大数据量场景下的对比,TiDB在除了简单写入应用以外的其他场景的表现,几乎全面优于单机MySQL。这表明TiDB更适合用于单表数据量达到千万量级以上的应用。在单表数据量低于千万的小数据量应用中,使用MySQL可能更为经济,运行更高效。 所以,整体来说,随着数据规模的增大,TiDB的性能优势就越明显,尤其在处理单表数据量巨大的情况时。但在初期或数据规模小的时候,MySQL的性能可能会优于TiDB。
参考博客:
TiDB 5.0 VS MySQL 8.0 性能对比测试 TIDB和MySQL性能对比 TiDB 社区
扩展
Switch to Linux containers…位置
"Switch to Linux containers..."的选项通常在Docker Desktop的系统托盘图标的菜单中。下面是具体操作步骤:
- 首先,找到你的系统托盘,位于屏幕右下角(对于大部分Windows用户),你会看到一些图标,这些是正在运行的后台程序。
- 在这些图标中找到Docker Desktop的图标,它看起来像一个鲸鱼。
- 然后,单击Docker Desktop图标。这将弹出一个菜单。
- 在这个菜单中,找到并点击 "Switch to Linux containers..."选项(如果你当前在Windows容器模式下,这个选项应该是可见的)。点击它,Docker就会开始将自身切换到Linux容器模式。
TiKV
TiKV 是一个去中心化的键值存储系统,由 Rust 高性能系统语言编写,是 TiDB 数据库引擎的基础组件之一。以下是关于它的一些主要特性:
- 负载均衡:TiKV 使用了滚动哈希和分布式一致性算法(Raft)完成数据之间的负载均衡,有效防止热点问题。
- 强一致性:TiKV 使用 Raft 协议确保分布式系统的强一致性,每个数据都有多个副本,确保数据的一致性和高可用性。
- 隔离级别:支持隔离级别为『快照隔离』和『读已提交』。
- 数据分割:TiKV 自动将数据分割成小块(默认 96MB),并且可以自动迁移,这对于大规模数据处理十分重要。
- 可扩展性:你可以通过添加更多的机器扩展 TiKV 的存储和处理能力,TiKV 会自动完成数据的重新分配。
- 尽管是一个分布式数据库,TiKV 保持了线性一致性,这意味着你可以像使用单机数据库一样使用它,不需要编写复杂的分布式一致性控制代码。 这些都是 TiKV 的一些主要特性,它再分布式环境中提供了一个强大,稳定,一致性和高可用性的存储解决方案。