diff --git a/pmm_qa/percona_server/init.sql.j2 b/pmm_qa/percona_server/data/init-group-replication.sql.j2 similarity index 100% rename from pmm_qa/percona_server/init.sql.j2 rename to pmm_qa/percona_server/data/init-group-replication.sql.j2 diff --git a/pmm_qa/percona_server/my.cnf.j2 b/pmm_qa/percona_server/data/my-group-replication.cnf.j2 similarity index 100% rename from pmm_qa/percona_server/my.cnf.j2 rename to pmm_qa/percona_server/data/my-group-replication.cnf.j2 diff --git a/pmm_qa/percona_server/data/ps_load.sql b/pmm_qa/percona_server/data/ps_load.sql new file mode 100644 index 00000000..6df95275 --- /dev/null +++ b/pmm_qa/percona_server/data/ps_load.sql @@ -0,0 +1,94 @@ +-- ======================================== +-- CREATE TABLES +-- ======================================== + +CREATE TABLE students ( + student_id INT AUTO_INCREMENT PRIMARY KEY, + first_name VARCHAR(50), + last_name VARCHAR(50), + birth_date DATE +); + +CREATE TABLE classes ( + class_id INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(100), + teacher VARCHAR(100) +); + +CREATE TABLE enrollments ( + enrollment_id INT AUTO_INCREMENT PRIMARY KEY, + student_id INT, + class_id INT, + enrollment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (student_id) REFERENCES students(student_id), + FOREIGN KEY (class_id) REFERENCES classes(class_id) +); + +-- ======================================== +-- INSERT INITIAL DATA +-- ======================================== + +INSERT INTO students (first_name, last_name, birth_date) VALUES +('Alice', 'Smith', '2005-04-10'), +('Bob', 'Johnson', '2006-08-15'), +('Charlie', 'Brown', '2004-12-01'); + +INSERT INTO classes (name, teacher) VALUES +('Mathematics', 'Mrs. Taylor'), +('History', 'Mr. Anderson'), +('Science', 'Dr. Reynolds'); + +INSERT INTO enrollments (student_id, class_id) VALUES +(1, 1), +(1, 2), +(2, 2), +(3, 1), +(3, 3); + +-- ======================================== +-- SELECT: View all data after insert +-- ======================================== + +-- View all students +SELECT * FROM students; + +-- View all classes +SELECT * FROM classes; + +-- View all enrollments +SELECT * FROM enrollments; + +-- View students enrolled in Mathematics +SELECT s.first_name, s.last_name +FROM students s +JOIN enrollments e ON s.student_id = e.student_id +JOIN classes c ON e.class_id = c.class_id +WHERE c.name = 'Mathematics'; + +-- Count students per class +SELECT c.name AS class_name, COUNT(e.student_id) AS student_count +FROM classes c +LEFT JOIN enrollments e ON c.class_id = e.class_id +GROUP BY c.name; + +-- ======================================== +-- UPDATE DATA +-- ======================================== + +UPDATE students +SET last_name = 'Williams' +WHERE first_name = 'Bob' AND last_name = 'Johnson'; + +UPDATE classes +SET teacher = 'Ms. Carter' +WHERE name = 'History'; + +-- ======================================== +-- DELETE DATA +-- ======================================== + +DELETE FROM enrollments +WHERE student_id = (SELECT student_id FROM students WHERE first_name = 'Alice' AND last_name = 'Smith'); + +DELETE FROM students +WHERE first_name = 'Alice' AND last_name = 'Smith'; \ No newline at end of file diff --git a/pmm_qa/percona_server/percona-server-setup.yml b/pmm_qa/percona_server/percona-server-setup.yml index 35227759..5972571e 100644 --- a/pmm_qa/percona_server/percona-server-setup.yml +++ b/pmm_qa/percona_server/percona-server-setup.yml @@ -132,7 +132,7 @@ - name: Add service to pmm server community.docker.docker_container_exec: container: "ps_pmm_{{ ps_version }}_{{ item }}" - command: pmm-admin add mysql --query-source={{ query_source }} --username=root --password={{ root_password }} --environment=ps-dev ps_pmm_{{ ps_version }}_{{ item }}{{ random_service_name_value }} --debug 127.0.0.1:3306 + command: pmm-admin add mysql --query-source={{ query_source }} --username=root --password={{ root_password }} --cluster=ps-single-dev-cluster --environment=ps-dev ps_pmm_{{ ps_version }}_{{ item }}{{ random_service_name_value }} --debug 127.0.0.1:3306 loop: "{{ range(1, nodes_count | int + 1) | list }}" when: setup_type != "gr" and setup_type != "replication" @@ -234,3 +234,35 @@ --time=60 run loop: "{{ range(1, nodes_count | int + 1) | list }}" + + - name: Copy a load file into the container + community.docker.docker_container_copy_into: + container: "ps_pmm_{{ ps_version }}_{{ item }}" + path: ./data/ps_load.sql + container_path: /ps_load.sql + loop: "{{ range(1, nodes_count | int + 1) | list }}" + + - name: Wait 10 seconds for node to be connected + pause: + seconds: 10 + + - name: Run load inside of first percona server node + community.docker.docker_container_exec: + container: "ps_pmm_{{ ps_version }}_1" + command: > + /bin/sh -c ' + mysql -uroot -p{{ root_password }} -e "CREATE DATABASE school;" + mysql -uroot -p{{ root_password }} school < /ps_load.sql + ' + when: setup_type == "gr" or setup_type == "replication" + + - name: Run load inside of all percona server nodes + community.docker.docker_container_exec: + container: "ps_pmm_{{ ps_version }}_{{ item }}" + command: > + /bin/sh -c ' + mysql -uroot -p{{ root_password }} -e "CREATE DATABASE school;" + mysql -uroot -p{{ root_password }} school < /ps_load.sql + ' + loop: "{{ range(1, nodes_count | int + 1) | list }}" + when: setup_type != "gr" and setup_type != "replication" \ No newline at end of file diff --git a/pmm_qa/percona_server/tasks/percona-server-group-replication-setup.yml b/pmm_qa/percona_server/tasks/percona-server-group-replication-setup.yml index 0f6d72f9..cd179239 100644 --- a/pmm_qa/percona_server/tasks/percona-server-group-replication-setup.yml +++ b/pmm_qa/percona_server/tasks/percona-server-group-replication-setup.yml @@ -1,12 +1,12 @@ - name: Generate my.cnf for each node template: - src: my.cnf.j2 + src: ./data/my-group-replication.cnf.j2 dest: "{{ data_dir }}/node{{ item }}/my.cnf" loop: "{{ range(1, nodes_count | int + 1) | list }}" - name: Create initialization script for each node template: - src: init.sql.j2 + src: ./data/init-group-replication.sql.j2 dest: "{{ data_dir }}/node{{ item }}/init.sql" loop: "{{ range(1, nodes_count | int + 1) | list }}"