Skip to content

Commit b4d6202

Browse files
authored
Merge pull request #753 from PureStorage-OpenConnect/mysql-demo
mysql consistent snap demo
2 parents 27a5cb1 + 9a8b428 commit b4d6202

7 files changed

Lines changed: 152 additions & 1 deletion

File tree

assets/mysql/README.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
## run a mysql application consistent snapshot demo
2+
3+
#### 0. have px cluster up & running
4+
5+
#### 1. apply mysql namespace & application
6+
7+
```
8+
kubectl apply -f /assets/mysql/mysql.yml
9+
```
10+
11+
#### 2. check for mysql pod readiness
12+
13+
```
14+
kubectl wait --for=condition=ready pod -l app=mysql -n mysql
15+
```
16+
17+
#### 3. apply demo data
18+
19+
```
20+
POD=$(kubectl get pods -n mysql -l app=mysql -ojson | jq -r '.items[0].metadata.name')
21+
```
22+
23+
```
24+
kubectl exec $POD -n mysql -it -- /bin/mysql -u mysql -psupermysql < /assets/mysql/sample-data.sql
25+
```
26+
27+
#### 4. check for data within DB
28+
29+
```
30+
kubectl exec $POD -n mysql -it -- /bin/mysql -u mysql -psupermysql pxdemo -e 'SELECT * FROM users'
31+
```
32+
33+
#### 5. apply pre/post rules
34+
35+
```
36+
kubectl apply -f /assets/mysql/px-mysql-pre-rule.yml
37+
38+
kubectl apply -f /assets/mysql/px-mysql-post-rule.yml
39+
```
40+
41+
#### 6. run snapshot
42+
43+
```
44+
kubectl apply -f /assets/mysql/snapshot.yml
45+
```
46+
47+
#### 7. validate snapshot
48+
49+
```
50+
kubectl get volumesnapshot.volumesnapshot.external-storage.k8s.io/mysql-snap -n mysql -oyaml
51+
```
52+
53+
(optionally follow stork pod logs)
54+
55+
#### 8. delete table
56+
57+
```
58+
kubectl exec $POD -n mysql -it -- /bin/mysql -u mysql -psupermysql pxdemo -e 'DROP TABLE users; SHOW TABLES'
59+
```
60+
61+
#### 9. run snapshot restore
62+
63+
```
64+
kubectl apply -f /assets/mysql/restore-snap.yml
65+
```
66+
67+
check status
68+
69+
```
70+
kubectl get volumesnapshotrestore.stork.libopenstorage.org/mysql-snap-inrestore -n mysql -o yaml
71+
```
72+
73+
(wait for status successful)
74+
75+
#### 10. validate data restore
76+
77+
check for mysql pod readiness
78+
79+
```
80+
kubectl wait --for=condition=ready pod -l app=mysql -n mysql
81+
```
82+
83+
update pod name variable
84+
85+
```
86+
POD=$(kubectl get pods -n mysql -l app=mysql -ojson | jq -r '.items[0].metadata.name')
87+
```
88+
89+
```
90+
kubectl exec $POD -n mysql -it -- /bin/mysql -u mysql -psupermysql pxdemo -e 'SELECT * FROM users'
91+
```

assets/mysql/mysql.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: mysql
5+
---
16
kind: PersistentVolumeClaim
27
apiVersion: v1
38
metadata:
49
name: px-mysql-pvc
10+
namespace: mysql
511
spec:
612
storageClassName: px-csi-db
713
accessModes:
@@ -14,6 +20,7 @@ apiVersion: apps/v1
1420
kind: Deployment
1521
metadata:
1622
name: mysql
23+
namespace: mysql
1724
spec:
1825
selector:
1926
matchLabels:
@@ -32,7 +39,7 @@ spec:
3239
schedulerName: stork
3340
containers:
3441
- name: mysql
35-
image: mysql:5.7.33
42+
image: mysql:9.2.0
3643
imagePullPolicy: "IfNotPresent"
3744
ports:
3845
- containerPort: 5432
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: stork.libopenstorage.org/v1alpha1
2+
kind: Rule
3+
metadata:
4+
name: px-mysql-postsnap-rule
5+
namespace: mysql
6+
rules:
7+
- podSelector:
8+
app: mysql
9+
actions:
10+
- type: command
11+
value: mysql --user=root --password=$MYSQL_ROOT_PASSWORD -Bse 'FLUSH LOGS; UNLOCK TABLES;'

assets/mysql/px-mysql-pre-rule.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: stork.libopenstorage.org/v1alpha1
2+
kind: Rule
3+
metadata:
4+
name: px-mysql-presnap-rule
5+
namespace: mysql
6+
rules:
7+
- podSelector:
8+
app: mysql
9+
actions:
10+
- type: command
11+
background: true
12+
# this command will flush tables with read lock
13+
value: mysql --system-command=ON --user=root --password=$MYSQL_ROOT_PASSWORD -Bse 'FLUSH TABLES WITH READ LOCK; SYSTEM ${WAIT_CMD};'

assets/mysql/restore-snap.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#replace existing pv with snapshot
2+
apiVersion: stork.libopenstorage.org/v1alpha1
3+
kind: VolumeSnapshotRestore
4+
metadata:
5+
name: mysql-snap-inrestore
6+
namespace: mysql
7+
spec:
8+
sourceName: mysql-snap
9+
sourceNamespace: mysql

assets/mysql/sample-data.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
USE pxdemo;
2+
CREATE TABLE users (
3+
id INT AUTO_INCREMENT PRIMARY KEY,
4+
first_name VARCHAR(50),
5+
last_name VARCHAR(50)
6+
);
7+
INSERT INTO users (first_name, last_name) VALUES
8+
('Alice', 'Anderson'),
9+
('Bob', 'Barker'),
10+
('Charlie', 'Chaplin');

assets/mysql/snapshot.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: volumesnapshot.external-storage.k8s.io/v1
2+
kind: VolumeSnapshot
3+
metadata:
4+
name: mysql-snap
5+
namespace: mysql
6+
annotations:
7+
stork.rule/pre-snapshot: px-mysql-presnap-rule
8+
stork.rule/post-snapshot: px-mysql-postsnap-rule
9+
spec:
10+
persistentVolumeClaimName: px-mysql-pvc

0 commit comments

Comments
 (0)