apiVersion: v1 kind: ConfigMap metadata: name: mysql-slave-config data: my.cnf: | [mysqld] server-id=2 relay-log=mysql-relay-bin log-bin=mysql-bin binlog-format=ROW gtid-mode=ON enforce-gtid-consistency=ON skip-replica-start=ON default-authentication-plugin=mysql_native_password bind-address=0.0.0.0 # 注意:不要在这里设置 read_only 或 super_read_only # 这些应该在复制配置完成后再设置 --- apiVersion: v1 kind: Service metadata: name: mysql-slave labels: app: mysql role: slave spec: ports: - port: 3306 name: mysql selector: app: mysql role: slave --- apiVersion: apps/v1 kind: Deployment metadata: name: mysql-slave labels: app: mysql role: slave spec: replicas: 1 selector: matchLabels: app: mysql role: slave template: metadata: labels: app: mysql role: slave spec: containers: - name: mysql image: mysql:8.0.44 env: - name: MYSQL_ROOT_PASSWORD value: "Lq123456!" ports: - containerPort: 3306 volumeMounts: - name: config mountPath: /etc/mysql/conf.d/ resources: requests: memory: "512Mi" cpu: "250m" lifecycle: postStart: exec: command: - /bin/bash - -c - | # 等待MySQL完全启动 echo "等待MySQL启动..." for i in {1..30}; do if mysql -uroot -pLq123456! -e "SELECT 1" &>/dev/null; then echo "MySQL已启动" break fi echo "等待MySQL... ($i/30)" sleep 2 done # 配置复制 echo "配置主从复制..." mysql -uroot -pLq123456! <