Skip to content

MySQL

基本信息

属性
版本8.0.35
Helm 目录k8s-apps/04-helm/02-mysql/
Namespacetidb(注意:不是 yidun-infra)
Release 名称mysql-yidun
节点标签mysql: "true"
默认账号admin / eHSkDv7c77*j
NodePort32000(自动分配)

为什么 Namespace 是 tidb

历史原因:早期版本使用 TiDB 分布式数据库,后改为原生 MySQL,但 Namespace 名称沿用了 tidb02-tidb/ 目录保留了 TiDB 方案供需要时使用。

数据库清单

初始化后包含以下数据库:

数据库SQL 文件用途
antispam_baseantispam_base_250409.sql反垃圾核心数据
cluster_basecluster_base_250409.sql集群配置数据
yidun_model_evaluationyidun_model_evaluation_0409.sql模型评测数据

连接信息

集群内连接

Host: mysql-yidun.tidb.svc.cluster.local
Port: 3306
User: admin
Password: eHSkDv7c77*j

外部连接(NodePort)

bash
# 获取 NodePort
kubectl get svc mysql-yidun -n tidb -o jsonpath='{.spec.ports[0].nodePort}'

# 连接
mysql -h <节点IP> -P <nodeport> -u admin -p'eHSkDv7c77*j'

从 ops 容器连接

ops 容器不能直接访问 ClusterIP,必须通过 NodePort:

bash
# auto-docker.conf 中留空 db_host 时,自动使用 NodePort 方式
# 等价于:
mysql -h 127.0.0.1 -P $(kubectl get svc mysql-yidun -n tidb -o jsonpath='{.spec.ports[0].nodePort}') \
  -u admin -p'eHSkDv7c77*j'

数据初始化

bash
# 自动初始化(deploy 流程中自动执行)
# sql_path 指向压缩包,自动解压并逐库导入

# 手动导入单个 SQL
mysql -h <host> -P <port> -u admin -p'eHSkDv7c77*j' \
  --default-character-set=utf8mb4 \
  antispam_base < antispam_base_250409.sql

备份与恢复

xtrabackup 备份(裸机部署方式)

infra/roles/xtrabackup/ 提供了 xtrabackup 角色,支持全量和增量备份:

bash
# 裸机方式安装 xtrabackup
cd infra
ansible-playbook -i inventory/dev/hosts.ini mysql.yml -b

mysqldump 备份(K8s 部署方式)

bash
# 备份所有数据库
kubectl exec -it mysql-yidun-0 -n tidb -- \
  mysqldump -u admin -p'eHSkDv7c77*j' \
  --all-databases --single-transaction > backup_$(date +%Y%m%d).sql

# 备份特定数据库
kubectl exec -it mysql-yidun-0 -n tidb -- \
  mysqldump -u admin -p'eHSkDv7c77*j' \
  --single-transaction antispam_base > antispam_base_backup.sql

常用运维

bash
# 查看 MySQL Pod 状态
kubectl get pod -n tidb

# 进入 MySQL
kubectl exec -it mysql-yidun-0 -n tidb -- \
  mysql -u admin -p'eHSkDv7c77*j'

# 查看数据库列表
kubectl exec -it mysql-yidun-0 -n tidb -- \
  mysql -u admin -p'eHSkDv7c77*j' -e "show databases;"

# 查看表大小(MB)
SELECT 
  table_schema AS 'Database',
  table_name AS 'Table',
  ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)'
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC
LIMIT 20;

MySQL 57 客户端

脚本中还引用了 MySQL 5.7 客户端(lib/mysql-community-client-5.7.36-1.el7.x86_64.rpm),用于 CentOS 7 环境下的命令行连接。容器化方式下不需要,MySQL 客户端由 ops 容器提供。

内部使用文档,请勿外传