
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
该Docker容器基于官方Docker https://hub.docker.com/_/mariadb/%E9%95%9C%E5%83%8F%E6%9E%84%E5%BB%BA%EF%BC%8C%E8%AE%BE%E8%AE%A1%E7%94%A8%E4%BA%8E%E5%85%BC%E5%AE%B9%E8%87%AA%E5%8A%A8%E8%B0%83%E5%BA%A6%E7%B3%BB%E7%BB%9F%EF%BC%8C%E7%89%B9%E5%88%AB%E6%98%AFKubernetes%E3%80%81Docker Swarm Mode和Kontena Classic。通过指定正确的环境变量,它也可用于手动调度(docker run),或可能与使用类似约定的其他调度系统配合使用。
建议仔细测试所有升级!切勿在生产环境中使用latest标签!
支持多个版本,偶尔会重新构建并使用版本号和构建日期进行标记,因此只需为您的主版本选择适合的最新构建版本,或构建自己的版本。使用新版本时,务必通过test.sh脚本测试复制功能!
这不是简单的配置更新,而是投入了大量精力使该容器能够自动化集群的初始化和恢复。入口点脚本通过让节点在启动mysqld进程之前相互通信,确保集群正确恢复,从而在同时重置时协调完整恢复。它通过检查Galera的状态文件、恢复所有节点上的GTID位置,然后在节点之间通信以找到最新的节点(如需要)来形成新集群。它还提供多个不同健康程度的健康检查端点,以帮助集成负载均衡器和调度系统。
欢迎提交更多针对Mesos等的示例,以及对现有示例的改进!
通过使用DNS解析发现其他节点,无需显式指定节点,因此该容器应可与任何基于DNS的服务发现系统(如Kubernetes、Docker Swarm、Consul等)配合使用。
入口点接受以下启动“模式”作为命令。其他参数将传递给mysqld命令行。例如,通常需要添加--log-bin=mysqld-bin以启用二进制日志。
仅用于初始化新集群,初始化后且其他节点加入后,应停止“seed”容器,并使用相同卷替换为“node”容器。
加入现有集群。接受第二个参数,即逗号分隔的IP或主机名列表,用于构建--wsrep_cluster_address选项以加入集群。
“node”也可通过在数据卷中放置标志文件/var/lib/mysql/new-cluster,像“seed”一样引导集群。
启动禁用Galera的服务器。适用于维护任务,如执行mysql_upgrade和重置root凭据。
重置root密码
例如,要重置root用户密码,在Galera容器停止后,可运行新的临时容器:
shell1 $ docker run --rm -v {卷名}:/var/lib/mysql --name no-galera-temp {镜像} no-galera --skip-grant-tables shell2 $ docker exec -it no-galera-temp mysql -u root mysql MariaDB> update user set password=password("您的新密码") where user='root' and host='127.0.0.1'; MariaDB> flush privileges; MariaDB> quit shell2 $ exit shell1 $ <CTRL+C>
然后使用新的root密码启动Galera容器。
启动容器但不启动服务器。运行“sleep infinity”。适用于初始化卷或在服务器未运行时执行docker exec。
打开bash shell而非启动容器。例如bash -c 'touch /var/lib/mysql/new-cluster',用于创建标志文件,指示下次启动时创建新集群。
XTRABACKUP_PASSWORD(必填,除非提供XTRABACKUP_PASSWORD_FILE)SYSTEM_PASSWORD(必填,或如果提供XTRABACKUP_PASSWORD,则设为其哈希值)CLUSTER_NAME(可选)NODE_ADDRESS(可选 - 默认为ethwe,然后是eth0)LISTEN_WHEN_HEALTHY(可选)- 指定集群达到健康状态后打开健康检查套接字的端口号。适用于Kontena的wait_for_port功能。HEALTHY_WHILE_BOOTING(可选)- 如果为'1',则HEALTHCHECK脚本在启动阶段(等待DNS解析和恢复wsrep位置)报告健康。SKIP_TZINFO(可选)- 指定任何值以在初始化新目录时跳过时区表数据加载。DEFAULT_TIME_ZONE(可选 - 默认为TZ环境变量,如未定义则为'+00:00')- 指定数据库时区,可为数字格式(+01:00)或文字格式(CET、Europe/Bratislava等)。后者仅在未指定SKIP_TZINFO时可用。有关需要此设置的原因,详见https://mariadb.com/kb/en/library/time-zones/%E3%80%82SST_METHOD(可选 - 10.2+默认为'mariabackup',10.1默认为'xtrabackup-v2')- 也可设为'rsync'或'mysqldump'。此镜像中不支持需要进一步配置或安装依赖的其他方法。SKIP_UPGRADES(可选 - 阻止运行run-upgrades.sh脚本)“seed”的附加变量:
MYSQL_ROOT_PASSWORD(可选)- 另见/var/lib/mysql/new-cluster标志文件。MYSQL_ROOT_HOST(可选)- 未指定时默认为'127.0.0.1'。指定'%'允许从任何主机登录root。MYSQL_ROOT_SOCKET_AUTH(可选)- 默认启用,指定0禁用。如果启用,引导时会创建'root'@'localhost',允许root通过unix套接字无密码登录!这使docker exec命令无需密码,同时仍要求网络登录需密码。MYSQL_DATABASE(可选)MYSQL_USER(可选)MYSQL_PASSWORD(可选)“node”的附加变量:
GCOMM_MINIMUM(可选 - 默认为2)也可使用文件配置敏感变量,此方法用于https://docs.docker.com/engine/swarm/secrets/%E3%80%81Rancher%E7%AD%89%E3%80%82%E5%AF%86%E9%92%A5%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%E9%BB%98%E8%AE%A4%E4%B8%BA%60/run/secrets/%7B%E5%B0%8F%E5%86%99%E5%8F%98%E9%87%8F%E5%90%8D%7D%60%EF%BC%8C%E4%BD%86%E4%B9%9F%E5%8F%AF%E9%80%9A%E8%BF%87%E4%BB%A5%E4%B8%8B%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E6%98%BE%E5%BC%8F%E6%8C%87%E5%AE%9A%EF%BC%9A
XTRABACKUP_PASSWORD_FILESYSTEM_PASSWORD_FILEMYSQL_ROOT_PASSWORD_FILEMYSQL_ROOT_HOST_FILEMYSQL_PASSWORD_FILEMYSQL_DATABASE_FILE为了在无需更改CMD(在自动调度器中有时难以操作)的情况下控制引导阶段,可在启动容器前创建以下文件以更改引导行为。所有文件应位于/var/lib/mysql目录(需将此目录挂载为容器卷)。
/var/lib/mysql/new-cluster - 使“node”容器在首次运行时表现为“seed”容器。也可用于无法形成主组件时的恢复,或代替“seed”容器引导新集群。如果文件有内容,将用作MYSQL_ROOT_PASSWORD。/var/lib/mysql/hold-start - 使“node”容器等待此文件删除后再尝试启动。适用于缺乏细粒度调度控制的调度器。/var/lib/mysql/force-cluster-bootstrapping - 强制再次创建MySQL用户(“seed”或“node”命令)。/var/lib/mysql/skip-cluster-bootstrapping - 阻止创建MySQL用户。此文件会自动创建,正常情况下不应删除。/var/lib/mysql/skip-upgrades - 阻止运行run-upgrades.sh脚本。默认情况下,后台运行两个基于HTTP的健康检查服务器。
默认HEALTHCHECK命令在/var/lib/mysql/sst_in_progress存在时也返回健康状态,以避免节点在SST期间被终止。否则,它使用第二个健康检查(端口8081),仅在节点“已同步”时返回健康,以防止节点因长时间作为***者而被终止。健康检查命令的行为取决于您的使用场景,因此可能需要根据所需行为覆盖它。无论如何,两个健康检查服务器都会启动,除非被实际 ping,否则资源消耗可忽略不计。
此外,如果指定LISTEN_WHEN_HEALTHY端口号,容器将启动循环检查自身的8080端口健康检查,一旦报告健康,将在此端口打开新套接字,转发至8080端口。这可与Kontena的wait_for_port功能配合使用,以适应滚动更新机制。
通常,由于MariaDb并非特别稳定的服务器, minor版本号常引入回归或向后兼容性问题,因此始终建议在生产环境中使用特定标签,并先在 staging 环境测试升级。还建议阅读提交日志以了解变更。不提供任何保证,使用风险自负!
升级前,需授予xtrabackup用户PROCESS权限:
mysql> GRANT PROCESS ON *.* TO 'xtrabackup'@'localhost';
test.sh脚本是使用docker run启动seed和node容器的简单脚本。它在后台启动seed,将seed日志输出到控制台,然后在前台启动node。测试成功与否应通过检查日志确定,还应执行启动额外节点、终止一个或多个节点等操作,以验证恢复功能是否正常。
示例
make test-10.4
或为10.4构建并运行自己的镜像,启动单个seed和node:
$ docker build . -f Dockerfile-10.4 -t galera-test-10.4 $ ./test.sh galera-test-10.4
在另一个控制台,验证集群状态和大小:
$ docker exec -it cm-galera-test-node mysql -be "show status like 'wsrep_cluster_s%';" +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_cluster_size | 2 | | wsrep_cluster_state_uuid | e54090dc-f892-11ec-ad6f-f2704a681293 | | wsrep_cluster_status | Primary | +----------------------------+--------------------------------------+
/var/lib/mysql/new-cluster以强制节点引导新集群并绕过自动恢复步骤。pc.recovery,因此在所有节点正常关闭的情况下,主组件应自动恢复。重要的是所有节点一起启动,以便它们可以相互通信状态。ethwe*或eth0,则需将NODE_ADDRESS指定为要监听的接口名称或匹配容器IP地址的grep模式。例如:NODE_ADDRESS='^10.0.1.*'。GCOMM_MINIMUM个IP解析,然后尝试启动mysqld,以防某些容器启动较慢,增加健康恢复的机会。可能无法解析足够IP的场景包括:
/usr/local/lib/startup.sh存在,将在start.sh脚本中被source。$ docker exec -i <容器> mysql -p /primary-component.sqlwsrep_notify_cmd设为/usr/local/bin/notify.sh,可更清晰地监控集群状态变化,该脚本会将更新输出到Docker日志/控制台。您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务