From d7dbfd081ce2bd1f81047f2628f68eec6229f1ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Tue, 21 May 2024 15:56:42 +0800 Subject: [PATCH 01/32] begin add 8.4 support --- .../mysql_server/templates/8.4/my.cnf.j2 | 250 ++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 new file mode 100644 index 0000000..317611d --- /dev/null +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -0,0 +1,250 @@ +[mysql] +auto-rehash + +[mysqld] +####: for global +user ={{ mysql_user }} # mysql +basedir ={{ mysql_base_dir }} # /usr/local/mysql/ +datadir ={{ mysql_data_dir_base }}/data/{{ mysql_port }} # /usr/local/mysql/data +tmpdir ={{ mysql_data_dir_base }}/tmp/{{ mysql_port }} +server_id ={{ mysql_server_id }} # 0 +port ={{ mysql_port }} # 3306 +character_set_server ={{ mysql_character_set_server }} # utf8mb4 +log_bin_trust_function_creators =ON # OFF +max_prepared_stmt_count =1048576 # 16382 +log_timestamps =SYSTEM # UTC +pid_file =mysqld.pid +read_only =OFF # OFF +super_read_only =OFF # OFF +skip_name_resolve =ON # OFF +auto_increment_increment =1 # 1 +auto_increment_offset =1 # 1 +lower_case_table_names =1 # 0 +open_files_limit =65536 # 5000, with possible adjustment +max_connections ={{ mysql_max_connections | default(1000) }} # 151 +thread_cache_size ={{ [(server_specs_processor_count | int ) * 8, 256 ] | max }} # 8 + (max_connections / 100), capped to a limit of 100 +table_open_cache =4000 # 4000 +table_definition_cache =2000 # MIN(400 + table_open_cache / 2, 2000) +table_open_cache_instances ={{ [(server_specs_processor_count | int ) // 2, 16 ] | max }} # 16 +local_infile =OFF # OFF +disabled_storage_engines=archive,blackhole,example,federated,memory,merge,ndb,myisam # empty +plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so;validate_password=validate_password.so" +transaction_isolation ={{ mysql_transaction_isolation }} # REPEATABLE-READ +{% if sock_type == 1 %} +socket = mysql.sock # /tmp/mysql.sock +mysqlx_socket = mysqlx.sock # /tmp/mysqlx.sock +{% elif sock_type == 2 %} +socket = /tmp/mysql{{ mysql_port }}.sock +mysqlx_socket = /tmp/mysqlx{{ mysql_port }}.sock +{% elif sock_type == 3 %} +socket = {{ mysql_data_dir_base }}/run/mysql{{ mysql_port }}.sock +mysqlx_socket = {{ mysql_data_dir_base }}/run/mysqlx{{ mysql_port }}.sock +{% endif %} + + +####: for binlog +binlog_error_action =ABORT_SERVER # ABORT_SERVER +log_bin ={{ mysql_data_dir_base }}/log/binlog/{{ mysql_port }}/mysql-bin # ON +binlog_rows_query_log_events =ON # OFF +log_replica_updates =ON # ON +binlog_checksum =CRC32 # CRC32 +sync_binlog =1 # 1 +replica_preserve_commit_order =ON # ON + + +####: for error-log +log_error =error.log # hostname.err + +general_log =OFF # OFF +general_log_file =general.log # hostname.log + +####: for slow query log +slow_query_log =ON # OFF +slow_query_log_file =slow.log # hostname.log +log_queries_not_using_indexes =OFF # OFF +long_query_time =2.000000 # 10.000000 + +####: for gtid +gtid_executed_compression_period =0 # 0 +gtid_mode =ON # OFF +enforce_gtid_consistency =ON # OFF + + +####: for replication +skip_slave_start =OFF # OFF +relay_log ={{ mysql_data_dir_base }}/log/relaylog/{{ mysql_port }}/relay-bin +relay_log_recovery =ON # OFF +replica_parallel_type =LOGICAL_CLOCK # LOGICAL_CLOCK +replica_parallel_workers ={{ [(server_specs_processor_count | int ) * 4 ,32] | min }} # 0 +loose-rpl_semi_sync_source_enabled =ON # OFF +loose-rpl_semi_sync_replica_enabled =ON # OFF +loose-rpl_semi_sync_source_timeout =1000 # 10000(10 second) +binlog_group_commit_sync_delay =500 # 0 500(0.05% second) +binlog_group_commit_sync_no_delay_count = 13 # 0 + + +####: for innodb +default_storage_engine =InnoDB # InnoDB +default_tmp_storage_engine =InnoDB # InnoDB +innodb_data_file_path =ibdata1:64M:autoextend # ibdata1:12M:autoextend +innodb_temp_data_file_path =ibtmp1:12M:autoextend # ibtmp1:12M:autoextend +innodb_buffer_pool_filename =ib_buffer_pool # ib_buffer_pool +innodb_log_group_home_dir ={{ mysql_data_dir_base }}/log/redolog/{{ mysql_port }} # datadir +{% if server_specs != "auto" %} +{% set server_specs_memtotal_gb_int = server_specs_memtotal_gb | int %} +{% if mysql_version is version('8.0.30', '<') %} +{% if (server_specs_memtotal_gb_int * 0.6) < 8 %} +innodb_log_file_size = 512MB +innodb_log_files_in_group = {{ [(server_specs_memtotal_gb_int * 0.6) | round(0, 'ceil') | int, 2 ] | max }} +{% elif 8 <= (server_specs_memtotal_gb_int * 0.6) <= 128 %} +innodb_log_file_size = 1024MB +innodb_log_files_in_group = {{ [(server_specs_memtotal_gb_int * 0.6 * 0.75) | round(0, 'ceil') | int, 2 ] | max }} +{% else %} +innodb_log_file_size = 2048MB +innodb_log_files_in_group = 64 +{% endif %} +{% else %} +{% if server_specs_memtotal_gb_int < 2 %} +innodb_redo_log_capacity = 100MB +{% elif 2 <= server_specs_memtotal_gb_int < 4 %} +innodb_redo_log_capacity = 1GB +{% elif 4 <= server_specs_memtotal_gb_int < 11 %} +innodb_redo_log_capacity = {{ (0.75 * server_specs_memtotal_gb_int * 0.5) | round(0, 'ceil') | int }}GB +{% elif 11 <= server_specs_memtotal_gb_int < 171 %} +innodb_redo_log_capacity = {{ (0.5625 * server_specs_memtotal_gb_int * 0.5) | round(0, 'ceil') | int }}GB +{% else %} +innodb_redo_log_capacity = 128GB +{% endif %} +{% endif %} +{% endif %} +innodb_file_per_table =ON # ON +innodb_online_alter_log_max_size =128M # 134217728(128M) +innodb_open_files ={{ mysql_innodb_open_files }} # -1 (auto) +innodb_page_size =16K # 16384(16K) +innodb_thread_concurrency =0 # 0 +innodb_read_io_threads ={{ [ server_specs_processor_count, 4 ] | max }} # (available logical processors / 2), min of 4 +innodb_write_io_threads =4 # 4 +innodb_purge_threads ="{{ 1 if server_specs_processor_count <= 16 else 4 }}" # 1 if # of available logical processors is <= 16; otherwise 4 +innodb_print_all_deadlocks =ON # OFF +innodb_deadlock_detect =ON # ON +innodb_lock_wait_timeout =50 # 50 +innodb_spin_wait_delay =6 # 6 +innodb_autoinc_lock_mode =2 # 1 +innodb_io_capacity =10000 # 10000 +innodb_io_capacity_max =20000 # 2 * innodb_io_capacity +#--------Persistent Optimizer Statistics +innodb_stats_auto_recalc =ON # ON +innodb_stats_persistent =ON # ON +innodb_stats_persistent_sample_pages =20 # 20 +{# -- set innodb_buffer_pool_instances -- #} +{% if ((server_specs_memtotal_gb | int ) * 0.6 ) < 64 %} +innodb_buffer_pool_instances ={{ [ (((server_specs_memtotal_gb | int ) * 0.6) | round(0, 'ceil') | int ) , 1 ] | max }} +{% else %} +innodb_buffer_pool_instances =64 +{% endif %} +{# -- set innodb_buffer_pool_instances -- #} +innodb_adaptive_hash_index =OFF # OFF +innodb_change_buffering =none # none +#innodb_change_buffer_max_size =25 # 25 +innodb_flush_neighbors =OFF # OFF +#innodb_flush_method =O_DIRECT # fsync +innodb_doublewrite =ON # ON +innodb_log_buffer_size ={{ mysql_innodb_log_buffer_size }} # 67108864(64M) +innodb_flush_log_at_timeout =1 # 1 +innodb_flush_log_at_trx_commit =1 # 1 +{% if server_specs != "auto" %} +innodb_buffer_pool_size ={{ ((server_specs_memtotal_gb | int ) * 1024 * 0.6 // 128 * 128 ) | round(0, 'ceil') | int }}M # 134217728(128M) +{% endif %} +autocommit =ON # ON +#--------innodb scan resistant +innodb_old_blocks_pct =37 # 37 +innodb_old_blocks_time =1000 # 1000 +#--------innodb read ahead +innodb_read_ahead_threshold =56 # 56 (0..64) +innodb_random_read_ahead =OFF # OFF +#--------innodb buffer pool state +innodb_buffer_pool_dump_pct =25 # 25 +innodb_buffer_pool_dump_at_shutdown =ON # ON +innodb_buffer_pool_load_at_startup =ON # ON + +#--------undo log +innodb_undo_log_truncate = ON # ON +innodb_max_undo_log_size = 2G # 1G + +report_host = {{ ansible_default_ipv4.address }} +default_time_zone = {{ mysql_default_time_zone }} + +{% if mtls_with_mysql_group_replication == 1 %} +####: for mysql group replication +loose-group_replication_recovery_retry_count =10 # 10 +loose-group_replication_recovery_reconnect_interval =60 # 60 +loose-group_replication_ip_allowlist =AUTOMATIC # AUTOMATIC +loose-group_replication_group_name ="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # +loose-group_replication_start_on_boot =OFF # ON +loose-group_replication_bootstrap_group =OFF # OFF +loose-group_replication_single_primary_mode =ON # ON +loose-group_replication_enforce_update_everywhere_checks=OFF # OFF +loose-group_replication_gtid_assignment_block_size =1000000 # 1000000 +loose-group_replication_poll_spin_loops =0 # 0 +loose-group_replication_compression_threshold =1000000 # 1000000 +loose-group_replication_flow_control_mode =QUOTA # QUOTA +loose-group_replication_consistency =BEFORE_ON_PRIMARY_FAILOVER # BEFORE_ON_PRIMARY_FAILOVER +loose-group_replication_exit_state_action =OFFLINE_MODE # OFFLINE_MODE +loose-group_replication_paxos_single_leader =ON # OFF +{% for ip in ansible_all_ipv4_addresses %} + {%- for host_ip in mysql_mgr_hosts %} + {%- if ip == host_ip %} +loose-group_replication_local_address ="{{ ip }}:{{ mysql_mgr_port }}" +report_host ="{{ ip }}" + {%- endif %} + {%- endfor %} +{% endfor %} + +{% set gs = ':' + (mysql_mgr_port | string)+',' %} +loose-group_replication_group_seeds ="{{ mysql_mgr_hosts | join(gs) + ':' + (mysql_mgr_port | string) }}" +{% endif %} + + +#### for performance_schema +performance_schema =ON # ON + +performance_schema_consumer_events_stages_current =ON # OFF +performance_schema_consumer_events_stages_history =ON # OFF +performance_schema_consumer_events_stages_history_long =OFF # OFF +performance_schema_consumer_events_statements_cpu =OFF # OFF +performance_schema_consumer_events_statements_current =ON # ON +performance_schema_consumer_events_statements_history =ON # ON +performance_schema_consumer_events_statements_history_long =OFF # OFF +performance_schema_consumer_events_transactions_current =ON # ON +performance_schema_consumer_events_transactions_history =ON # ON +performance_schema_consumer_events_transactions_history_long =off # OFF +performance_schema_consumer_events_waits_current =ON # OFF +performance_schema_consumer_events_waits_history =ON # OFF +performance_schema_consumer_events_waits_history_long =OFF # OFF +performance_schema_consumer_global_instrumentation =ON # ON +performance_schema_consumer_thread_instrumentation =ON # ON +performance_schema_consumer_statements_digest =ON # ON + +performance_schema_instrument ='memory/%=COUNTED' + + +admin_address = 127.0.0.1 # null +admin_port = {{ (mysql_port*10 + 2) | string }} # 33062 +mysqlx_port = {{ (mysql_port*10) | string }} # 33060 +event_scheduler=OFF # ON +sql_require_primary_key=ON # OFF +activate_all_roles_on_login=ON # OFF +plugin-load-add=mysql_clone.so +#default_authentication_plugin=caching_sha2_password # caching_sha2_password +explicit_defaults_for_timestamp = ON # ON +log_error_verbosity=2 # 2 +max_allowed_packet=64M # 64M +{% if server_specs == "auto" %} +innodb_dedicated_server=ON # OFF +{% else %} +innodb_dedicated_server=OFF # OFF +{% endif %} +loose-sql_generate_invisible_primary_key=ON # OFF +terminology_use_previous=NONE # NONE +binlog_expire_logs_seconds=604800 # 2592000 (equivalent to 30 days) +performance_schema_show_processlist=ON # OFF -- Gitee From fcb2e541d7c76cc16283ed4e633f37c80a6ebee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Tue, 21 May 2024 18:13:20 +0800 Subject: [PATCH 02/32] =?UTF-8?q?group=5Freplication=5Fgroup=5Fname?= =?UTF-8?q?=E5=9C=A88.4=E9=87=8C=E9=BB=98=E8=AE=A4=E6=98=AF=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=E7=94=9F=E6=88=90=E7=9A=84=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql_ansible/playbooks/common_config.yml | 1 + mysql_ansible/playbooks/pre_tasks/confirmation.yml | 11 +++++++++++ .../roles/mysql_server/templates/8.4/my.cnf.j2 | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/mysql_ansible/playbooks/common_config.yml b/mysql_ansible/playbooks/common_config.yml index 1f28ec0..834bd0c 100644 --- a/mysql_ansible/playbooks/common_config.yml +++ b/mysql_ansible/playbooks/common_config.yml @@ -61,6 +61,7 @@ mysql57_innodb_log_files_in_group: 16 mysql57_innodb_log_file_size: 256M use_write_set: 1 sock_type: 1 # 1 for ${datadir}/mysql.sock, 2 for /tmp/mysql${port}.sock, 3 for ${mysql_data_dir_base}/run/mysql${port}.sock +mgr_use_random_uuid: 1 ## Feature Control Switch fcs_skip_db_mount_verification: 1 diff --git a/mysql_ansible/playbooks/pre_tasks/confirmation.yml b/mysql_ansible/playbooks/pre_tasks/confirmation.yml index 03a5537..5753004 100644 --- a/mysql_ansible/playbooks/pre_tasks/confirmation.yml +++ b/mysql_ansible/playbooks/pre_tasks/confirmation.yml @@ -54,6 +54,17 @@ run_once: true delegate_to: localhost +- name: Generate random UUID if mgr_use_random_uuid is set to 1 + command: uuidgen + register: random_uuid_result + when: mgr_use_random_uuid == 1 + run_once: true + delegate_to: localhost + +- set_fact: + mysql_group_replication_group_name: "{{ random_uuid_result.stdout }}" + when: mgr_use_random_uuid == 1 + - name: Display the list of target hosts and additional information ansible.builtin.debug: msg: "{{ base_msg + master_ip_msg + slave_ips_msg + vip_msg + manager_ip_msg }}" diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index 317611d..406d5c0 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -179,7 +179,7 @@ default_time_zone = {{ mysql_default_time_zone }} loose-group_replication_recovery_retry_count =10 # 10 loose-group_replication_recovery_reconnect_interval =60 # 60 loose-group_replication_ip_allowlist =AUTOMATIC # AUTOMATIC -loose-group_replication_group_name ="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # +loose-group_replication_group_name = "{{ mysql_group_replication_group_name if mgr_use_random_uuid == 1 else 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' }}" loose-group_replication_start_on_boot =OFF # ON loose-group_replication_bootstrap_group =OFF # OFF loose-group_replication_single_primary_mode =ON # ON -- Gitee From 485a3ef410a424a0fbf31b69b1ba7e869b66e3a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 22 May 2024 15:09:57 +0800 Subject: [PATCH 03/32] =?UTF-8?q?my.cnf=E6=A0=BC=E5=BC=8F=E5=AF=B9?= =?UTF-8?q?=E9=BD=90=EF=BC=8C=E4=BF=AE=E6=94=B9innodb=5Fbuffer=5Fpool=5Fin?= =?UTF-8?q?stances=E5=8F=82=E6=95=B0=E8=87=AA=E5=8A=A8=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mysql_server/templates/8.4/my.cnf.j2 | 338 +++++++++--------- 1 file changed, 174 insertions(+), 164 deletions(-) diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index 406d5c0..744938d 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -3,36 +3,36 @@ auto-rehash [mysqld] ####: for global -user ={{ mysql_user }} # mysql -basedir ={{ mysql_base_dir }} # /usr/local/mysql/ -datadir ={{ mysql_data_dir_base }}/data/{{ mysql_port }} # /usr/local/mysql/data -tmpdir ={{ mysql_data_dir_base }}/tmp/{{ mysql_port }} -server_id ={{ mysql_server_id }} # 0 -port ={{ mysql_port }} # 3306 -character_set_server ={{ mysql_character_set_server }} # utf8mb4 -log_bin_trust_function_creators =ON # OFF -max_prepared_stmt_count =1048576 # 16382 -log_timestamps =SYSTEM # UTC -pid_file =mysqld.pid -read_only =OFF # OFF -super_read_only =OFF # OFF -skip_name_resolve =ON # OFF -auto_increment_increment =1 # 1 -auto_increment_offset =1 # 1 -lower_case_table_names =1 # 0 -open_files_limit =65536 # 5000, with possible adjustment -max_connections ={{ mysql_max_connections | default(1000) }} # 151 -thread_cache_size ={{ [(server_specs_processor_count | int ) * 8, 256 ] | max }} # 8 + (max_connections / 100), capped to a limit of 100 -table_open_cache =4000 # 4000 -table_definition_cache =2000 # MIN(400 + table_open_cache / 2, 2000) -table_open_cache_instances ={{ [(server_specs_processor_count | int ) // 2, 16 ] | max }} # 16 -local_infile =OFF # OFF -disabled_storage_engines=archive,blackhole,example,federated,memory,merge,ndb,myisam # empty -plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so;validate_password=validate_password.so" -transaction_isolation ={{ mysql_transaction_isolation }} # REPEATABLE-READ +user = {{ mysql_user }} # mysql +basedir = {{ mysql_base_dir }} # /usr/local/mysql/ +datadir = {{ mysql_data_dir_base }}/data/{{ mysql_port }} # /usr/local/mysql/data +tmpdir = {{ mysql_data_dir_base }}/tmp/{{ mysql_port }} +server_id = {{ mysql_server_id }} # 0 +port = {{ mysql_port }} # 3306 +character_set_server = {{ mysql_character_set_server }} # utf8mb4 +log_bin_trust_function_creators = ON # OFF +max_prepared_stmt_count = 1048576 # 16382 +log_timestamps = SYSTEM # UTC +pid_file = mysqld.pid +read_only = OFF # OFF +super_read_only = OFF # OFF +skip_name_resolve = ON # OFF +auto_increment_increment = 1 # 1 +auto_increment_offset = 1 # 1 +lower_case_table_names = 1 # 0 +open_files_limit = 65536 # 5000, with possible adjustment +max_connections = {{ mysql_max_connections | default(1000) }} # 151 +thread_cache_size = {{ [(server_specs_processor_count | int ) * 8, 256 ] | max }} # 8 + (max_connections / 100), capped to a limit of 100 +table_open_cache = 4000 # 4000 +table_definition_cache = 2000 # MIN(400 + table_open_cache / 2, 2000) +table_open_cache_instances = {{ [(server_specs_processor_count | int ) // 2, 16 ] | max }} # 16 +local_infile = OFF # OFF +disabled_storage_engines = archive,blackhole,example,federated,memory,merge,ndb,myisam # empty +plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so;validate_password=validate_password.so" +transaction_isolation = {{ mysql_transaction_isolation }} # REPEATABLE-READ {% if sock_type == 1 %} -socket = mysql.sock # /tmp/mysql.sock -mysqlx_socket = mysqlx.sock # /tmp/mysqlx.sock +socket = mysql.sock # /tmp/mysql.sock +mysqlx_socket = mysqlx.sock # /tmp/mysqlx.sock {% elif sock_type == 2 %} socket = /tmp/mysql{{ mysql_port }}.sock mysqlx_socket = /tmp/mysqlx{{ mysql_port }}.sock @@ -41,55 +41,51 @@ socket = {{ mysql_data_dir_base }}/run/mysql{{ mysqlx_socket = {{ mysql_data_dir_base }}/run/mysqlx{{ mysql_port }}.sock {% endif %} - ####: for binlog -binlog_error_action =ABORT_SERVER # ABORT_SERVER -log_bin ={{ mysql_data_dir_base }}/log/binlog/{{ mysql_port }}/mysql-bin # ON -binlog_rows_query_log_events =ON # OFF -log_replica_updates =ON # ON -binlog_checksum =CRC32 # CRC32 -sync_binlog =1 # 1 -replica_preserve_commit_order =ON # ON - +binlog_error_action = ABORT_SERVER # ABORT_SERVER +log_bin = {{ mysql_data_dir_base }}/log/binlog/{{ mysql_port }}/mysql-bin # ON +binlog_rows_query_log_events = ON # OFF +log_replica_updates = ON # ON +binlog_checksum = CRC32 # CRC32 +sync_binlog = 1 # 1 +replica_preserve_commit_order = ON # ON ####: for error-log -log_error =error.log # hostname.err +log_error = error.log # hostname.err -general_log =OFF # OFF -general_log_file =general.log # hostname.log +general_log = OFF # OFF +general_log_file = general.log # hostname.log ####: for slow query log -slow_query_log =ON # OFF -slow_query_log_file =slow.log # hostname.log -log_queries_not_using_indexes =OFF # OFF -long_query_time =2.000000 # 10.000000 +slow_query_log = ON # OFF +slow_query_log_file = slow.log # hostname.log +log_queries_not_using_indexes = OFF # OFF +long_query_time = 2.000000 # 10.000000 ####: for gtid -gtid_executed_compression_period =0 # 0 -gtid_mode =ON # OFF -enforce_gtid_consistency =ON # OFF - +gtid_executed_compression_period = 0 # 0 +gtid_mode = ON # OFF +enforce_gtid_consistency = ON # OFF ####: for replication -skip_slave_start =OFF # OFF -relay_log ={{ mysql_data_dir_base }}/log/relaylog/{{ mysql_port }}/relay-bin -relay_log_recovery =ON # OFF -replica_parallel_type =LOGICAL_CLOCK # LOGICAL_CLOCK -replica_parallel_workers ={{ [(server_specs_processor_count | int ) * 4 ,32] | min }} # 0 -loose-rpl_semi_sync_source_enabled =ON # OFF -loose-rpl_semi_sync_replica_enabled =ON # OFF -loose-rpl_semi_sync_source_timeout =1000 # 10000(10 second) -binlog_group_commit_sync_delay =500 # 0 500(0.05% second) -binlog_group_commit_sync_no_delay_count = 13 # 0 - +skip_slave_start = OFF # OFF +relay_log = {{ mysql_data_dir_base }}/log/relaylog/{{ mysql_port }}/relay-bin +relay_log_recovery = ON # OFF +replica_parallel_type = LOGICAL_CLOCK # LOGICAL_CLOCK +replica_parallel_workers = {{ [(server_specs_processor_count | int ) * 4 ,32] | min }} # 0 +loose-rpl_semi_sync_source_enabled = ON # OFF +loose-rpl_semi_sync_replica_enabled = ON # OFF +loose-rpl_semi_sync_source_timeout = 1000 # 10000(10 second) +binlog_group_commit_sync_delay = 500 # 0 500(0.05% second) +binlog_group_commit_sync_no_delay_count = 13 # 0 ####: for innodb -default_storage_engine =InnoDB # InnoDB -default_tmp_storage_engine =InnoDB # InnoDB -innodb_data_file_path =ibdata1:64M:autoextend # ibdata1:12M:autoextend -innodb_temp_data_file_path =ibtmp1:12M:autoextend # ibtmp1:12M:autoextend -innodb_buffer_pool_filename =ib_buffer_pool # ib_buffer_pool -innodb_log_group_home_dir ={{ mysql_data_dir_base }}/log/redolog/{{ mysql_port }} # datadir +default_storage_engine = InnoDB # InnoDB +default_tmp_storage_engine = InnoDB # InnoDB +innodb_data_file_path = ibdata1:64M:autoextend # ibdata1:12M:autoextend +innodb_temp_data_file_path = ibtmp1:12M:autoextend # ibtmp1:12M:autoextend +innodb_buffer_pool_filename = ib_buffer_pool # ib_buffer_pool +innodb_log_group_home_dir = {{ mysql_data_dir_base }}/log/redolog/{{ mysql_port }} # datadir {% if server_specs != "auto" %} {% set server_specs_memtotal_gb_int = server_specs_memtotal_gb | int %} {% if mysql_version is version('8.0.30', '<') %} @@ -117,134 +113,148 @@ innodb_redo_log_capacity = 128GB {% endif %} {% endif %} {% endif %} -innodb_file_per_table =ON # ON -innodb_online_alter_log_max_size =128M # 134217728(128M) -innodb_open_files ={{ mysql_innodb_open_files }} # -1 (auto) -innodb_page_size =16K # 16384(16K) -innodb_thread_concurrency =0 # 0 -innodb_read_io_threads ={{ [ server_specs_processor_count, 4 ] | max }} # (available logical processors / 2), min of 4 -innodb_write_io_threads =4 # 4 -innodb_purge_threads ="{{ 1 if server_specs_processor_count <= 16 else 4 }}" # 1 if # of available logical processors is <= 16; otherwise 4 -innodb_print_all_deadlocks =ON # OFF -innodb_deadlock_detect =ON # ON -innodb_lock_wait_timeout =50 # 50 -innodb_spin_wait_delay =6 # 6 -innodb_autoinc_lock_mode =2 # 1 -innodb_io_capacity =10000 # 10000 -innodb_io_capacity_max =20000 # 2 * innodb_io_capacity +innodb_file_per_table = ON # ON +innodb_online_alter_log_max_size = 128M # 134217728(128M) +innodb_open_files = {{ mysql_innodb_open_files }} # -1 (auto) +innodb_page_size = 16K # 16384(16K) +innodb_thread_concurrency = 0 # 0 +innodb_read_io_threads = {{ [ server_specs_processor_count, 4 ] | max }} # (available logical processors / 2), min of 4 +innodb_write_io_threads = 4 # 4 +innodb_purge_threads = "{{ 1 if server_specs_processor_count <= 16 else 4 }}" # 1 if # of available logical processors is <= 16; otherwise 4 +innodb_print_all_deadlocks = ON # OFF +innodb_deadlock_detect = ON # ON +innodb_lock_wait_timeout = 50 # 50 +innodb_spin_wait_delay = 6 # 6 +innodb_autoinc_lock_mode = 2 # 1 +innodb_io_capacity = 10000 # 10000 +innodb_io_capacity_max = 20000 # 2 * innodb_io_capacity #--------Persistent Optimizer Statistics -innodb_stats_auto_recalc =ON # ON -innodb_stats_persistent =ON # ON -innodb_stats_persistent_sample_pages =20 # 20 -{# -- set innodb_buffer_pool_instances -- #} +innodb_stats_auto_recalc = ON # ON +innodb_stats_persistent = ON # ON +innodb_stats_persistent_sample_pages = 20 # 20 +{# -- set innodb_buffer_pool_instances -- #} {% if ((server_specs_memtotal_gb | int ) * 0.6 ) < 64 %} -innodb_buffer_pool_instances ={{ [ (((server_specs_memtotal_gb | int ) * 0.6) | round(0, 'ceil') | int ) , 1 ] | max }} +innodb_buffer_pool_instances = {{ [ (((server_specs_memtotal_gb | int ) * 0.6) | round(0, 'ceil') | int ) , 1 ] | max }} {% else %} -innodb_buffer_pool_instances =64 +innodb_buffer_pool_instances = 64 {% endif %} -{# -- set innodb_buffer_pool_instances -- #} -innodb_adaptive_hash_index =OFF # OFF -innodb_change_buffering =none # none -#innodb_change_buffer_max_size =25 # 25 -innodb_flush_neighbors =OFF # OFF -#innodb_flush_method =O_DIRECT # fsync -innodb_doublewrite =ON # ON -innodb_log_buffer_size ={{ mysql_innodb_log_buffer_size }} # 67108864(64M) -innodb_flush_log_at_timeout =1 # 1 -innodb_flush_log_at_trx_commit =1 # 1 +{# -- set innodb_buffer_pool_instances -- #} +innodb_adaptive_hash_index = OFF # OFF +innodb_change_buffering = none # none +#innodb_change_buffer_max_size = 25 # 25 +innodb_flush_neighbors = OFF # OFF +#innodb_flush_method = O_DIRECT # fsync +innodb_doublewrite = ON # ON +innodb_log_buffer_size = {{ mysql_innodb_log_buffer_size }} # 67108864(64M) +innodb_flush_log_at_timeout = 1 # 1 +innodb_flush_log_at_trx_commit = 1 # 1 + {% if server_specs != "auto" %} -innodb_buffer_pool_size ={{ ((server_specs_memtotal_gb | int ) * 1024 * 0.6 // 128 * 128 ) | round(0, 'ceil') | int }}M # 134217728(128M) +{# 根据服务器规格设置innodb_buffer_pool_size和innodb_buffer_pool_instances #} +{% set innodb_buffer_pool_size_mb = (server_specs_memtotal_gb | int) * 0.6 * 1024 %} +innodb_buffer_pool_size = {{ innodb_buffer_pool_size_mb | int }}M # 134217728(128M) + +{% if innodb_buffer_pool_size_mb <= 1024 %} + innodb_buffer_pool_instances = 1 +{% else %} + {% set buffer_pool_chunk_size_mb = 128 %} + {% set buffer_pool_hint = (innodb_buffer_pool_size_mb / buffer_pool_chunk_size_mb / 2) | round(0, 'ceil') | int %} + {% set cpu_hint = (server_specs_processor_count | int) // 4 %} + {% set instances = [buffer_pool_hint, cpu_hint, 64] | min %} + innodb_buffer_pool_instances = {{ instances }} +{% endif %} {% endif %} -autocommit =ON # ON + +{% if server_specs == "auto" %} + innodb_dedicated_server = ON # OFF +{% else %} + innodb_dedicated_server = OFF # OFF +{% endif %} + +autocommit = ON # ON #--------innodb scan resistant -innodb_old_blocks_pct =37 # 37 -innodb_old_blocks_time =1000 # 1000 +innodb_old_blocks_pct = 37 # 37 +innodb_old_blocks_time = 1000 # 1000 #--------innodb read ahead -innodb_read_ahead_threshold =56 # 56 (0..64) -innodb_random_read_ahead =OFF # OFF +innodb_read_ahead_threshold = 56 # 56 (0..64) +innodb_random_read_ahead = OFF # OFF #--------innodb buffer pool state -innodb_buffer_pool_dump_pct =25 # 25 -innodb_buffer_pool_dump_at_shutdown =ON # ON -innodb_buffer_pool_load_at_startup =ON # ON +innodb_buffer_pool_dump_pct = 25 # 25 +innodb_buffer_pool_dump_at_shutdown = ON # ON +innodb_buffer_pool_load_at_startup = ON # ON #--------undo log -innodb_undo_log_truncate = ON # ON -innodb_max_undo_log_size = 2G # 1G +innodb_undo_log_truncate = ON # ON +innodb_max_undo_log_size = 2G # 1G report_host = {{ ansible_default_ipv4.address }} default_time_zone = {{ mysql_default_time_zone }} {% if mtls_with_mysql_group_replication == 1 %} ####: for mysql group replication -loose-group_replication_recovery_retry_count =10 # 10 -loose-group_replication_recovery_reconnect_interval =60 # 60 -loose-group_replication_ip_allowlist =AUTOMATIC # AUTOMATIC +loose-group_replication_recovery_retry_count = 10 # 10 +loose-group_replication_recovery_reconnect_interval = 60 # 60 +loose-group_replication_ip_allowlist = AUTOMATIC # AUTOMATIC loose-group_replication_group_name = "{{ mysql_group_replication_group_name if mgr_use_random_uuid == 1 else 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' }}" -loose-group_replication_start_on_boot =OFF # ON -loose-group_replication_bootstrap_group =OFF # OFF -loose-group_replication_single_primary_mode =ON # ON -loose-group_replication_enforce_update_everywhere_checks=OFF # OFF -loose-group_replication_gtid_assignment_block_size =1000000 # 1000000 -loose-group_replication_poll_spin_loops =0 # 0 -loose-group_replication_compression_threshold =1000000 # 1000000 -loose-group_replication_flow_control_mode =QUOTA # QUOTA -loose-group_replication_consistency =BEFORE_ON_PRIMARY_FAILOVER # BEFORE_ON_PRIMARY_FAILOVER -loose-group_replication_exit_state_action =OFFLINE_MODE # OFFLINE_MODE -loose-group_replication_paxos_single_leader =ON # OFF +loose-group_replication_start_on_boot = OFF # ON +loose-group_replication_bootstrap_group = OFF # OFF +loose-group_replication_single_primary_mode = ON # ON +loose-group_replication_enforce_update_everywhere_checks = OFF # OFF +loose-group_replication_gtid_assignment_block_size = 1000000 # 1000000 +loose-group_replication_poll_spin_loops = 0 # 0 +loose-group_replication_compression_threshold = 1000000 # 1000000 +loose-group_replication_flow_control_mode = QUOTA # QUOTA +loose-group_replication_consistency = BEFORE_ON_PRIMARY_FAILOVER # BEFORE_ON_PRIMARY_FAILOVER +loose-group_replication_exit_state_action = OFFLINE_MODE # OFFLINE_MODE +loose-group_replication_paxos_single_leader = ON # OFF {% for ip in ansible_all_ipv4_addresses %} {%- for host_ip in mysql_mgr_hosts %} {%- if ip == host_ip %} -loose-group_replication_local_address ="{{ ip }}:{{ mysql_mgr_port }}" -report_host ="{{ ip }}" +loose-group_replication_local_address = "{{ ip }}:{{ mysql_mgr_port }}" +report_host = "{{ ip }}" {%- endif %} {%- endfor %} {% endfor %} {% set gs = ':' + (mysql_mgr_port | string)+',' %} -loose-group_replication_group_seeds ="{{ mysql_mgr_hosts | join(gs) + ':' + (mysql_mgr_port | string) }}" +loose-group_replication_group_seeds = "{{ mysql_mgr_hosts | join(gs) + ':' + (mysql_mgr_port | string) }}" {% endif %} +####: for performance_schema +performance_schema = ON # ON -#### for performance_schema -performance_schema =ON # ON - -performance_schema_consumer_events_stages_current =ON # OFF -performance_schema_consumer_events_stages_history =ON # OFF -performance_schema_consumer_events_stages_history_long =OFF # OFF -performance_schema_consumer_events_statements_cpu =OFF # OFF -performance_schema_consumer_events_statements_current =ON # ON -performance_schema_consumer_events_statements_history =ON # ON -performance_schema_consumer_events_statements_history_long =OFF # OFF -performance_schema_consumer_events_transactions_current =ON # ON -performance_schema_consumer_events_transactions_history =ON # ON -performance_schema_consumer_events_transactions_history_long =off # OFF -performance_schema_consumer_events_waits_current =ON # OFF -performance_schema_consumer_events_waits_history =ON # OFF -performance_schema_consumer_events_waits_history_long =OFF # OFF -performance_schema_consumer_global_instrumentation =ON # ON -performance_schema_consumer_thread_instrumentation =ON # ON -performance_schema_consumer_statements_digest =ON # ON - -performance_schema_instrument ='memory/%=COUNTED' +performance_schema_consumer_events_stages_current = ON # OFF +performance_schema_consumer_events_stages_history = ON # OFF +performance_schema_consumer_events_stages_history_long = OFF # OFF +performance_schema_consumer_events_statements_cpu = OFF # OFF +performance_schema_consumer_events_statements_current = ON # ON +performance_schema_consumer_events_statements_history = ON # ON +performance_schema_consumer_events_statements_history_long = OFF # OFF +performance_schema_consumer_events_transactions_current = ON # ON +performance_schema_consumer_events_transactions_history = ON # ON +performance_schema_consumer_events_transactions_history_long = off # OFF +performance_schema_consumer_events_waits_current = ON # OFF +performance_schema_consumer_events_waits_history = ON # OFF +performance_schema_consumer_events_waits_history_long = OFF # OFF +performance_schema_consumer_global_instrumentation = ON # ON +performance_schema_consumer_thread_instrumentation = ON # ON +performance_schema_consumer_statements_digest = ON # ON +performance_schema_instrument = 'memory/%=COUNTED' admin_address = 127.0.0.1 # null admin_port = {{ (mysql_port*10 + 2) | string }} # 33062 -mysqlx_port = {{ (mysql_port*10) | string }} # 33060 -event_scheduler=OFF # ON -sql_require_primary_key=ON # OFF -activate_all_roles_on_login=ON # OFF -plugin-load-add=mysql_clone.so -#default_authentication_plugin=caching_sha2_password # caching_sha2_password -explicit_defaults_for_timestamp = ON # ON -log_error_verbosity=2 # 2 -max_allowed_packet=64M # 64M -{% if server_specs == "auto" %} -innodb_dedicated_server=ON # OFF -{% else %} -innodb_dedicated_server=OFF # OFF -{% endif %} -loose-sql_generate_invisible_primary_key=ON # OFF -terminology_use_previous=NONE # NONE -binlog_expire_logs_seconds=604800 # 2592000 (equivalent to 30 days) -performance_schema_show_processlist=ON # OFF +mysqlx_port = {{ (mysql_port*10) | string }} # 33060 +event_scheduler = OFF # ON +sql_require_primary_key = ON # OFF +activate_all_roles_on_login = ON # OFF +plugin-load-add = mysql_clone.so +#default_authentication_plugin = caching_sha2_password # caching_sha2_password +explicit_defaults_for_timestamp = ON # ON +log_error_verbosity = 2 # 2 +max_allowed_packet = 64M # 64M +loose-sql_generate_invisible_primary_key = ON # OFF +terminology_use_previous = NONE # NONE +binlog_expire_logs_seconds = 604800 # 2592000 (equivalent to 30 days) +performance_schema_show_processlist = ON # OFF + -- Gitee From d154c935f75c1c93453895c8b828b168daa791ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 22 May 2024 17:32:17 +0800 Subject: [PATCH 04/32] =?UTF-8?q?innodb=5Fredo=5Flog=5Fcapacity=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roles/mysql_server/templates/8.4/my.cnf.j2 | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index 744938d..0f9ddd3 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -155,14 +155,19 @@ innodb_flush_log_at_trx_commit = 1 innodb_buffer_pool_size = {{ innodb_buffer_pool_size_mb | int }}M # 134217728(128M) {% if innodb_buffer_pool_size_mb <= 1024 %} - innodb_buffer_pool_instances = 1 +innodb_buffer_pool_instances = 1 {% else %} - {% set buffer_pool_chunk_size_mb = 128 %} - {% set buffer_pool_hint = (innodb_buffer_pool_size_mb / buffer_pool_chunk_size_mb / 2) | round(0, 'ceil') | int %} - {% set cpu_hint = (server_specs_processor_count | int) // 4 %} - {% set instances = [buffer_pool_hint, cpu_hint, 64] | min %} - innodb_buffer_pool_instances = {{ instances }} +{% set buffer_pool_chunk_size_mb = 128 %} +{% set buffer_pool_hint = (innodb_buffer_pool_size_mb / buffer_pool_chunk_size_mb / 2) | round(0, 'ceil') | int %} +{% set cpu_hint = (server_specs_processor_count | int) // 4 %} +{% set instances = [buffer_pool_hint, cpu_hint, 64] | min %} +innodb_buffer_pool_instances = {{ instances }} {% endif %} +{% set redo_log_capacity_gb = (server_specs_processor_count | int) / 2 %} +{% if redo_log_capacity_gb > 16 %} +{% set redo_log_capacity_gb = 16 %} +{% endif %} +innodb_redo_log_capacity = {{ redo_log_capacity_gb }}GB {% endif %} {% if server_specs == "auto" %} -- Gitee From c6f3f2f89d5acf5994c76644f1ea8a97907c0a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 22 May 2024 17:35:24 +0800 Subject: [PATCH 05/32] =?UTF-8?q?innodb=5Fredo=5Flog=5Fcapacity=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mysql_server/templates/8.4/my.cnf.j2 | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index 0f9ddd3..cc05385 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -86,33 +86,6 @@ innodb_data_file_path = ibdata1:64M:autoextend innodb_temp_data_file_path = ibtmp1:12M:autoextend # ibtmp1:12M:autoextend innodb_buffer_pool_filename = ib_buffer_pool # ib_buffer_pool innodb_log_group_home_dir = {{ mysql_data_dir_base }}/log/redolog/{{ mysql_port }} # datadir -{% if server_specs != "auto" %} -{% set server_specs_memtotal_gb_int = server_specs_memtotal_gb | int %} -{% if mysql_version is version('8.0.30', '<') %} -{% if (server_specs_memtotal_gb_int * 0.6) < 8 %} -innodb_log_file_size = 512MB -innodb_log_files_in_group = {{ [(server_specs_memtotal_gb_int * 0.6) | round(0, 'ceil') | int, 2 ] | max }} -{% elif 8 <= (server_specs_memtotal_gb_int * 0.6) <= 128 %} -innodb_log_file_size = 1024MB -innodb_log_files_in_group = {{ [(server_specs_memtotal_gb_int * 0.6 * 0.75) | round(0, 'ceil') | int, 2 ] | max }} -{% else %} -innodb_log_file_size = 2048MB -innodb_log_files_in_group = 64 -{% endif %} -{% else %} -{% if server_specs_memtotal_gb_int < 2 %} -innodb_redo_log_capacity = 100MB -{% elif 2 <= server_specs_memtotal_gb_int < 4 %} -innodb_redo_log_capacity = 1GB -{% elif 4 <= server_specs_memtotal_gb_int < 11 %} -innodb_redo_log_capacity = {{ (0.75 * server_specs_memtotal_gb_int * 0.5) | round(0, 'ceil') | int }}GB -{% elif 11 <= server_specs_memtotal_gb_int < 171 %} -innodb_redo_log_capacity = {{ (0.5625 * server_specs_memtotal_gb_int * 0.5) | round(0, 'ceil') | int }}GB -{% else %} -innodb_redo_log_capacity = 128GB -{% endif %} -{% endif %} -{% endif %} innodb_file_per_table = ON # ON innodb_online_alter_log_max_size = 128M # 134217728(128M) innodb_open_files = {{ mysql_innodb_open_files }} # -1 (auto) -- Gitee From 750c47d6f9837193428d50bbac9fd4e4ae48ccf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Tue, 28 May 2024 16:17:01 +0800 Subject: [PATCH 06/32] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=AF=B9https://lefred?= =?UTF-8?q?.be/content/mysql-8-4-lts-new-production-ready-defaults-for-inn?= =?UTF-8?q?odb/=E6=8F=90=E5=8F=8A=E7=9A=84=E5=8F=82=E6=95=B0=E7=9A=84?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index cc05385..dbe8543 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -235,4 +235,12 @@ loose-sql_generate_invisible_primary_key = ON # OFF terminology_use_previous = NONE # NONE binlog_expire_logs_seconds = 604800 # 2592000 (equivalent to 30 days) performance_schema_show_processlist = ON # OFF +{% set max_parallel_read_threads = server_specs_processor_count | int // 8 %} +{% if max_parallel_read_threads < 4 %} +{% set max_parallel_read_threads = 4 %} +{% endif %} +innodb_parallel_read_threads = {{ max_parallel_read_threads }} # Default value: calculated by the number of available logical processors on the system divided by 8, with a minimum default value of 4 +{% set total_memory_gb = server_specs_memtotal_gb | int %} +{% set temptable_max_ram_gb = total_memory_gb * 0.03 | max(1) | min(4) %} +temptable_max_ram = {{ temptable_max_ram_gb }}GB -- Gitee From 9bc5751b9e47c5c76dcea29db50cbf69edb72952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 29 May 2024 14:16:05 +0800 Subject: [PATCH 07/32] =?UTF-8?q?=E8=B0=83=E6=95=B4my.cnf=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mysql_server/templates/8.4/my.cnf.j2 | 272 +++++++++--------- 1 file changed, 134 insertions(+), 138 deletions(-) diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index dbe8543..ed43973 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -2,34 +2,18 @@ auto-rehash [mysqld] -####: for global +##: User Configuration +####: Global Configuration Defaults user = {{ mysql_user }} # mysql basedir = {{ mysql_base_dir }} # /usr/local/mysql/ datadir = {{ mysql_data_dir_base }}/data/{{ mysql_port }} # /usr/local/mysql/data tmpdir = {{ mysql_data_dir_base }}/tmp/{{ mysql_port }} -server_id = {{ mysql_server_id }} # 0 +log_bin = {{ mysql_data_dir_base }}/log/binlog/{{ mysql_port }}/mysql-bin # ON +relay_log = {{ mysql_data_dir_base }}/log/relaylog/{{ mysql_port }}/relay-bin +innodb_log_group_home_dir = {{ mysql_data_dir_base }}/log/redolog/{{ mysql_port }} # datadir port = {{ mysql_port }} # 3306 -character_set_server = {{ mysql_character_set_server }} # utf8mb4 -log_bin_trust_function_creators = ON # OFF -max_prepared_stmt_count = 1048576 # 16382 -log_timestamps = SYSTEM # UTC -pid_file = mysqld.pid -read_only = OFF # OFF -super_read_only = OFF # OFF -skip_name_resolve = ON # OFF -auto_increment_increment = 1 # 1 -auto_increment_offset = 1 # 1 -lower_case_table_names = 1 # 0 -open_files_limit = 65536 # 5000, with possible adjustment -max_connections = {{ mysql_max_connections | default(1000) }} # 151 -thread_cache_size = {{ [(server_specs_processor_count | int ) * 8, 256 ] | max }} # 8 + (max_connections / 100), capped to a limit of 100 -table_open_cache = 4000 # 4000 -table_definition_cache = 2000 # MIN(400 + table_open_cache / 2, 2000) -table_open_cache_instances = {{ [(server_specs_processor_count | int ) // 2, 16 ] | max }} # 16 -local_infile = OFF # OFF -disabled_storage_engines = archive,blackhole,example,federated,memory,merge,ndb,myisam # empty -plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so;validate_password=validate_password.so" -transaction_isolation = {{ mysql_transaction_isolation }} # REPEATABLE-READ +admin_port = {{ (mysql_port*10 + 2) | string }} # 33062 +mysqlx_port = {{ (mysql_port*10) | string }} # 33060 {% if sock_type == 1 %} socket = mysql.sock # /tmp/mysql.sock mysqlx_socket = mysqlx.sock # /tmp/mysqlx.sock @@ -41,27 +25,96 @@ socket = {{ mysql_data_dir_base }}/run/mysql{{ mysqlx_socket = {{ mysql_data_dir_base }}/run/mysqlx{{ mysql_port }}.sock {% endif %} +####: Customizable User Settings +character_set_server = {{ mysql_character_set_server }} # utf8mb4 +max_connections = {{ mysql_max_connections | default(1000) }} # 151 +transaction_isolation = {{ mysql_transaction_isolation }} # REPEATABLE-READ +innodb_open_files = {{ mysql_innodb_open_files }} # -1 (auto) +innodb_log_buffer_size = {{ mysql_innodb_log_buffer_size }} # 67108864(64M) +default_time_zone = {{ mysql_default_time_zone }} + +##: Automatic Settings +####: Auto-Generated by dbops +server_id = {{ mysql_server_id }} # 0 +report_host = {{ ansible_default_ipv4.address }} + +####: Special Calculations by dbops +thread_cache_size = {{ [(server_specs_processor_count | int ) * 8, 256 ] | max }} # 8 + (max_connections / 100), capped to a limit of 100 +table_open_cache_instances = {{ [(server_specs_processor_count | int ) // 2, 16 ] | max }} # 16 +replica_parallel_workers = {{ [(server_specs_processor_count | int ) * 4 ,32] | min }} # 0 + +####: Dedicated Server Settings or Auto-Generated by dbops Specifications +{% if server_specs != "auto" %} +innodb_read_io_threads={{ [ server_specs_processor_count, 4 ] | max }} # (available logical processors / 2), min of 4 +innodb_purge_threads="{{ 1 if server_specs_processor_count <= 16 else 4 }}" # 1 if # of available logical processors is <= 16; otherwise 4 +innodb_parallel_read_threads={{ (server_specs_processor_count | int // 8) | max(4) }} # Default value: calculated by the number of available logical processors on the system divided by 8, with a minimum default value of 4 +temptable_max_ram={{ (server_specs_memtotal_gb | int * 0.03 | max(1) | min(4)) }}GB + {# 根据服务器规格设置innodb_buffer_pool_size和innodb_buffer_pool_instances #} + {% set innodb_buffer_pool_size_mb = (server_specs_memtotal_gb | int) * 0.6 * 1024 %} +innodb_buffer_pool_size={{ innodb_buffer_pool_size_mb }}M # 134217728(128M) + {% if innodb_buffer_pool_size_mb <= 1024 %} +innodb_buffer_pool_instances=1 + {% else %} + {% set buffer_pool_chunk_size_mb = 128 %} + {% set buffer_pool_hint = (innodb_buffer_pool_size_mb / buffer_pool_chunk_size_mb / 2) | round(0, 'ceil') | int %} + {% set cpu_hint = (server_specs_processor_count | int) // 4 %} + {% set instances = [buffer_pool_hint, cpu_hint, 64] | min %} +innodb_buffer_pool_instances={{ instances }} + {% endif %} + {% set redo_log_capacity_gb = (server_specs_processor_count | int) / 2 %} + {% if redo_log_capacity_gb > 16 %} + {% set redo_log_capacity_gb = 16 %} + {% endif %} +innodb_redo_log_capacity={{ redo_log_capacity_gb }}GB +{% endif %} + +{% if server_specs == "auto" %} +innodb_dedicated_server=ON # OFF , ON will auto set innodb_buffer_pool_size and innodb_redo_log_capacity +{% else %} +innodb_dedicated_server=OFF # OFF +{% endif %} + + + +##: Standard Configurations +log_bin_trust_function_creators = ON # OFF +max_prepared_stmt_count = 1048576 # 16382 +log_timestamps = SYSTEM # UTC +pid_file = mysqld.pid +read_only = OFF # OFF +super_read_only = OFF # OFF +skip_name_resolve = ON # OFF +auto_increment_increment = 1 # 1 +auto_increment_offset = 1 # 1 +lower_case_table_names = 1 # 0 +open_files_limit = 65536 # 5000, with possible adjustment +table_open_cache = 4000 # 4000 +table_definition_cache = 2000 # MIN(400 + table_open_cache / 2, 2000) +local_infile = OFF # OFF +disabled_storage_engines = archive,blackhole,example,federated,memory,merge,ndb,myisam # empty +plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so;validate_password=validate_password.so" +admin_address = 127.0.0.1 # null +event_scheduler = OFF # ON +sql_require_primary_key = ON # OFF +activate_all_roles_on_login = ON # OFF +plugin-load-add = mysql_clone.so +#default_authentication_plugin = caching_sha2_password # caching_sha2_password +explicit_defaults_for_timestamp = ON # ON +log_error_verbosity = 2 # 2 +max_allowed_packet = 64M # 64M +terminology_use_previous = NONE # NONE +autocommit = ON # ON +sql_generate_invisible_primary_key = ON # OFF + ####: for binlog +binlog_expire_logs_seconds = 604800 # 2592000 (equivalent to 30 days) binlog_error_action = ABORT_SERVER # ABORT_SERVER -log_bin = {{ mysql_data_dir_base }}/log/binlog/{{ mysql_port }}/mysql-bin # ON binlog_rows_query_log_events = ON # OFF log_replica_updates = ON # ON binlog_checksum = CRC32 # CRC32 sync_binlog = 1 # 1 replica_preserve_commit_order = ON # ON -####: for error-log -log_error = error.log # hostname.err - -general_log = OFF # OFF -general_log_file = general.log # hostname.log - -####: for slow query log -slow_query_log = ON # OFF -slow_query_log_file = slow.log # hostname.log -log_queries_not_using_indexes = OFF # OFF -long_query_time = 2.000000 # 10.000000 - ####: for gtid gtid_executed_compression_period = 0 # 0 gtid_mode = ON # OFF @@ -69,31 +122,40 @@ enforce_gtid_consistency = ON ####: for replication skip_slave_start = OFF # OFF -relay_log = {{ mysql_data_dir_base }}/log/relaylog/{{ mysql_port }}/relay-bin relay_log_recovery = ON # OFF replica_parallel_type = LOGICAL_CLOCK # LOGICAL_CLOCK -replica_parallel_workers = {{ [(server_specs_processor_count | int ) * 4 ,32] | min }} # 0 + loose-rpl_semi_sync_source_enabled = ON # OFF loose-rpl_semi_sync_replica_enabled = ON # OFF loose-rpl_semi_sync_source_timeout = 1000 # 10000(10 second) binlog_group_commit_sync_delay = 500 # 0 500(0.05% second) binlog_group_commit_sync_no_delay_count = 13 # 0 +####: for error-log +log_error = error.log # hostname.err + +general_log = OFF # OFF +general_log_file = general.log # hostname.log + +####: for slow query log +slow_query_log = ON # OFF +slow_query_log_file = slow.log # hostname.log +log_queries_not_using_indexes = OFF # OFF +long_query_time = 2.000000 # 10.000000 + + + ####: for innodb default_storage_engine = InnoDB # InnoDB default_tmp_storage_engine = InnoDB # InnoDB innodb_data_file_path = ibdata1:64M:autoextend # ibdata1:12M:autoextend innodb_temp_data_file_path = ibtmp1:12M:autoextend # ibtmp1:12M:autoextend innodb_buffer_pool_filename = ib_buffer_pool # ib_buffer_pool -innodb_log_group_home_dir = {{ mysql_data_dir_base }}/log/redolog/{{ mysql_port }} # datadir innodb_file_per_table = ON # ON innodb_online_alter_log_max_size = 128M # 134217728(128M) -innodb_open_files = {{ mysql_innodb_open_files }} # -1 (auto) innodb_page_size = 16K # 16384(16K) innodb_thread_concurrency = 0 # 0 -innodb_read_io_threads = {{ [ server_specs_processor_count, 4 ] | max }} # (available logical processors / 2), min of 4 innodb_write_io_threads = 4 # 4 -innodb_purge_threads = "{{ 1 if server_specs_processor_count <= 16 else 4 }}" # 1 if # of available logical processors is <= 16; otherwise 4 innodb_print_all_deadlocks = ON # OFF innodb_deadlock_detect = ON # ON innodb_lock_wait_timeout = 50 # 50 @@ -101,72 +163,54 @@ innodb_spin_wait_delay = 6 innodb_autoinc_lock_mode = 2 # 1 innodb_io_capacity = 10000 # 10000 innodb_io_capacity_max = 20000 # 2 * innodb_io_capacity -#--------Persistent Optimizer Statistics -innodb_stats_auto_recalc = ON # ON -innodb_stats_persistent = ON # ON -innodb_stats_persistent_sample_pages = 20 # 20 -{# -- set innodb_buffer_pool_instances -- #} -{% if ((server_specs_memtotal_gb | int ) * 0.6 ) < 64 %} -innodb_buffer_pool_instances = {{ [ (((server_specs_memtotal_gb | int ) * 0.6) | round(0, 'ceil') | int ) , 1 ] | max }} -{% else %} -innodb_buffer_pool_instances = 64 -{% endif %} -{# -- set innodb_buffer_pool_instances -- #} innodb_adaptive_hash_index = OFF # OFF innodb_change_buffering = none # none -#innodb_change_buffer_max_size = 25 # 25 innodb_flush_neighbors = OFF # OFF -#innodb_flush_method = O_DIRECT # fsync innodb_doublewrite = ON # ON -innodb_log_buffer_size = {{ mysql_innodb_log_buffer_size }} # 67108864(64M) innodb_flush_log_at_timeout = 1 # 1 innodb_flush_log_at_trx_commit = 1 # 1 +#innodb_flush_method = O_DIRECT # fsync +#innodb_change_buffer_max_size = 25 # 25 -{% if server_specs != "auto" %} -{# 根据服务器规格设置innodb_buffer_pool_size和innodb_buffer_pool_instances #} -{% set innodb_buffer_pool_size_mb = (server_specs_memtotal_gb | int) * 0.6 * 1024 %} -innodb_buffer_pool_size = {{ innodb_buffer_pool_size_mb | int }}M # 134217728(128M) - -{% if innodb_buffer_pool_size_mb <= 1024 %} -innodb_buffer_pool_instances = 1 -{% else %} -{% set buffer_pool_chunk_size_mb = 128 %} -{% set buffer_pool_hint = (innodb_buffer_pool_size_mb / buffer_pool_chunk_size_mb / 2) | round(0, 'ceil') | int %} -{% set cpu_hint = (server_specs_processor_count | int) // 4 %} -{% set instances = [buffer_pool_hint, cpu_hint, 64] | min %} -innodb_buffer_pool_instances = {{ instances }} -{% endif %} -{% set redo_log_capacity_gb = (server_specs_processor_count | int) / 2 %} -{% if redo_log_capacity_gb > 16 %} -{% set redo_log_capacity_gb = 16 %} -{% endif %} -innodb_redo_log_capacity = {{ redo_log_capacity_gb }}GB -{% endif %} - -{% if server_specs == "auto" %} - innodb_dedicated_server = ON # OFF -{% else %} - innodb_dedicated_server = OFF # OFF -{% endif %} - -autocommit = ON # ON -#--------innodb scan resistant innodb_old_blocks_pct = 37 # 37 innodb_old_blocks_time = 1000 # 1000 -#--------innodb read ahead + innodb_read_ahead_threshold = 56 # 56 (0..64) innodb_random_read_ahead = OFF # OFF -#--------innodb buffer pool state + innodb_buffer_pool_dump_pct = 25 # 25 innodb_buffer_pool_dump_at_shutdown = ON # ON innodb_buffer_pool_load_at_startup = ON # ON -#--------undo log innodb_undo_log_truncate = ON # ON innodb_max_undo_log_size = 2G # 1G -report_host = {{ ansible_default_ipv4.address }} -default_time_zone = {{ mysql_default_time_zone }} +innodb_stats_auto_recalc = ON # ON +innodb_stats_persistent = ON # ON +innodb_stats_persistent_sample_pages = 20 # 20 + +####: for performance_schema +performance_schema = ON # ON +performance_schema_show_processlist = ON # OFF + +performance_schema_consumer_events_stages_current = ON # OFF +performance_schema_consumer_events_stages_history = ON # OFF +performance_schema_consumer_events_stages_history_long = OFF # OFF +performance_schema_consumer_events_statements_cpu = OFF # OFF +performance_schema_consumer_events_statements_current = ON # ON +performance_schema_consumer_events_statements_history = ON # ON +performance_schema_consumer_events_statements_history_long = OFF # OFF +performance_schema_consumer_events_transactions_current = ON # ON +performance_schema_consumer_events_transactions_history = ON # ON +performance_schema_consumer_events_transactions_history_long = OFF # OFF +performance_schema_consumer_events_waits_current = ON # OFF +performance_schema_consumer_events_waits_history = ON # OFF +performance_schema_consumer_events_waits_history_long = OFF # OFF +performance_schema_consumer_global_instrumentation = ON # ON +performance_schema_consumer_thread_instrumentation = ON # ON +performance_schema_consumer_statements_digest = ON # ON + +performance_schema_instrument = 'memory/%=COUNTED' {% if mtls_with_mysql_group_replication == 1 %} ####: for mysql group replication @@ -189,7 +233,6 @@ loose-group_replication_paxos_single_leader = ON {%- for host_ip in mysql_mgr_hosts %} {%- if ip == host_ip %} loose-group_replication_local_address = "{{ ip }}:{{ mysql_mgr_port }}" -report_host = "{{ ip }}" {%- endif %} {%- endfor %} {% endfor %} @@ -197,50 +240,3 @@ report_host = "{{ ip }}" {% set gs = ':' + (mysql_mgr_port | string)+',' %} loose-group_replication_group_seeds = "{{ mysql_mgr_hosts | join(gs) + ':' + (mysql_mgr_port | string) }}" {% endif %} - -####: for performance_schema -performance_schema = ON # ON - -performance_schema_consumer_events_stages_current = ON # OFF -performance_schema_consumer_events_stages_history = ON # OFF -performance_schema_consumer_events_stages_history_long = OFF # OFF -performance_schema_consumer_events_statements_cpu = OFF # OFF -performance_schema_consumer_events_statements_current = ON # ON -performance_schema_consumer_events_statements_history = ON # ON -performance_schema_consumer_events_statements_history_long = OFF # OFF -performance_schema_consumer_events_transactions_current = ON # ON -performance_schema_consumer_events_transactions_history = ON # ON -performance_schema_consumer_events_transactions_history_long = off # OFF -performance_schema_consumer_events_waits_current = ON # OFF -performance_schema_consumer_events_waits_history = ON # OFF -performance_schema_consumer_events_waits_history_long = OFF # OFF -performance_schema_consumer_global_instrumentation = ON # ON -performance_schema_consumer_thread_instrumentation = ON # ON -performance_schema_consumer_statements_digest = ON # ON - -performance_schema_instrument = 'memory/%=COUNTED' - -admin_address = 127.0.0.1 # null -admin_port = {{ (mysql_port*10 + 2) | string }} # 33062 -mysqlx_port = {{ (mysql_port*10) | string }} # 33060 -event_scheduler = OFF # ON -sql_require_primary_key = ON # OFF -activate_all_roles_on_login = ON # OFF -plugin-load-add = mysql_clone.so -#default_authentication_plugin = caching_sha2_password # caching_sha2_password -explicit_defaults_for_timestamp = ON # ON -log_error_verbosity = 2 # 2 -max_allowed_packet = 64M # 64M -loose-sql_generate_invisible_primary_key = ON # OFF -terminology_use_previous = NONE # NONE -binlog_expire_logs_seconds = 604800 # 2592000 (equivalent to 30 days) -performance_schema_show_processlist = ON # OFF -{% set max_parallel_read_threads = server_specs_processor_count | int // 8 %} -{% if max_parallel_read_threads < 4 %} -{% set max_parallel_read_threads = 4 %} -{% endif %} -innodb_parallel_read_threads = {{ max_parallel_read_threads }} # Default value: calculated by the number of available logical processors on the system divided by 8, with a minimum default value of 4 -{% set total_memory_gb = server_specs_memtotal_gb | int %} -{% set temptable_max_ram_gb = total_memory_gb * 0.03 | max(1) | min(4) %} -temptable_max_ram = {{ temptable_max_ram_gb }}GB - -- Gitee From ad1be6903381f9bf4a66a60f928e1b1dab85c8bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 29 May 2024 14:39:12 +0800 Subject: [PATCH 08/32] default 8.0.37 --- mysql_ansible/playbooks/common_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql_ansible/playbooks/common_config.yml b/mysql_ansible/playbooks/common_config.yml index 834bd0c..3af83b7 100644 --- a/mysql_ansible/playbooks/common_config.yml +++ b/mysql_ansible/playbooks/common_config.yml @@ -1,5 +1,5 @@ ## In most cases, just adjust these two parameters. -mysql_version: "8.0.36" +mysql_version: "8.0.37" mysql_port: 3306 # The 'server_specs' variable defines the hardware specifications for the server deployment. -- Gitee From 0d2943fe1710abee47570f97c4ad0973966175fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 29 May 2024 14:39:30 +0800 Subject: [PATCH 09/32] pre_tasks support 8.4 --- .../playbooks/pre_tasks/validate_common_config_setting.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql_ansible/playbooks/pre_tasks/validate_common_config_setting.yml b/mysql_ansible/playbooks/pre_tasks/validate_common_config_setting.yml index f83b15a..9bb8e21 100644 --- a/mysql_ansible/playbooks/pre_tasks/validate_common_config_setting.yml +++ b/mysql_ansible/playbooks/pre_tasks/validate_common_config_setting.yml @@ -63,7 +63,8 @@ - db_type == 'mysql' and ( (mysql_version.startswith('5.7') and mysql_version is version('5.7.26', '<')) or (mysql_version.startswith('8.0') and mysql_version is version('8.0.28', '<')) or - (not (mysql_version.startswith('5.7') or mysql_version.startswith('8.0'))) + (mysql_version.startswith('8.4') and mysql_version is version('8.4.0', '<')) or + (not (mysql_version.startswith('5.7') or mysql_version.startswith('8.0') or mysql_version.startswith('8.4'))) ) - name: Validate db_type is a valid option -- Gitee From dc5cba03a9bead9e8400b4e93e6f74dbf1d4b179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 29 May 2024 14:52:46 +0800 Subject: [PATCH 10/32] roles mysql-server support 8.4 --- .../mysql_server/tasks/initialize_mysql_datadir.yml | 5 +++-- .../mysql_server/tasks/mkdir_and_config_file.yml | 12 +++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/mysql_ansible/roles/mysql_server/tasks/initialize_mysql_datadir.yml b/mysql_ansible/roles/mysql_server/tasks/initialize_mysql_datadir.yml index 07e09f8..b4712bf 100644 --- a/mysql_ansible/roles/mysql_server/tasks/initialize_mysql_datadir.yml +++ b/mysql_ansible/roles/mysql_server/tasks/initialize_mysql_datadir.yml @@ -3,7 +3,8 @@ when: " '-5.7' in mysql_package " changed_when: true -- name: Initialize-insecure for mysql-8.0.x +- name: Initialize-insecure for mysql-8.0.x or mysql-8.4.x ansible.builtin.command: /usr/local/mysql/bin/mysqld --defaults-file={{ mysql_data_dir_base }}/etc/{{ mysql_port }}/my.cnf --initialize-insecure - when: " '-8.0' in mysql_package " + when: " '-8.0' in mysql_package or '-8.4' in mysql_package " changed_when: true + diff --git a/mysql_ansible/roles/mysql_server/tasks/mkdir_and_config_file.yml b/mysql_ansible/roles/mysql_server/tasks/mkdir_and_config_file.yml index 9a7e545..564d35b 100644 --- a/mysql_ansible/roles/mysql_server/tasks/mkdir_and_config_file.yml +++ b/mysql_ansible/roles/mysql_server/tasks/mkdir_and_config_file.yml @@ -33,7 +33,7 @@ mode: '0644' backup: true -- name: Config /etc/my.cnf for mysql-8.x.x +- name: Config /etc/my.cnf for mysql-8.0.x when: mysql_version.startswith('8.0') and db_type == 'mysql' ansible.builtin.template: src: ../templates/8.0/my.cnf.j2 @@ -43,6 +43,16 @@ mode: '0644' backup: true +- name: Config /etc/my.cnf for mysql-8.4.x + when: mysql_version.startswith('8.4') and db_type == 'mysql' + ansible.builtin.template: + src: ../templates/8.4/my.cnf.j2 + dest: "{{ mysql_data_dir_base }}/etc/{{ mysql_port }}/my.cnf" + owner: "{{ mysql_user }}" + group: "{{ mysql_group }}" + mode: '0644' + backup: true + - name: Config /etc/my.cnf for percona-5.7.x when: mysql_version.startswith('5.7') and db_type == 'percona' ansible.builtin.template: -- Gitee From 7ee769c6afb15c1f723e5ee249ea7fe1314f769d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 29 May 2024 15:11:31 +0800 Subject: [PATCH 11/32] fix 8.4 my.cnf innodb_flush_neighbors --- mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index ed43973..ef24985 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -165,7 +165,7 @@ innodb_io_capacity = 10000 innodb_io_capacity_max = 20000 # 2 * innodb_io_capacity innodb_adaptive_hash_index = OFF # OFF innodb_change_buffering = none # none -innodb_flush_neighbors = OFF # OFF +innodb_flush_neighbors = 0 # 0 innodb_doublewrite = ON # ON innodb_flush_log_at_timeout = 1 # 1 innodb_flush_log_at_trx_commit = 1 # 1 -- Gitee From e9f5745495e8f3dade482a28a0ce5efb07c6898f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 29 May 2024 15:51:07 +0800 Subject: [PATCH 12/32] change skip_slave_start to skip_replica_start, rpl_semi_sync_master to rpl_semi_sync_source, rpl_semi_sync_slave to rpl_semi_sync_replica --- mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index ef24985..afe479a 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -92,7 +92,7 @@ table_open_cache = 4000 table_definition_cache = 2000 # MIN(400 + table_open_cache / 2, 2000) local_infile = OFF # OFF disabled_storage_engines = archive,blackhole,example,federated,memory,merge,ndb,myisam # empty -plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so;validate_password=validate_password.so" +plugin_load = "rpl_semi_sync_source=semisync_source.so;rpl_semi_sync_replica=semisync_replica.so" admin_address = 127.0.0.1 # null event_scheduler = OFF # ON sql_require_primary_key = ON # OFF @@ -121,9 +121,9 @@ gtid_mode = ON enforce_gtid_consistency = ON # OFF ####: for replication -skip_slave_start = OFF # OFF +skip_replica_start = OFF # OFF relay_log_recovery = ON # OFF -replica_parallel_type = LOGICAL_CLOCK # LOGICAL_CLOCK +#replica_parallel_type = LOGICAL_CLOCK # LOGICAL_CLOCK, is deprecated and will be removed in a future release loose-rpl_semi_sync_source_enabled = ON # OFF loose-rpl_semi_sync_replica_enabled = ON # OFF -- Gitee From c7c5947c9123a5e9b13775eb1411ae772e703287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 29 May 2024 16:00:08 +0800 Subject: [PATCH 13/32] =?UTF-8?q?8.4=E8=A6=81=E8=A1=A5=E8=A3=85=E4=B8=AA?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E5=A4=8D=E6=9D=82=E5=BA=A6=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql_ansible/roles/mysql_server/templates/secure.sql.j2 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mysql_ansible/roles/mysql_server/templates/secure.sql.j2 b/mysql_ansible/roles/mysql_server/templates/secure.sql.j2 index 3457450..ea57a1a 100644 --- a/mysql_ansible/roles/mysql_server/templates/secure.sql.j2 +++ b/mysql_ansible/roles/mysql_server/templates/secure.sql.j2 @@ -4,5 +4,8 @@ set sql_log_bin=0; alter user {{ mysql_admin_user }}@'localhost' identified by '{{ mysql_admin_password }}' ; create user {{ mysql_admin_user }}@'127.0.0.1' identified by '{{ mysql_admin_127_password }}' ; grant all on *.* to {{ mysql_admin_user }}@'127.0.0.1' with grant option; + {% if mysql_version.startswith('8.4') %} + INSTALL COMPONENT 'file://component_validate_password'; + {% endif %} set sql_log_bin=1; -- Gitee From b702ac0fcd10f6fe3dd607db1b83d871886971b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 29 May 2024 18:10:17 +0800 Subject: [PATCH 14/32] fix Dedicated Server Settings or Auto-Generated by dbops Specifications --- .../mysql_server/templates/8.4/my.cnf.j2 | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index afe479a..c5be164 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -45,26 +45,36 @@ replica_parallel_workers = {{ [(server_specs_processor_count | in ####: Dedicated Server Settings or Auto-Generated by dbops Specifications {% if server_specs != "auto" %} -innodb_read_io_threads={{ [ server_specs_processor_count, 4 ] | max }} # (available logical processors / 2), min of 4 -innodb_purge_threads="{{ 1 if server_specs_processor_count <= 16 else 4 }}" # 1 if # of available logical processors is <= 16; otherwise 4 -innodb_parallel_read_threads={{ (server_specs_processor_count | int // 8) | max(4) }} # Default value: calculated by the number of available logical processors on the system divided by 8, with a minimum default value of 4 -temptable_max_ram={{ (server_specs_memtotal_gb | int * 0.03 | max(1) | min(4)) }}GB - {# 根据服务器规格设置innodb_buffer_pool_size和innodb_buffer_pool_instances #} - {% set innodb_buffer_pool_size_mb = (server_specs_memtotal_gb | int) * 0.6 * 1024 %} +innodb_read_io_threads={{ [(server_specs_processor_count | int) // 2, 4] | max }} # (available logical processors / 2), min of 4 +innodb_purge_threads="{{ 1 if server_specs_processor_count | int <= 16 else 4 }}" # 1 if # of available logical processors is <= 16; otherwise 4 +innodb_parallel_read_threads={{ [(server_specs_processor_count | int) // 8, 4] | max }} # Default value: calculated by the number of available logical processors on the system divided by 8, with a minimum default value of 4 + +{# 根据服务器规格设置innodb_buffer_pool_size和innodb_buffer_pool_instances #} +{% set temp_ram = server_specs_memtotal_gb | int * 0.03 %} +{% set temptable_max_ram_val = [temp_ram, 1] %} +{% if temptable_max_ram_val | max > 4 %} + {% set temptable_max_ram_final = 4 %} +{% else %} + {% set temptable_max_ram_final = temptable_max_ram_val | max %} +{% endif %} +temptable_max_ram={{ temptable_max_ram_final }}GB + +{% set innodb_buffer_pool_size_mb = (server_specs_memtotal_gb | int * 0.6 * 1024) | round(0, 'ceil') %} innodb_buffer_pool_size={{ innodb_buffer_pool_size_mb }}M # 134217728(128M) - {% if innodb_buffer_pool_size_mb <= 1024 %} +{% if innodb_buffer_pool_size_mb <= 1024 %} innodb_buffer_pool_instances=1 - {% else %} +{% else %} {% set buffer_pool_chunk_size_mb = 128 %} {% set buffer_pool_hint = (innodb_buffer_pool_size_mb / buffer_pool_chunk_size_mb / 2) | round(0, 'ceil') | int %} - {% set cpu_hint = (server_specs_processor_count | int) // 4 %} + {% set cpu_hint = server_specs_processor_count | int // 4 %} {% set instances = [buffer_pool_hint, cpu_hint, 64] | min %} innodb_buffer_pool_instances={{ instances }} - {% endif %} - {% set redo_log_capacity_gb = (server_specs_processor_count | int) / 2 %} - {% if redo_log_capacity_gb > 16 %} +{% endif %} + +{% set redo_log_capacity_gb = (server_specs_processor_count | int / 2) | round(0, 'ceil') %} +{% if redo_log_capacity_gb > 16 %} {% set redo_log_capacity_gb = 16 %} - {% endif %} +{% endif %} innodb_redo_log_capacity={{ redo_log_capacity_gb }}GB {% endif %} @@ -75,7 +85,6 @@ innodb_dedicated_server=OFF # OFF {% endif %} - ##: Standard Configurations log_bin_trust_function_creators = ON # OFF max_prepared_stmt_count = 1048576 # 16382 -- Gitee From 6fd683bfe1794933a3e9fadac809c8e99d560e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Thu, 30 May 2024 12:48:03 +0800 Subject: [PATCH 15/32] fix ../roles/mysql_server/templates/8.4/my.cnf.j2 --- .../mysql_server/templates/8.4/my.cnf.j2 | 39 ++++++++----------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index c5be164..f4968af 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -46,45 +46,40 @@ replica_parallel_workers = {{ [(server_specs_processor_count | in ####: Dedicated Server Settings or Auto-Generated by dbops Specifications {% if server_specs != "auto" %} innodb_read_io_threads={{ [(server_specs_processor_count | int) // 2, 4] | max }} # (available logical processors / 2), min of 4 -innodb_purge_threads="{{ 1 if server_specs_processor_count | int <= 16 else 4 }}" # 1 if # of available logical processors is <= 16; otherwise 4 +innodb_purge_threads={{ 1 if server_specs_processor_count | int <= 16 else 4 }} # 1 if # of available logical processors is <= 16; otherwise 4 innodb_parallel_read_threads={{ [(server_specs_processor_count | int) // 8, 4] | max }} # Default value: calculated by the number of available logical processors on the system divided by 8, with a minimum default value of 4 - -{# 根据服务器规格设置innodb_buffer_pool_size和innodb_buffer_pool_instances #} +{# 根据服务器规格设置innodb_buffer_pool_size和innodb_buffer_pool_instances #} {% set temp_ram = server_specs_memtotal_gb | int * 0.03 %} {% set temptable_max_ram_val = [temp_ram, 1] %} -{% if temptable_max_ram_val | max > 4 %} - {% set temptable_max_ram_final = 4 %} +{% if temptable_max_ram_val | max > 4 %} +{% set temptable_max_ram_final = 4 %} {% else %} - {% set temptable_max_ram_final = temptable_max_ram_val | max %} +{% set temptable_max_ram_final = temptable_max_ram_val | max %} {% endif %} -temptable_max_ram={{ temptable_max_ram_final }}GB - -{% set innodb_buffer_pool_size_mb = (server_specs_memtotal_gb | int * 0.6 * 1024) | round(0, 'ceil') %} -innodb_buffer_pool_size={{ innodb_buffer_pool_size_mb }}M # 134217728(128M) +temptable_max_ram={{ (temptable_max_ram_final | round(0, 'ceil')) | int }}GB # 3% of total memory: min 1 GB, max 4 GB +{% set innodb_buffer_pool_size_mb = ((server_specs_memtotal_gb | int) * 0.6 * 1024) | round(0, 'ceil') | int %} +innodb_buffer_pool_size={{ innodb_buffer_pool_size_mb }}M # 134217728(128M) # dbops set it 60% of total memory {% if innodb_buffer_pool_size_mb <= 1024 %} -innodb_buffer_pool_instances=1 +innodb_buffer_pool_instances=1 # 1 if innodb_buffer_pool_size <= 1 GiB; otherwise min(1/2*(innodb_buffer_pool_size/innodb_buffer_pool_chunk_size), 1/4*CPU cores), range 1-64. {% else %} - {% set buffer_pool_chunk_size_mb = 128 %} - {% set buffer_pool_hint = (innodb_buffer_pool_size_mb / buffer_pool_chunk_size_mb / 2) | round(0, 'ceil') | int %} - {% set cpu_hint = server_specs_processor_count | int // 4 %} - {% set instances = [buffer_pool_hint, cpu_hint, 64] | min %} -innodb_buffer_pool_instances={{ instances }} +{% set buffer_pool_chunk_size_mb = 128 %} +{% set buffer_pool_hint = (innodb_buffer_pool_size_mb / buffer_pool_chunk_size_mb / 2) | round(0, 'ceil') | int %} +{% set cpu_hint = server_specs_processor_count | int // 4 %} +{% set instances = [buffer_pool_hint, cpu_hint, 64] | min %} +innodb_buffer_pool_instances={{ instances }} # 1 if innodb_buffer_pool_size <= 1 GiB; otherwise min(1/2*(innodb_buffer_pool_size/innodb_buffer_pool_chunk_size), 1/4*CPU cores), range 1-64. {% endif %} - -{% set redo_log_capacity_gb = (server_specs_processor_count | int / 2) | round(0, 'ceil') %} +{% set redo_log_capacity_gb = ((server_specs_processor_count | int) / 2) | round(0, 'ceil') | int %} {% if redo_log_capacity_gb > 16 %} - {% set redo_log_capacity_gb = 16 %} +{% set redo_log_capacity_gb = 16 %} {% endif %} -innodb_redo_log_capacity={{ redo_log_capacity_gb }}GB +innodb_redo_log_capacity={{ redo_log_capacity_gb }}GB # Setup by dbops, refer to the implementation of innodb_dedicated_server. Redo log capacity: (logical processors / 2) GB, max 16 GB. {% endif %} - {% if server_specs == "auto" %} innodb_dedicated_server=ON # OFF , ON will auto set innodb_buffer_pool_size and innodb_redo_log_capacity {% else %} innodb_dedicated_server=OFF # OFF {% endif %} - ##: Standard Configurations log_bin_trust_function_creators = ON # OFF max_prepared_stmt_count = 1048576 # 16382 -- Gitee From d7b55ab01edddbeb8b1df0c5b845c4e7cf738b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Thu, 30 May 2024 14:26:39 +0800 Subject: [PATCH 16/32] =?UTF-8?q?fix=20../roles/mysql=5Fserver/templates/8?= =?UTF-8?q?.4/my.cnf.j2,=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99=E7=A9=BA?= =?UTF-8?q?=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index f4968af..28f4742 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -50,11 +50,11 @@ innodb_purge_threads={{ 1 if server_specs_processor_count | int <= 16 else 4 }} innodb_parallel_read_threads={{ [(server_specs_processor_count | int) // 8, 4] | max }} # Default value: calculated by the number of available logical processors on the system divided by 8, with a minimum default value of 4 {# 根据服务器规格设置innodb_buffer_pool_size和innodb_buffer_pool_instances #} {% set temp_ram = server_specs_memtotal_gb | int * 0.03 %} -{% set temptable_max_ram_val = [temp_ram, 1] %} +{% set temptable_max_ram_val = [temp_ram, 1] %} {% if temptable_max_ram_val | max > 4 %} {% set temptable_max_ram_final = 4 %} {% else %} -{% set temptable_max_ram_final = temptable_max_ram_val | max %} +{% set temptable_max_ram_final = temptable_max_ram_val | max %} {% endif %} temptable_max_ram={{ (temptable_max_ram_final | round(0, 'ceil')) | int }}GB # 3% of total memory: min 1 GB, max 4 GB {% set innodb_buffer_pool_size_mb = ((server_specs_memtotal_gb | int) * 0.6 * 1024) | round(0, 'ceil') | int %} -- Gitee From f94e35fa7e9c19efec13e541dd8b6d88239df7b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Thu, 30 May 2024 16:20:50 +0800 Subject: [PATCH 17/32] add ../templates/master_slaves.sql.j2 support 8.4 --- .../make_replication/templates/master_slaves.sql.j2 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mysql_ansible/roles/make_replication/templates/master_slaves.sql.j2 b/mysql_ansible/roles/make_replication/templates/master_slaves.sql.j2 index 4ac6ff1..fd1be78 100644 --- a/mysql_ansible/roles/make_replication/templates/master_slaves.sql.j2 +++ b/mysql_ansible/roles/make_replication/templates/master_slaves.sql.j2 @@ -7,6 +7,16 @@ select sleep(10); set @@global.super_read_only=on; +{% if mysql_version.startswith('8.4') and db_type == 'mysql' %} +change replication source to + source_host='{{master_ip}}', + source_port={{mysql_port}}, + source_user='{{mysql_rple_user}}', + source_password='{{mysql_rple_password}}', + source_auto_position=1; + +start replica; +{% else %} change master to master_host='{{master_ip}}', master_port={{mysql_port}}, @@ -16,3 +26,4 @@ change master to start slave; {% endif %} +{% endif %} -- Gitee From 067b4f95efd5ff0564cd92e5d3c12519485e5637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Thu, 30 May 2024 16:51:20 +0800 Subject: [PATCH 18/32] fix ../templates/master_slaves.sql.j2 support 8.4 --- .../roles/make_replication/templates/master_slaves.sql.j2 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql_ansible/roles/make_replication/templates/master_slaves.sql.j2 b/mysql_ansible/roles/make_replication/templates/master_slaves.sql.j2 index fd1be78..b7eef0a 100644 --- a/mysql_ansible/roles/make_replication/templates/master_slaves.sql.j2 +++ b/mysql_ansible/roles/make_replication/templates/master_slaves.sql.j2 @@ -13,7 +13,8 @@ change replication source to source_port={{mysql_port}}, source_user='{{mysql_rple_user}}', source_password='{{mysql_rple_password}}', - source_auto_position=1; + source_auto_position=1, + get_source_public_key=1; start replica; {% else %} -- Gitee From 9ecca8a1e7c633f6ac81c58d9e5b6bbf5210e1ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Thu, 30 May 2024 17:16:44 +0800 Subject: [PATCH 19/32] support 8.4 MGR --- mysql_ansible/roles/make_mgr/tasks/main.yml | 6 +++--- mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mysql_ansible/roles/make_mgr/tasks/main.yml b/mysql_ansible/roles/make_mgr/tasks/main.yml index 0c4bff6..0bdca1e 100644 --- a/mysql_ansible/roles/make_mgr/tasks/main.yml +++ b/mysql_ansible/roles/make_mgr/tasks/main.yml @@ -1,7 +1,7 @@ -- name: Fail if mysql version is not 8.0 +- name: Fail if mysql version is not 8.0.x or 8.4.x ansible.builtin.fail: - msg: "group replication install playbook only support 8.0!" - when: mysql_package.split('.')[0] != 'mysql-8' and mysql_package.split('.')[1] != '0' + msg: "group replication install playbook only support 8.0.x or 8.4.x!" + when: not (mysql_version.startswith('8.0') or mysql_version.startswith('8.4')) - name: Check is mysqld install by dbops or not ansible.builtin.stat: diff --git a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 index 28f4742..89f15c9 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.4/my.cnf.j2 @@ -233,6 +233,7 @@ loose-group_replication_flow_control_mode = QUOTA loose-group_replication_consistency = BEFORE_ON_PRIMARY_FAILOVER # BEFORE_ON_PRIMARY_FAILOVER loose-group_replication_exit_state_action = OFFLINE_MODE # OFFLINE_MODE loose-group_replication_paxos_single_leader = ON # OFF +loose-group_replication_recovery_get_public_key = ON # OFF {% for ip in ansible_all_ipv4_addresses %} {%- for host_ip in mysql_mgr_hosts %} {%- if ip == host_ip %} -- Gitee From bbd037f26d79eb8ec44ac1398f853c65fc1358a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Thu, 30 May 2024 17:35:57 +0800 Subject: [PATCH 20/32] xtrabackup in dbops only support 5.7 --- .../roles/install_xtrabackup/tasks/install_xtrabackup.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml b/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml index 10a1383..a3cc8e7 100644 --- a/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml +++ b/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml @@ -1,7 +1,7 @@ -- name: Fail if mysql version is 8.0 +- name: Fail if mysql version is not 5.7 ansible.builtin.fail: msg: "backup script is only support MySQL 5.7 !" - when: mysql_package.split('.')[0] == 'mysql-8' and mysql_package.split('.')[1] == '0' + when: not (mysql_version.startswith('5.7') - name: Install xtrabackup dependents ansible.builtin.yum: -- Gitee From 68edd5938db61544e649ba025fbe8ad6cc9c3895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Thu, 30 May 2024 17:40:18 +0800 Subject: [PATCH 21/32] fix ../templates/config_group_replication.sql.j2 --- .../templates/config_group_replication.sql.j2 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mysql_ansible/roles/make_mgr/templates/config_group_replication.sql.j2 b/mysql_ansible/roles/make_mgr/templates/config_group_replication.sql.j2 index a85e5c2..99b2ad8 100644 --- a/mysql_ansible/roles/make_mgr/templates/config_group_replication.sql.j2 +++ b/mysql_ansible/roles/make_mgr/templates/config_group_replication.sql.j2 @@ -5,11 +5,19 @@ set sql_log_bin=1; install plugin group_replication soname 'group_replication.so'; +{% if mysql_version.startswith('8.4') and db_type == 'mysql' %} +change replication source to + source_user='{{ mysql_mgr_user }}', + source_password='{{ mysql_mgr_password }}' + for channel 'group_replication_recovery'; + +{% else %} + change master to master_user='{{ mysql_mgr_user }}', master_password='{{ mysql_mgr_password }}' for channel 'group_replication_recovery'; - +{% endif %} {% if mysql_mgr_hosts[0] in ansible_all_ipv4_addresses %} @@ -20,4 +28,3 @@ change master to select sleep(15); start group_replication; {% endif %} - -- Gitee From 314bdca7e0b1451b5f8f36385fa545ffab549602 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Thu, 30 May 2024 17:54:36 +0800 Subject: [PATCH 22/32] change default mysql_version 8.4.0 --- mysql_ansible/playbooks/common_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql_ansible/playbooks/common_config.yml b/mysql_ansible/playbooks/common_config.yml index 3af83b7..f89c17e 100644 --- a/mysql_ansible/playbooks/common_config.yml +++ b/mysql_ansible/playbooks/common_config.yml @@ -1,5 +1,5 @@ ## In most cases, just adjust these two parameters. -mysql_version: "8.0.37" +mysql_version: "8.4.0" mysql_port: 3306 # The 'server_specs' variable defines the hardware specifications for the server deployment. -- Gitee From bbda5e15603f24109c2e44a10561648db7ea8da2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Tue, 11 Jun 2024 17:10:32 +0800 Subject: [PATCH 23/32] support openEuler24 --- mysql_ansible/playbooks/pre_tasks/confirmation.yml | 2 +- .../roles/install_xtrabackup/tasks/install_xtrabackup.yml | 6 +++--- .../roles/mysql_server/tasks/install_mysql_dependents.yml | 2 +- mysql_ansible/roles/mysql_server/templates/mysql.service.j2 | 2 +- mysql_ansible/roles/pre_check_and_set/tasks/main.yml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mysql_ansible/playbooks/pre_tasks/confirmation.yml b/mysql_ansible/playbooks/pre_tasks/confirmation.yml index 5753004..96ab815 100644 --- a/mysql_ansible/playbooks/pre_tasks/confirmation.yml +++ b/mysql_ansible/playbooks/pre_tasks/confirmation.yml @@ -9,7 +9,7 @@ - name: Assert if OS type is supported ansible.builtin.assert: that: - - os_type in ['BigCloud21', 'BigCloud7', 'BigCloud8', 'Anolis OS8', 'openEuler20', 'CentOS7', 'CentOS8', 'openEuler22', 'RedHat7', 'RedHat8'] + - os_type in ['BigCloud21', 'BigCloud7', 'BigCloud8', 'Anolis OS8', 'openEuler24', 'openEuler20', 'CentOS7', 'CentOS8', 'openEuler22', 'RedHat7', 'RedHat8'] fail_msg: "Unsupported OS type: {{ os_type }}" - name: Check for Python 3 diff --git a/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml b/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml index a3cc8e7..912cf5d 100644 --- a/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml +++ b/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml @@ -21,15 +21,15 @@ - name: Transfer xtrabackup ansible.builtin.copy: - src: "../files/{{ (os_type in ['BigCloud21', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" - dest: "/tmp/{{ (os_type in ['BigCloud21', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" + src: "../files/{{ (os_type in ['BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" + dest: "/tmp/{{ (os_type in ['BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" mode: '0755' owner: "{{ mysql_user }}" group: "{{ mysql_group }}" - name: Install xtrabackup ansible.builtin.yum: - name: "/tmp/{{ (os_type in ['BigCloud21', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" + name: "/tmp/{{ (os_type in ['BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" state: present disable_gpg_check: true diff --git a/mysql_ansible/roles/mysql_server/tasks/install_mysql_dependents.yml b/mysql_ansible/roles/mysql_server/tasks/install_mysql_dependents.yml index 57cba1a..6dee06a 100644 --- a/mysql_ansible/roles/mysql_server/tasks/install_mysql_dependents.yml +++ b/mysql_ansible/roles/mysql_server/tasks/install_mysql_dependents.yml @@ -24,7 +24,7 @@ - name: Set jemalloc rpm file name based on OS ansible.builtin.set_fact: - mysql_server__jemalloc_rpm_file: "{{ 'jemalloc-3.6.0-1.el8.x86_64.rpm' if os_type in ['openEuler22', 'openEuler20', 'BigCloud21', 'CentOS8', 'BigCloud8', 'Anolis OS8'] else 'jemalloc-3.6.0-1.el7.x86_64.rpm' }}" + mysql_server__jemalloc_rpm_file: "{{ 'jemalloc-3.6.0-1.el8.x86_64.rpm' if os_type in ['openEuler24', 'openEuler22', 'openEuler20', 'BigCloud21', 'CentOS8', 'BigCloud8', 'Anolis OS8'] else 'jemalloc-3.6.0-1.el7.x86_64.rpm' }}" - name: Copy jemalloc rpm to target server ansible.builtin.copy: diff --git a/mysql_ansible/roles/mysql_server/templates/mysql.service.j2 b/mysql_ansible/roles/mysql_server/templates/mysql.service.j2 index 876e8d4..9bba7b4 100644 --- a/mysql_ansible/roles/mysql_server/templates/mysql.service.j2 +++ b/mysql_ansible/roles/mysql_server/templates/mysql.service.j2 @@ -25,7 +25,7 @@ TimeoutStartSec=900 TimeoutStopSec=0 Environment=MYSQLD_PARENT_PID=1 {% if fcs_mysql_use_jemalloc == 1 %} -{% if os_type in ['openEuler22','openEuler20','BigCloud21'] %} +{% if os_type in ['openEuler24','openEuler22','openEuler20','BigCloud21'] %} Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so.2" {% else %} Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so.1" diff --git a/mysql_ansible/roles/pre_check_and_set/tasks/main.yml b/mysql_ansible/roles/pre_check_and_set/tasks/main.yml index 3df89c1..69b69bf 100644 --- a/mysql_ansible/roles/pre_check_and_set/tasks/main.yml +++ b/mysql_ansible/roles/pre_check_and_set/tasks/main.yml @@ -10,7 +10,7 @@ ansible.builtin.yum: name: ncurses-compat-libs state: present - when: os_type in ['BigCloud21', 'openEuler22', 'openEuler20', 'CentOS8', 'RedHat8', 'BigCloud8', 'Anolis OS8'] + when: os_type in ['BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'RedHat8', 'BigCloud8', 'Anolis OS8'] - name: Intall tar for openEuler20 ansible.builtin.yum: -- Gitee From ebfd7055829aa8f132917ddec5bf43121f3da0ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 12 Jun 2024 16:35:18 +0800 Subject: [PATCH 24/32] support Rocky9 --- mysql_ansible/playbooks/pre_tasks/confirmation.yml | 2 +- .../roles/install_xtrabackup/tasks/install_xtrabackup.yml | 4 ++-- .../roles/mysql_server/tasks/install_mysql_dependents.yml | 2 +- mysql_ansible/roles/mysql_server/templates/mysql.service.j2 | 2 +- mysql_ansible/roles/pre_check_and_set/tasks/main.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mysql_ansible/playbooks/pre_tasks/confirmation.yml b/mysql_ansible/playbooks/pre_tasks/confirmation.yml index 96ab815..f042866 100644 --- a/mysql_ansible/playbooks/pre_tasks/confirmation.yml +++ b/mysql_ansible/playbooks/pre_tasks/confirmation.yml @@ -9,7 +9,7 @@ - name: Assert if OS type is supported ansible.builtin.assert: that: - - os_type in ['BigCloud21', 'BigCloud7', 'BigCloud8', 'Anolis OS8', 'openEuler24', 'openEuler20', 'CentOS7', 'CentOS8', 'openEuler22', 'RedHat7', 'RedHat8'] + - os_type in ['Rocky9', 'BigCloud21', 'BigCloud7', 'BigCloud8', 'Anolis OS8', 'openEuler24', 'openEuler20', 'CentOS7', 'CentOS8', 'openEuler22', 'RedHat7', 'RedHat8'] fail_msg: "Unsupported OS type: {{ os_type }}" - name: Check for Python 3 diff --git a/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml b/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml index 912cf5d..6d55eb3 100644 --- a/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml +++ b/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml @@ -21,7 +21,7 @@ - name: Transfer xtrabackup ansible.builtin.copy: - src: "../files/{{ (os_type in ['BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" + src: "../files/{{ (os_type in ['Rocky9', 'BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" dest: "/tmp/{{ (os_type in ['BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" mode: '0755' owner: "{{ mysql_user }}" @@ -29,7 +29,7 @@ - name: Install xtrabackup ansible.builtin.yum: - name: "/tmp/{{ (os_type in ['BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" + name: "/tmp/{{ (os_type in ['Rocky9', 'BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" state: present disable_gpg_check: true diff --git a/mysql_ansible/roles/mysql_server/tasks/install_mysql_dependents.yml b/mysql_ansible/roles/mysql_server/tasks/install_mysql_dependents.yml index 6dee06a..3d008c7 100644 --- a/mysql_ansible/roles/mysql_server/tasks/install_mysql_dependents.yml +++ b/mysql_ansible/roles/mysql_server/tasks/install_mysql_dependents.yml @@ -24,7 +24,7 @@ - name: Set jemalloc rpm file name based on OS ansible.builtin.set_fact: - mysql_server__jemalloc_rpm_file: "{{ 'jemalloc-3.6.0-1.el8.x86_64.rpm' if os_type in ['openEuler24', 'openEuler22', 'openEuler20', 'BigCloud21', 'CentOS8', 'BigCloud8', 'Anolis OS8'] else 'jemalloc-3.6.0-1.el7.x86_64.rpm' }}" + mysql_server__jemalloc_rpm_file: "{{ 'jemalloc-3.6.0-1.el8.x86_64.rpm' if os_type in ['Rocky9', 'openEuler24', 'openEuler22', 'openEuler20', 'BigCloud21', 'CentOS8', 'BigCloud8', 'Anolis OS8'] else 'jemalloc-3.6.0-1.el7.x86_64.rpm' }}" - name: Copy jemalloc rpm to target server ansible.builtin.copy: diff --git a/mysql_ansible/roles/mysql_server/templates/mysql.service.j2 b/mysql_ansible/roles/mysql_server/templates/mysql.service.j2 index 9bba7b4..1cb6815 100644 --- a/mysql_ansible/roles/mysql_server/templates/mysql.service.j2 +++ b/mysql_ansible/roles/mysql_server/templates/mysql.service.j2 @@ -25,7 +25,7 @@ TimeoutStartSec=900 TimeoutStopSec=0 Environment=MYSQLD_PARENT_PID=1 {% if fcs_mysql_use_jemalloc == 1 %} -{% if os_type in ['openEuler24','openEuler22','openEuler20','BigCloud21'] %} +{% if os_type in ['Rocky9', 'openEuler24','openEuler22','openEuler20','BigCloud21'] %} Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so.2" {% else %} Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so.1" diff --git a/mysql_ansible/roles/pre_check_and_set/tasks/main.yml b/mysql_ansible/roles/pre_check_and_set/tasks/main.yml index 69b69bf..853f030 100644 --- a/mysql_ansible/roles/pre_check_and_set/tasks/main.yml +++ b/mysql_ansible/roles/pre_check_and_set/tasks/main.yml @@ -10,7 +10,7 @@ ansible.builtin.yum: name: ncurses-compat-libs state: present - when: os_type in ['BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'RedHat8', 'BigCloud8', 'Anolis OS8'] + when: os_type in ['Rocky9', 'BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'RedHat8', 'BigCloud8', 'Anolis OS8'] - name: Intall tar for openEuler20 ansible.builtin.yum: -- Gitee From 7d2a09104ff11c45d6ef9b94a72c7e440a5e9082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Wed, 12 Jun 2024 16:36:42 +0800 Subject: [PATCH 25/32] support Rocky9 --- .../roles/install_xtrabackup/tasks/install_xtrabackup.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml b/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml index 6d55eb3..d887e9c 100644 --- a/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml +++ b/mysql_ansible/roles/install_xtrabackup/tasks/install_xtrabackup.yml @@ -22,7 +22,7 @@ - name: Transfer xtrabackup ansible.builtin.copy: src: "../files/{{ (os_type in ['Rocky9', 'BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" - dest: "/tmp/{{ (os_type in ['BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" + dest: "/tmp/{{ (os_type in ['Rocky9', 'BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8']) | ternary('percona-xtrabackup-24-2.4.28-1.el8.x86_64.rpm', 'percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm') }}" mode: '0755' owner: "{{ mysql_user }}" group: "{{ mysql_group }}" -- Gitee From 453885cfb1b624d7560f4bdbb8f914f64bb4373e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Thu, 13 Jun 2024 11:37:43 +0800 Subject: [PATCH 26/32] fix Rocky9 install ncurses-compat-libs problem --- mysql_ansible/roles/pre_check_and_set/tasks/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql_ansible/roles/pre_check_and_set/tasks/main.yml b/mysql_ansible/roles/pre_check_and_set/tasks/main.yml index 853f030..8394d28 100644 --- a/mysql_ansible/roles/pre_check_and_set/tasks/main.yml +++ b/mysql_ansible/roles/pre_check_and_set/tasks/main.yml @@ -10,6 +10,7 @@ ansible.builtin.yum: name: ncurses-compat-libs state: present + enablerepo: "{{ 'devel' if os_type == 'Rocky9' else omit }}" when: os_type in ['Rocky9', 'BigCloud21', 'openEuler24', 'openEuler22', 'openEuler20', 'CentOS8', 'RedHat8', 'BigCloud8', 'Anolis OS8'] - name: Intall tar for openEuler20 -- Gitee From 068cc9ad4d1648e61628408c89866e883cdb0781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Thu, 13 Jun 2024 12:17:07 +0800 Subject: [PATCH 27/32] =?UTF-8?q?=E5=9C=A8=20single=5Fnode.yml=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=AD=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=B8=AA=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=BC=80=E5=85=B3=EF=BC=8C=E4=BB=A5=E5=85=81=E8=AE=B8?= =?UTF-8?q?=E5=B9=B6=E8=A1=8C=E9=83=A8=E7=BD=B2=E4=BD=BF=E7=94=A8=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E7=BD=91=E7=BB=9C=E6=8E=A5=E5=8F=A3=E5=90=8D=E7=9A=84?= =?UTF-8?q?=E5=8D=95=E8=8A=82=E7=82=B9=E5=AE=9E=E4=BE=8B=EF=BC=8C=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=80=BC=EF=BC=9A=E4=B8=8D=E5=85=81=E8=AE=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql_ansible/playbooks/common_config.yml | 1 + mysql_ansible/playbooks/default/common_config.yml | 4 +++- mysql_ansible/playbooks/single_node.yml | 1 + mysql_ansible/roles/pre_check_and_set/tasks/main.yml | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/mysql_ansible/playbooks/common_config.yml b/mysql_ansible/playbooks/common_config.yml index f89c17e..3e5954e 100644 --- a/mysql_ansible/playbooks/common_config.yml +++ b/mysql_ansible/playbooks/common_config.yml @@ -71,6 +71,7 @@ fcs_create_mysql_fast_login: 1 fcs_backup_script_create_backup_user: 1 fcs_mysql_use_jemalloc: 0 fcs_use_greatsql_ha: 1 +fcs_auto_download_mysql: 1 ## Feature Control Switch vars fcs_create_mysql_fast_login_name: db{{ mysql_port }} diff --git a/mysql_ansible/playbooks/default/common_config.yml b/mysql_ansible/playbooks/default/common_config.yml index 1f28ec0..3e5954e 100644 --- a/mysql_ansible/playbooks/default/common_config.yml +++ b/mysql_ansible/playbooks/default/common_config.yml @@ -1,5 +1,5 @@ ## In most cases, just adjust these two parameters. -mysql_version: "8.0.36" +mysql_version: "8.4.0" mysql_port: 3306 # The 'server_specs' variable defines the hardware specifications for the server deployment. @@ -61,6 +61,7 @@ mysql57_innodb_log_files_in_group: 16 mysql57_innodb_log_file_size: 256M use_write_set: 1 sock_type: 1 # 1 for ${datadir}/mysql.sock, 2 for /tmp/mysql${port}.sock, 3 for ${mysql_data_dir_base}/run/mysql${port}.sock +mgr_use_random_uuid: 1 ## Feature Control Switch fcs_skip_db_mount_verification: 1 @@ -70,6 +71,7 @@ fcs_create_mysql_fast_login: 1 fcs_backup_script_create_backup_user: 1 fcs_mysql_use_jemalloc: 0 fcs_use_greatsql_ha: 1 +fcs_auto_download_mysql: 1 ## Feature Control Switch vars fcs_create_mysql_fast_login_name: db{{ mysql_port }} diff --git a/mysql_ansible/playbooks/single_node.yml b/mysql_ansible/playbooks/single_node.yml index d37f210..eddc63a 100644 --- a/mysql_ansible/playbooks/single_node.yml +++ b/mysql_ansible/playbooks/single_node.yml @@ -12,6 +12,7 @@ - "../roles/pre_check_and_set" - "../roles/mysql_server" mtls_with_mysql_group_replication: 0 + roles_precheckandset_check_networkcardnames: 1 pre_tasks: - name: Import tasks to validate setting in common_config.yml ansible.builtin.import_tasks: pre_tasks/validate_common_config_setting.yml diff --git a/mysql_ansible/roles/pre_check_and_set/tasks/main.yml b/mysql_ansible/roles/pre_check_and_set/tasks/main.yml index 8394d28..e32504c 100644 --- a/mysql_ansible/roles/pre_check_and_set/tasks/main.yml +++ b/mysql_ansible/roles/pre_check_and_set/tasks/main.yml @@ -168,6 +168,7 @@ fail_msg: "Network card names are different!" run_once: true delegate_to: 127.0.0.1 + when: roles_precheckandset_check_networkcardnames is not defined or roles_precheckandset_check_networkcardnames != 0 - name: Delete /tmp/net_aliases.txt ansible.builtin.file: -- Gitee From 0f919ba4a0e381a01245105723a2ab9e76d64716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Mon, 17 Jun 2024 15:24:06 +0800 Subject: [PATCH 28/32] =?UTF-8?q?GreatSQL=E9=BB=98=E8=AE=A4=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=BF=AB=E9=80=9F=E5=8D=95=E4=B8=BB=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 index 00fb12f..6a9260e 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 @@ -211,7 +211,8 @@ loose-group_replication_compression_threshold =1024 loose-group_replication_flow_control_mode =QUOTA # QUOTA loose-group_replication_consistency =BEFORE_ON_PRIMARY_FAILOVER # EVENTUAL loose-group_replication_exit_state_action =OFFLINE_MODE # READ_ONLY -loose-group_replication_paxos_single_leader =on # off +loose-group_replication_paxos_single_leader =off # off +loose-group_replication_single_primary_fast_mode =1 # 0 {% for ip in ansible_all_ipv4_addresses %} {%- for host_ip in mysql_mgr_hosts %} {%- if ip == host_ip %} -- Gitee From c54cc6bdab8328cf4ba24dfbb4859bbf017d8725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Mon, 17 Jun 2024 16:27:45 +0800 Subject: [PATCH 29/32] =?UTF-8?q?GreatSQL=E9=AB=98=E5=8F=AF=E7=94=A8?= =?UTF-8?q?=E7=89=B9=E6=80=A7=E4=B9=8B=E4=BB=B2=E8=A3=81=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql_ansible/playbooks/default/var_mgr.yml | 14 ++++++++++---- .../pre_tasks/validate_greatsql_arbitrator.yml | 17 +++++++++++++++++ .../playbooks/pre_tasks/validate_mgr.yml | 4 ++++ mysql_ansible/playbooks/vars/var_mgr.yml | 14 ++++++++++---- .../templates/8.0/greatsql-my.cnf.j2 | 5 +++++ 5 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml diff --git a/mysql_ansible/playbooks/default/var_mgr.yml b/mysql_ansible/playbooks/default/var_mgr.yml index 5bfe0c7..57c7593 100644 --- a/mysql_ansible/playbooks/default/var_mgr.yml +++ b/mysql_ansible/playbooks/default/var_mgr.yml @@ -3,9 +3,15 @@ mysql_binlog_format: row mysql_mgr_port: "{{ mysql_port * 10 + 1 }}" sub_nets: 1% mysql_mgr_hosts: - - '192.168.199.171' - - '192.168.199.172' - - '192.168.199.173' -greatsql_vip: 192.168.199.174 + - '192.168.199.131' + - '192.168.199.132' + - '192.168.199.133' + + +# If you have installed MySQL instead of GreatSQL, the following parameters will have no effect. +greatsql_vip: 192.168.199.134 greatsql_net_work_interface: "ens33" greatsql_netmask: "255.255.255.255" +greatsql_group_replication_arbitrator: false +greatsql_group_replication_arbitrator_hosts: + - '192.168.199.133' diff --git a/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml b/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml new file mode 100644 index 0000000..9c11fbe --- /dev/null +++ b/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml @@ -0,0 +1,17 @@ +- name: Check if each ip in greatsql_group_replication_arbitrator_hosts is valid + ansible.builtin.fail: + msg: "{{ ansible_play_name }}: `greatsql_group_replication_arbitrator_hosts` is undefined or not valid" + loop: "{{ greatsql_group_replication_arbitrator_hosts | default([]) }}" + when: db_type == 'greatsql' and greatsql_group_replication_arbitrator and not (item is regex("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$")) + +- name: Check if greatsql_group_replication_arbitrator_hosts is a strict subset of mysql_mgr_hosts + ansible.builtin.fail: + msg: "{{ ansible_play_name }}: `greatsql_group_replication_arbitrator_hosts` must be a strict subset of `mysql_mgr_hosts`" + when: > + (not greatsql_group_replication_arbitrator_hosts | issubset(mysql_mgr_hosts) or + greatsql_group_replication_arbitrator_hosts | length == mysql_mgr_hosts | length) + +- name: Check if the count of greatsql_group_replication_arbitrator_hosts is valid + ansible.builtin.fail: + msg: "Invalid number of elements in greatsql_group_replication_arbitrator_hosts list" + when: db_type == 'greatsql' and greatsql_group_replication_arbitrator and "greatsql_group_replication_arbitrator_hosts | length not in [1, 2, 3, 4, 5, 6, 7, 8]" diff --git a/mysql_ansible/playbooks/pre_tasks/validate_mgr.yml b/mysql_ansible/playbooks/pre_tasks/validate_mgr.yml index 755bf10..f1dd85f 100644 --- a/mysql_ansible/playbooks/pre_tasks/validate_mgr.yml +++ b/mysql_ansible/playbooks/pre_tasks/validate_mgr.yml @@ -21,6 +21,10 @@ msg: "Invalid number of elements in mysql_mgr_hosts list" when: "mysql_mgr_hosts | length not in [3, 4, 5, 6, 7, 8, 9]" +- name: Validate GreatSQL arbitrator var + ansible.builtin.import_tasks: validate_greatsql_arbitrator.yml + when: db_type == 'greatsql' and greatsql_group_replication_arbitrator + - name: Validate GreatSQL HA var ansible.builtin.import_tasks: validate_greatsql_ha.yml when: db_type == 'greatsql' and fcs_use_greatsql_ha == 1 diff --git a/mysql_ansible/playbooks/vars/var_mgr.yml b/mysql_ansible/playbooks/vars/var_mgr.yml index 5bfe0c7..57c7593 100644 --- a/mysql_ansible/playbooks/vars/var_mgr.yml +++ b/mysql_ansible/playbooks/vars/var_mgr.yml @@ -3,9 +3,15 @@ mysql_binlog_format: row mysql_mgr_port: "{{ mysql_port * 10 + 1 }}" sub_nets: 1% mysql_mgr_hosts: - - '192.168.199.171' - - '192.168.199.172' - - '192.168.199.173' -greatsql_vip: 192.168.199.174 + - '192.168.199.131' + - '192.168.199.132' + - '192.168.199.133' + + +# If you have installed MySQL instead of GreatSQL, the following parameters will have no effect. +greatsql_vip: 192.168.199.134 greatsql_net_work_interface: "ens33" greatsql_netmask: "255.255.255.255" +greatsql_group_replication_arbitrator: false +greatsql_group_replication_arbitrator_hosts: + - '192.168.199.133' diff --git a/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 index 6a9260e..d1d1cb1 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 @@ -295,3 +295,8 @@ loose-group_replication_single_primary_mode=1 loose-group_replication_enforce_update_everywhere_checks=0 {% endif %} + +{% if greatsql_group_replication_arbitrator and inventory_hostname in greatsql_group_replication_arbitrator_hosts %} +#GreatSQL MGR arbitrator +loose-group_replication_arbitrator = ON +{% endif %} -- Gitee From 273b2c8247df6fee7a32cf36d0d574f1d61a7e04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Mon, 17 Jun 2024 16:31:21 +0800 Subject: [PATCH 30/32] =?UTF-8?q?=E5=88=A0=E6=8E=89validate=5Fgreatsql=5Fa?= =?UTF-8?q?rbitrator=E5=86=97=E4=BD=99=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pre_tasks/validate_greatsql_arbitrator.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml b/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml index 9c11fbe..5b6b833 100644 --- a/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml +++ b/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml @@ -1,17 +1,6 @@ -- name: Check if each ip in greatsql_group_replication_arbitrator_hosts is valid - ansible.builtin.fail: - msg: "{{ ansible_play_name }}: `greatsql_group_replication_arbitrator_hosts` is undefined or not valid" - loop: "{{ greatsql_group_replication_arbitrator_hosts | default([]) }}" - when: db_type == 'greatsql' and greatsql_group_replication_arbitrator and not (item is regex("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$")) - - name: Check if greatsql_group_replication_arbitrator_hosts is a strict subset of mysql_mgr_hosts ansible.builtin.fail: msg: "{{ ansible_play_name }}: `greatsql_group_replication_arbitrator_hosts` must be a strict subset of `mysql_mgr_hosts`" when: > (not greatsql_group_replication_arbitrator_hosts | issubset(mysql_mgr_hosts) or greatsql_group_replication_arbitrator_hosts | length == mysql_mgr_hosts | length) - -- name: Check if the count of greatsql_group_replication_arbitrator_hosts is valid - ansible.builtin.fail: - msg: "Invalid number of elements in greatsql_group_replication_arbitrator_hosts list" - when: db_type == 'greatsql' and greatsql_group_replication_arbitrator and "greatsql_group_replication_arbitrator_hosts | length not in [1, 2, 3, 4, 5, 6, 7, 8]" -- Gitee From 3a38a394d5c192a310bdf01799e1d1aa7fd77089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Mon, 17 Jun 2024 17:09:31 +0800 Subject: [PATCH 31/32] asdfsadf --- .../playbooks/pre_tasks/validate_greatsql_arbitrator.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml b/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml index 5b6b833..3b3383d 100644 --- a/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml +++ b/mysql_ansible/playbooks/pre_tasks/validate_greatsql_arbitrator.yml @@ -2,5 +2,6 @@ ansible.builtin.fail: msg: "{{ ansible_play_name }}: `greatsql_group_replication_arbitrator_hosts` must be a strict subset of `mysql_mgr_hosts`" when: > - (not greatsql_group_replication_arbitrator_hosts | issubset(mysql_mgr_hosts) or - greatsql_group_replication_arbitrator_hosts | length == mysql_mgr_hosts | length) + (greatsql_group_replication_arbitrator_hosts | length >= mysql_mgr_hosts | length) or + (greatsql_group_replication_arbitrator_hosts | difference(mysql_mgr_hosts) | length > 0) or + (greatsql_group_replication_arbitrator_hosts | length == mysql_mgr_hosts | length) -- Gitee From 3ba7debd7ba1d5d74620ec207056cf378c62b342 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=AC=E8=BE=BE?= <510386283@qq.com> Date: Mon, 17 Jun 2024 17:16:37 +0800 Subject: [PATCH 32/32] =?UTF-8?q?=E9=BB=98=E8=AE=A4group=5Freplication=5Fp?= =?UTF-8?q?rimary=5Felection=5Fmode=EF=BC=9A=20GTID=5FFIRST?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 b/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 index d1d1cb1..3ec46ce 100644 --- a/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 +++ b/mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 @@ -213,6 +213,7 @@ loose-group_replication_consistency =BEFORE_ON_PRIMARY_FAILOVE loose-group_replication_exit_state_action =OFFLINE_MODE # READ_ONLY loose-group_replication_paxos_single_leader =off # off loose-group_replication_single_primary_fast_mode =1 # 0 +loose-group_replication_primary_election_mode =GTID_FIRST # WEIGHT_ONLY {% for ip in ansible_all_ipv4_addresses %} {%- for host_ip in mysql_mgr_hosts %} {%- if ip == host_ip %} -- Gitee