Code前端首页关于Code前端联系我们

Centos7.9部署Mysql-8.0.33主从半同步复制集群

terry 2年前 (2023-09-28) 阅读数 81 #未命名

mysql主从同步方式的区别

  1. 异步同步:异步模式下,主库更改日志、数据并写入并确认data 然后立即表明事务完成,而无需等待数据库的复制完成。主数据库不会等待从数据库的确认。该模式下,主库和从库之间存在一定的延迟,因此如果主库出现故障,可能会导致部分数据丢失。
  2. 半同步:半同步模式下,主库至少需要一个从库进行确认才能进行交易。主库将事务写入日志,并等待至少一个从库确认事务已完成。在这种模式下,主库和至少一个从库的数据是一致的,但如果主库出现故障,尚未确认的数据可能会丢失。
  3. 全同步:全同步模式下,主库在提交事务之前必须等待各个从库的确认。主库将事务写入日志,等待各个从库确认成功后才确认事务完成。该模式下,主库和所有从库的数据完全一致,但由于需要等待所有从库的确认,可能会影响系统性能。

一般来说,异步模式延迟较低,但可能会丢失一些数据,而半同步和全同步模式提供更高的数据一致性,但带来较高的延迟和性能开销。选择合适的方案取决于应用要求和数据的重要性。

0。准备工作

准备三台机器

os主机配置角色
centos7.92.01.02. 4C CPU,8G内存,100G内存10.20。 24.1034C CPU,8G内存,100G存储从机

三台机器都配置了ntp,提前禁用了selinux。最好从虚拟机模板复制。

准备配置文件/etc/my.cnf,需要准备三台机器

[mysqld]
 
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
 
# server-id不能重复
server-id=1
# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 可选配置
# 是否只读 0读写 1只读
read-only=0
# 禁用管理员写操作
# super-read-only=1
# 需要主从复制的数据库 ,如多个则重复配置(不设置则都同步)
# replicate-do-db=user_db.%
#屏蔽系统库同步,如果需要对某个数据库不进行同步则追加以下配置,配置对应的数据库名称,多个的话配置多行
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
 
#skip-external-locking
#key_buffer_size = 16M
#max_allowed_packet = 1M
#table_open_cache = 64
#sort_buffer_size = 512K
#net_buffer_length = 8K
#read_buffer_size = 256K
#read_rnd_buffer_size = 512K
#myisam_sort_buffer_size = 8M
 
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 
[mysqldump]
 
quick
max_allowed_packet = 16M
 
[mysql]
 
no-auto-rehash
 
[myisamchk]
 
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
 
[mysqlhotcopy]
 
interactive-timeout

1。三节点安装8.0.33

从yum安装或离线安装

 yum install mysql80-community-release-el7-7.noarch.rpm
 systemctl start mysqld

2。打开远程访问

# 获取安装后的临时密码
grep 'password' | /var/log/mysqld.log
# 修改root密码
mysql> alter user 'root'@'localhost' identified by '123456';
# 开放远程访问
mysql> update user set user.Host='%' where user.User='root';
# 刷新立刻生效
mysql> flush privileges;

3。配置主从同步

  • 主节点
    # 新建用户用于主从同步,8.0默认的加密caching_sha2_password太严格,换位native_password
    mysql> CREATE USER 'slave'@'%' IDENTIFIED WITH 'mysql_native_password' BY '123456'
    mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    # 刷新立刻生效
    mysql> flush privileges;
    # 查看binlog状态
    mysql> show master status\G;
    *************************** 1. row ***************************
                 File: mysql-bin.000002
             Position: 157
         Binlog_Do_DB:
     Binlog_Ignore_DB:
    Executed_Gtid_Set: aed33aee-0089-11ee-a4a7-0050569abce0:1-19
    1 row in set (0.00 sec)
     
    ERROR:
    No query specified
  • 从节点
    # 配置REPLICATION SOURCE 注意,在配置从节点账号时不要在主节点做写入操作,防止SOURCE_LOG_POS变化
    mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.20.24.101',SOURCE_USER='slave',SOURCE_PASSWORD='123456',SOURCE_LOG_FILE='mysql-bin.000002',SOURCE_LOG_POS=157;
    # 开启复制
    mysql> start replica;
    mysql> show replica status\G;

4。启用半同步复制

  • 主节点
    #登录mysql 安装半同步插件。mysql的半同步依靠插件进行
    mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';

    my.cnf add 配置

    [mysqld]
    rpl_semi_sync_source_enabled=1

    重启 mysqld

    systemctl restart mysqld
  • 从节点 重启我的配置nmy add。 qld
    systemctl restart mysqld
  • 验证
    mysql> show status like '%semi%';
    mysql> show global variables like 'rpl_semi%';
    +---------------------------------------------+------------+
    | Variable_name                               | Value      |
    +---------------------------------------------+------------+
    # 设置为on表示开启了半同步功能
    | rpl_semi_sync_source_enabled                | ON         |
    # 单位是毫秒,表示如果主库等待从库回复消息的时间超过该值,就自动切换为异步复制模式
    | rpl_semi_sync_source_timeout                | 10000      |
    | rpl_semi_sync_source_trace_level            | 32         |
    # 它控制主库接收多少个从库写事物成功反馈,才返回成功给客户端
    | rpl_semi_sync_source_wait_for_replica_count | 1          |
    # 默认是ON。表示master每个事务提交后都要等待slave的接收确认信号
    | rpl_semi_sync_source_wait_no_replica        | ON         |
    # 默认值是AFTER_SYNC,含义是主库将每个事物写入binlog,并传递给从库,刷新到中继日志,主库开始等待从库的反馈,接收到从库的回复之后,再提交事物并且返回”commit ok”结果给客户端
    | rpl_semi_sync_source_wait_point             | AFTER_SYNC |

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门