本站总访问量 mysql数据库搭建 - Jerry的小站

Jerry Gao

上帝就是真理,真理就是上帝

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 root

RUN 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部署

  1. 创建 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
  1. 创建 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字符集
  1. 创建 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
  1. 创建 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数据库
  1. 创建 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

评论