主题
MySQL
基本信息
| 属性 | 值 |
|---|---|
| 版本 | 8.0.35 |
| Helm 目录 | k8s-apps/04-helm/02-mysql/ |
| Namespace | tidb(注意:不是 yidun-infra) |
| Release 名称 | mysql-yidun |
| 节点标签 | mysql: "true" |
| 默认账号 | admin / eHSkDv7c77*j |
| NodePort | 32000(自动分配) |
为什么 Namespace 是 tidb
历史原因:早期版本使用 TiDB 分布式数据库,后改为原生 MySQL,但 Namespace 名称沿用了 tidb。02-tidb/ 目录保留了 TiDB 方案供需要时使用。
数据库清单
初始化后包含以下数据库:
| 数据库 | SQL 文件 | 用途 |
|---|---|---|
| antispam_base | antispam_base_250409.sql | 反垃圾核心数据 |
| cluster_base | cluster_base_250409.sql | 集群配置数据 |
| yidun_model_evaluation | yidun_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 -bmysqldump 备份(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 容器提供。