1-01:MYSQL

SQL

SQL是结构化查询语言;

它是一种what型的语言,而非how型的语言;
how:告诉语言怎么做;
what:告诉语言你要什么,怎么做是语言内部的事;

SQL的三个部分

DML(data manipulation language):数据操作语言;(80%)必须要熟练掌握,了然于胸
数据库使用

DDL(data definition language):数据定义语言;(15%)
数据库设计

DCL(data control language):数据控制语言;(5%)
数据库管理

数据库四大经典操作:增删改查

转载于:https://www.cnblogs.com/wukong-js/articles/9555598.html

<think>我们注意到在命令中使用了 `--`分隔符,然后传递`--bootstrap`等参数,但是报错 `--bootstrap:not found`。这个错误通常是因为容器入口点(entrypoint)没有正确传递参数导致的。MySQL Router的官方Docker镜像的入口点脚本可能期望在`--`之后传递的参数是`mysqlrouter`命令的参数,但是入口点脚本可能没有正确解析。实际上,根据MySQL RouterDocker镜像的文档和入口点脚本,通常建议将参数直接传递给`mysqlrouter`命令,而不使用`--`分隔符,或者使用`mysqlrouter`作为命令。我们尝试两种方法:方法1:去掉`--`分隔符,将参数直接传递给容器(因为入口点脚本可能设计为直接接受这些参数)方法2:显式地使用`mysqlrouter`命令,然后在后面跟参数。我们首先使用方法1,因为官方文档示例中通常没有使用`--`分隔符。但是,之前使用没有`--`分隔符的命令报错`exec: usage`,所以现在尝试方法2:在镜像名称后显式指定`mysqlrouter`命令,然后传递参数。命令结构如下:docker run[OPTIONS]IMAGE[COMMAND][ARG...]所以,我们将`mysqlrouter`作为COMMAND,后面的参数作为ARG。修改后的命令:</think>### 解决 "exec: --bootstrap: not found" 错误 您遇到的错误 `line 100: exec: --bootstrap: not found` 是由于 Docker 容器入口点(entrypoint)未能正确处理参数传递导致的。以下是完整的解决方案: #### 问题分析: 1. MySQL Router 的官方 Docker 镜像使用 `/entrypoint.sh` 作为入口点 2. 该入口点脚本期望直接接收 `mysqlrouter` 命令,而不是以 `--` 开头的参数 3. 脚本无法识别 `--bootstrap` 作为有效命令 4. 错误发生在容器启动时对参数的解析过程中 #### 解决方案: ##### 1. 显式调用 `mysqlrouter` 命令(推荐) ```bash docker run --name mysql-router \ --network mysql-net \ -v /use01/docker/mysqlrouter:/etc/mysqlrouter \ mysql/mysql-router:8.0.32 \ mysqlrouter \ --bootstrap mgr_user@mysql-master:3306 \ --conf-set-option=DEFAULT.name=router \ --conf-set-option=metadata_cache:Cluster01.bootstrap_server_addresses=mysql-master:3306,mysql-slave1:3306,mysql-slave2:3306 \ --conf-set-option=routing:read_write.bind_port=6446 \ --conf-set-option=routing:read_only.bind_port=6447 \ --conf-set-option=routing:read_write_split.bind_port=6450 \ --force ``` **关键修改:** - 在镜像名称后添加 `mysqlrouter` 命令 - 直接传递所有参数给 `mysqlrouter` 可执行文件 ##### 2. 使用 Dockerfile 自定义入口点 ```dockerfile # Dockerfile.mysqlrouter FROM mysql/mysql-router:8.0.32 # 覆盖原始入口点 ENTRYPOINT ["mysqlrouter"] ``` 构建并运行: ```bash docker build -t custom-mysql-router -f Dockerfile.mysqlrouter . docker run --name mysql-router \ --network mysql-net \ -v /use01/docker/mysqlrouter:/etc/mysqlrouter \ custom-mysql-router \ --bootstrap mgr_user@mysql-master:3306 \ --conf-set-option=DEFAULT.name=router \ --conf-set-option=metadata_cache:Cluster01.bootstrap_server_addresses=mysql-master:3306,mysql-slave1:3306,mysql-slave2:3306 \ --conf-set-option=routing:read_write.bind_port=6446 \ --conf-set-option=routing:read_only.bind_port=6447 \ --conf-set-option=routing:read_write_split.bind_port=6450 \ --force ``` ##### 3. 分步引导和运行(最佳实践) ```bash # 步骤1:引导配置(临时容器) docker run --rm \ --network mysql-net \ -v /use01/docker/mysqlrouter:/etc/mysqlrouter \ mysql/mysql-router:8.0.32 \ mysqlrouter \ --bootstrap mgr_user@mysql-master:3306 \ --conf-set-option=DEFAULT.name=router \ --conf-set-option=metadata_cache:Cluster01.bootstrap_server_addresses=mysql-master:3306,mysql-slave1:3306,mysql-slave2:3306 \ --conf-set-option=routing:read_write.bind_port=6446 \ --conf-set-option=routing:read_only.bind_port=6447 \ --conf-set-option=routing:read_write_split.bind_port=6450 \ --force # 步骤2:运行持久容器 docker run -d --name mysql-router \ --network mysql-net \ -v /use01/docker/mysqlrouter:/etc/mysqlrouter \ -p 6446:6446 -p 6447:6447 -p 6450:6450 \ mysql/mysql-router:8.0.32 ``` #### 自动修复脚本 ```bash #!/bin/bash # run_mysql_router.sh # 引导配置 echo "Bootstrapping MySQL Router configuration..." docker run --rm \ --network mysql-net \ -v /use01/docker/mysqlrouter:/etc/mysqlrouter \ mysql/mysql-router:8.0.32 \ mysqlrouter \ --bootstrap mgr_user@mysql-master:3306 \ --conf-set-option=DEFAULT.name=router \ --conf-set-option=metadata_cache:Cluster01.bootstrap_server_addresses=mysql-master:3306,mysql-slave1:3306,mysql-slave2:3306 \ --conf-set-option=routing:read_write.bind_port=6446 \ --conf-set-option=routing:read_only.bind_port=6447 \ --conf-set-option=routing:read_write_split.bind_port=6450 \ --force # 检查配置文件 if [ ! -f "/use01/docker/mysqlrouter/mysqlrouter.conf" ]; then echo "Error: Configuration file not generated!" exit 1 fi # 运行持久容器 echo "Starting MySQL Router container..." docker run -d --name mysql-router \ --network mysql-net \ -v /use01/docker/mysqlrouter:/etc/mysqlrouter \ -p 6446:6446 -p 6447:6447 -p 6450:6450 \ mysql/mysql-router:8.0.32 # 验证状态 echo "Checking Router status (waiting 15 seconds for startup)..." sleep 15 docker exec mysql-router mysqlrouter --config /etc/mysqlrouter/mysqlrouter.conf status ``` 使用方式: ```bash chmod +x run_mysql_router.sh ./run_mysql_router.sh ``` #### 使用 Docker Compose 解决方案 ```yaml version: '3.8' services: mysql-router: image: mysql/mysql-router:8.0.32 container_name: mysql-router command: - "mysqlrouter" - "--bootstrap" - "mgr_user@mysql-master:3306" - "--conf-set-option=DEFAULT.name=router" - "--conf-set-option=metadata_cache:Cluster01.bootstrap_server_addresses=mysql-master:3306,mysql-slave1:3306,mysql-slave2:3306" - "--conf-set-option=routing:read_write.bind_port=6446" - "--conf-set-option=routing:read_only.bind_port=6447" - "--conf-set-option=routing:read_write_split.bind_port=6450" - "--force" networks: - mysql-net volumes: - /use01/docker/mysqlrouter:/etc/mysqlrouter ports: - "6446:6446" - "6447:6447" - "6450:6450" restart: unless-stopped networks: mysql-net: external: true ``` 运行: ```bash docker-compose up -d ``` #### 高级调试技巧 ##### 1. 检查入口点脚本 ```bash # 查看镜像的入口点配置 docker inspect mysql/mysql-router:8.0.32 | jq '.[0].Config.Entrypoint' # 提取并检查入口点脚本 docker run --rm --entrypoint cat mysql/mysql-router:8.0.32 /entrypoint.sh > entrypoint.sh chmod +x entrypoint.sh ./entrypoint.sh --help ``` ##### 2. 交互式调试 ```bash docker run -it --rm \ --network mysql-net \ -v /use01/docker/mysqlrouter:/etc/mysqlrouter \ --entrypoint sh \ mysql/mysql-router:8.0.32 # 在容器内手动运行 mysqlrouter --bootstrap mgr_user@mysql-master:3306 \ --conf-set-option=DEFAULT.name=router \ --conf-set-option=metadata_cache:Cluster01.bootstrap_server_addresses=mysql-master:3306,mysql-slave1:3306,mysql-slave2:3306 \ --conf-set-option=routing:read_write.bind_port=6446 \ --conf-set-option=routing:read_only.bind_port=6447 \ --conf-set-option=routing:read_write_split.bind_port=6450 \ --force ``` ##### 3. 日志分析 ```bash # 获取详细日志 docker run --rm \ -v /use01/docker/mysqlrouter:/etc/mysqlrouter \ mysql/mysql-router:8.0.32 \ mysqlrouter --bootstrap mgr_user@mysql-master:3306 --help > bootstrap_help.txt # 检查日志输出 docker logs mysql-router >& router_logs.txt ``` #### 验证连接 ```bash # 测试读写连接 mysql -h 127.0.0.1 -P 6446 -u mgr_user -p -e "SELECT @@server_id" # 测试只读连接 mysql -h 127.0.0.1 -P 6447 -u mgr_user -p -e "SELECT @@server_id" # 测试读写分离 mysql -h 127.0.0.1 -P 6450 -u mgr_user -p -e "START TRANSACTION; SELECT @@server_id; COMMIT" ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值