yaml 部署 mysql
非持久化部署
下载 mysql 镜像
从 docker 镜像仓库下载 https://hub.docker.com/ 选择 tags 找到要下载的镜像版本,下载到本地(离线部署时这么操作)。
创建 yaml 文件 ,如: mysql.yaml
apiVersion: apps/v1 #版本
kind: Deployment #创建资源的类型
metadata: #资源的元数据
name: mysql-dep #资源的名称,是元数据必填项
spec: #期望状态
replicas: 1 #创建的副本数量(pod数量),不填默认为1
selector: #
matchLabels:
app: mysql-pod
template: #定义pod的模板
metadata: #pod的元数据
labels: #labels标签,必填一个
app: mysql-pod
spec: #pod的期望状态
containers: #容器
- name: mysql #容器名称
image: mysql:8.0.36 #镜像
imagePullPolicy: IfNotPresent
ports: #容器的端口
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456" #设置 root 密码
---
apiVersion: v1 #版本
kind: Service #创建资源的类型
metadata: #资源的元数据
name: mysql-svc #资源的名称,是元数据必填项
labels: #labels标签
app: mysql-svc
spec: #期望状态
type: NodePort #服务类型
ports: #端口
- port: 3306
targetPort: 3306 #与containerPort一样
protocol: TCP
nodePort: 30480
selector:
app: mysql-pod
然后执行 kubectl apply -f mysql.yaml 部署mysql
kubectl apply -f mysql.yaml
查看 pod 运行状态
kubectl get pod -A |grep mysql
查看 svc
kubectl get svc -A |grep mysql
可以外界访问了,使用映射的 30480 端口号
如果出现访问不通,查看下 endpoints 是否关联上的 IP 和端口
kubectl get endpoints
上面操作是没有持久化的,如果 mysql 的 pod 被删除了,调度到另外一个节点后数据会丢失。
持久化操作
需要先 创建 nfs
创建 mysql.yaml 文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-dep # deployment控制器名称
spec:
replicas: 1
revisionHistoryLimit: 5
strategy:
type: RollingUpdate
selector:
matchLabels:
app: mysql-pod #选择器 service 的要与其一致
template:
metadata:
labels:
app: mysql-pod
spec:
volumes:
- name: mysql-pod
persistentVolumeClaim:
claimName: mysql-pvc #关联的pvc
containers:
- name: mysql
image: mysql:8.0.36
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456" # 设置MySQL数据库登录密码
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-pod
mountPath: /var/lib/mysql #容器内部挂载路径
---
apiVersion: v1
kind: Service
metadata:
name: mysql-svc # 数据库服务的名称
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
nodePort: 30480 # 对外访问的端口
selector:
app: mysql-pod
type: NodePort
sessionAffinity: ClientIP
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
storageClassName: nfs #配置为nfs 需要与 pv 的一致
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi #配置容量大小 需要与 pv 的一致
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 5Gi #配置容量大小
accessModes:
- ReadWriteOnce #配置访问策略为只允许一个节点读写
persistentVolumeReclaimPolicy: Retain #配置回收策略,Retain为手动回收
storageClassName: nfs #配置为nfs
nfs:
path: /usr/local/k8s/data/mysql #配置nfs服务端的共享路径
server: 10.137.200.151 #配置nfs服务器地址
执行 部署命令,部署完成后 外部访问 mysql 连接成功。
kubectl apply -f mysql.yaml
查看 pv
kubectl get pv
查看 pvc
kubectl get pvc
查看 mysql pod
kubectl get pod -A |grep mysql
查看 service
kubectl get svc -A |grep mysql
mysql 8.0 添加用户及授权
添加用户
登录mysql 服务器
mysql -u root -p
创建新用户
# new_user是新用户的名称
# localhost是该用户的登录主机,“localhost"只允许本地连接,而”%"允许所有IP地址都可以连接到服务器
# user_password是该用户的密码
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'user_password';
mysql 8.0版本给用户授全部数据库权限
# 将username、hostname和password替换为实际的用户名、主机名和密码。
# GRANT ALL PRIVILEGES ON *.* TO 'username'@'hostname'这行命令授予username用户在所有数据库(*.*)上的所有权限。
# WITH GRANT OPTION是可选的,它允许该用户将这些权限授予其他用户。
#FLUSH PRIVILEGES;用于确保权限更改立即生效。
ALTER USER 'username'@'hostname' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'hostname' WITH GRANT OPTION;
FLUSH PRIVILEGES;
查看mysql所有用户以及权限
SELECT user, host, authentication_string FROM mysql.user;
删除用户
drop user 'new_user'@'localhost';
FLUSH PRIVILEGES;
修改密码
# 修改用户密码
ALTER USER 'your_user'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;