Mysql是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System,关系数据库管理系统)应用软件之一。
构建镜像 1 2 3 4 5 6 7 8 9 FROM docker.io/bitnami/mysql:5.7 USER rootRUN apt update && apt install -y wget rsync EXPOSE 3306 ENTRYPOINT ["/bin/bash" , "/opt/bitnami/scripts/mysql/entrypoint.sh" , "/opt/bitnami/scripts/mysql/run.sh" ]
Kubernetes部署
创建 PVC
1 2 3 4 5 6 7 8 9 10 11 12 13 kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mysql-data namespace: stable-db spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Gi storageClassName: standard-rwo volumeMode: Filesystem
创建 ConfigMap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 kind: ConfigMap apiVersion: v1 metadata: name: mysql-config namespace: stable-db labels: app: mysql data: my.cnf: |- [mysqld] default_authentication_plugin=mysql_native_password skip-name-resolve explicit_defaults_for_timestamp basedir=/opt/bitnami/mysql plugin_dir=/opt/bitnami/mysql/plugin port=3306 socket=/opt/bitnami/mysql/tmp/mysql.sock datadir=/bitnami/mysql/data tmpdir=/opt/bitnami/mysql/tmp max_allowed_packet=16M bind-address=0.0.0.0 pid-file=/opt/bitnami/mysql/tmp/mysqld.pid log-error=/opt/bitnami/mysql/logs/mysqld.log character-set-server=UTF8 collation-server=utf8_general_ci binlog_format=row log_bin=mysql-bin expire_logs_days= 1 binlog_row_image=full server_id=1121 max_connections=1000 [client ] port=3306 socket=/opt/bitnami/mysql/tmp/mysql.sock default-character-set=UTF8 plugin_dir=/opt/bitnami/mysql/plugin [manager ] port=3306 socket=/opt/bitnami/mysql/tmp/mysql.sock pid-file=/opt/bitnami/mysql/tmp/mysqld.pid
配置说明:
default_authentication_plugin=mysql_native_password:设置默认的认证插件为mysql_native_password,否则会报错ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supports expired passwords.
skip-name-resolve:禁止DNS反向解析,否则会报错ERROR 2003 (HY000): Can't connect to MySQL server on 'mysql' (111 "Connection refused")
explicit_defaults_for_timestamp:设置timestamp字段的默认值为CURRENT_TIMESTAMP,否则会报错ERROR 1067 (42000) at line 1: Invalid default value for 'create_time'
basedir:mysql安装目录
plugin_dir:mysql插件目录
port:mysql端口
socket:mysql socket文件
datadir:mysql数据目录
tmpdir:mysql临时目录
max_allowed_packet:mysql允许的最大数据包大小
bind-address:mysql绑定的地址
pid-file:mysql进程id文件
log-error:mysql错误日志文件
character-set-server:mysql字符集
collation-server:mysql字符集校验规则
binlog_format:mysql二进制日志格式
log_bin:mysql二进制日志文件
expire_logs_days:mysql二进制日志保留天数
binlog_row_image:mysql二进制日志记录的数据格式
server_id:mysql服务id
max_connections:mysql最大连接数
client:mysql客户端配置
manager:mysql管理配置
default-character-set:mysql字符集
创建 Secret
1 2 3 4 5 6 7 8 9 10 11 kind: Secret apiVersion: v1 metadata: name: mysql namespace: stable-db labels: app: mysql data: mysql-password: <base64-encoded-password> mysql-root-password: <base64-encoded-password> type: Opaque
创建 StatefulSet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql namespace: stable-db labels: app: mysql spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: <image> imagePullPolicy: IfNotPresent ports: - containerPort: 3306 name: mysql protocol: TCP env: - name: BITNAMI_DEBUG value: "false" - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql key: mysql-root-password - name: MYSQL_USER value: <user> - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: mysql key: mysql-password - name: MYSQL_DATABASE value: <database> volumeMounts: - name: mysql-data mountPath: /bitnami/mysql - name: mysql-config mountPath: /opt/bitnami/mysql/conf/my.cnf subPath: my.cnf livenessProbe: exec: command: - sh - '-c' - | password_aux="${MYSQL_ROOT_PASSWORD:-}" if [ -f "${MYSQL_ROOT_PASSWORD_FILE:-}" ]; then password_aux=$(cat $MYSQL_ROOT_PASSWORD_FILE) fi mysqladmin status -uroot -p$password_aux initialDelaySeconds: 120 timeoutSeconds: 10 periodSeconds: 30 successThreshold: 1 failureThreshold: 6 readinessProbe: exec: command: - sh - '-c' - | password_aux="${MYSQL_ROOT_PASSWORD:-}" if [ -f "${MYSQL_ROOT_PASSWORD_FILE:-}" ]; then password_aux=$(cat $MYSQL_ROOT_PASSWORD_FILE) fi mysqladmin status -uroot -p$password_aux initialDelaySeconds: 120 timeoutSeconds: 10 periodSeconds: 30 successThreshold: 1 failureThreshold: 6 resources: limits: cpu: "2" memory: 8Gi requests: cpu: "2" memory: 8Gi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File securityContext: {} volumes: - name: mysql-data persistentVolumeClaim: claimName: mysql-data - name: mysql-config configMap: name: mysql-config
配置说明:
环境变量:
BITNAMI_DEBUG:是否开启调试模式
MYSQL_ROOT_PASSWORD:mysql root用户密码
MYSQL_ROOT_PASSWORD_FILE:mysql root用户密码文件
MYSQL_USER:mysql用户
MYSQL_PASSWORD:mysql用户密码
MYSQL_DATABASE:mysql数据库
创建 Service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 apiVersion: v1 kind: Service metadata: name: mysql namespace: stable-db annotations: cloud.google.com/l4-rbs: "enabled" labels: app: mysql spec: loadBalancerIP: <ip> type: LoadBalancer externalTrafficPolicy: Cluster ports: - port: <port> nodePort: <node-port> targetPort: 3306 protocol: TCP selector: app: mysql
docker-compose 部署 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 version: '3' services: mysql: image: ghcr.io/tapdata/mysql:5.7 container_name: mysql restart: always ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=Gotapd8! - MYSQL_USER=tapdata - MYSQL_PASSWORD=Gotapd8! - MYSQL_DATABASE=test volumes: - ./conf/my.cnf:/opt/bitnami/mysql/conf/my.cnf - /data/mysql:/bitnami/mysql deploy: resources: limits: cpus: '2' memory: 8G reservations: cpus: '2' memory: 8G