linux学习之Mysql主从同步

本文详细介绍了MySQL主从同步的原理,包括主服务器的binlog设置和从服务器的复制线程。讨论了不同复制模式,如异步、全同步和半同步复制,并提供了配置主从同步及半同步复制的步骤,包括授权、查看主库信息、指定服务器ID等。文章还提到了如何在系统关闭后使半同步复制设置永久生效。
摘要由CSDN通过智能技术生成

主从同步原理:
Master:记录数据更改操作
1、启用binlog日志
2、设置binlog日志格式
3、设置server_id
slave:运行两个线程
1、Slave_IO:复制master主机binlog日志里的SQL到本机的relay_log文件
2、Slave_SQL:执行本机relay_log文件里的SQL语句,重现Master的数据操作

构建环境:
1、确保从库与主库数据相同
2、主服务器要启用binlog日志、有授权用户并查看当前使用的日志
3、从服务器要设置server_id,指定主库信息

相关文件:

文件名说明
master.info主库信息
relay-log.info中继日志信息
主机名-rely-bin.xxxxx中继日志
主机名-rely-bin.index索引文件

主库配置选项:

选项用途
binlog_do_db=name设置Master对哪些库记日志
binlog_ignore_db=name设置Master对哪些库不记日志

从库配置选项:

选项用途
log_slave_updates记录从库更新,允许链式复制
relay_log=dbsvr2-relay-bin制定中继日志文件名
replicate_do_db=mysql仅复制制定库,其他库被忽略,可设置多条
replicate_ignore_db=test不复制哪些库,其他库将被忽略,jgnore-db与do-db只需用一种

主从同步结构:
单向复制:主–>从
链式复制:主–>从–>从
互为主从:主<–>主
一主多从:从<–主-->从

复制模式:
1、异步复制:主库执行完一次事务后,立即将结果返给客户端,并不关心从库是否接受处理
2、全同步复制:当从库执行完一次事务,且所有从库都执行了该事务后才返回给客户端
3、半同步复制:介于异步复制和全同步复制之间,等待至少一个从库接收到并写到relay-log中才返回给客户端

主从同步配置:
1、配置主服务器
开启binlog日志,指定服务ID与日志格式

[mysqld]
log-bin=日志名      #开启binlog日志
bind-address=0.0.0.0
server_id=id值
binlog-format="mixed"   #指定日志格式

#重启服务
systemctl restart mysqld

2、授权用户,允许从库网段访问(默认对所有库有同步权限)

mysql> grant replication slave on *.* to 'mingzi'@'%' identified by '1234';
#允许mingzi用户从所有网段连接,对所有库有同步权限密码1234

3、查看主库信息

mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 439
Binlog_Do_DB: 
Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

配置从库
确保从库数据与主库数据一致下进行以下操作

1、指定server_id,不允许重复

vim /etc/my.cnf
[mysql]
server_id=id
#重启服务
systemctl restart mysqld

2、指定从库信息

mysql> change master to 
    -> master_user='mingzi'
    -> ,master_password='1234',
    -> master_host='192.168.4.2' #主机地址,
    -> master_log_file='mysql-bin.000003',   #主机日志文件名
    -> master_log_pos=439; #主机偏移位置
Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> start slave; #启动进程

3、检查状态

mysql> show slave status\G
   ……
   Slave_IO_Running: Yes
   Slave_SQL_Running: Yes
   ……

配置主从从结构

1、主库
配置主服务器
开启binlog日志,指定服务ID与日志格式

[mysqld]
log-bin=日志名      #开启binlog日志
bind-address=0.0.0.0
server_id=id值
binlog-format="mixed"   #指定日志格式

授权用户,允许从库网段访问(默认对所有库有同步权限)
mysql> grant replication slave on *.* to '授权用户'@'第一台从库位置' identified by '密码';

2、第一台从库
修改配置文件/etc/my.cnf

vim /etc/my.cnf
[mysqld]
server_id=id号
log_bin=日志名
binlog_format='mixed'
log_slave_updates

重启后进入数据库配置主从关系
授权用户,允许从库网段访问(默认对所有库有同步权限)

mysql> grant replication slave on *.* to '授权用户i'@'第二台从库位置'  identified by '密码';
#允许mingzi用户从所有网段连接,对所有库有同步权限密码1234

指定从库信息

mysql> change master to 
    -> master_user='授权用户'
    -> ,master_password='密码',
    -> master_host='192.168.4.2' #主机地址,
    -> master_log_file='mysql-bin.000003',   #主机日志文件名
    -> master_log_pos=439; #主机偏移位置
Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> start slave; #启动进程

3、配置第二台从库
修改配置文件

vim /etc/my.cnf
[mysqld]
server_id=id号

指定从库信息

mysql> change master to 
    -> master_user='授权用户'
    -> ,master_password='密码',
    -> master_host='192.168.4.2' #主机地址,
    -> master_log_file='mysql-bin.000003',   #主机日志文件名
    -> master_log_pos=439; #主机偏移位置
Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> start slave; #启动进程
半同步复制配置

1、查看是否允许动态加载模块

mysql> mysql> show variables lik_dynamic_loading';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| have_dynamic_loading | YES   |    #默认允许
+----------------------+-------+
1 row in set (0.00 sec)

2、加载插件
主库:

mysql> install plugin rpl_semi_sync_master  soname 'semisync_master.so';
Query OK, 0 rows affected (0.11 sec)
mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';
+----------------------+---------------+
| plugin_name          | plugin_status |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
+----------------------+---------------+
1 row in set (0.00 sec)

从库:

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.02 sec)
mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';
+----------------------+---------------+
| plugin_name          | plugin_status |
+----------------------+---------------+
| rpl_semi_sync_slave  | ACTIVE        |
+----------------------+---------------+
1 row in set (0.00 sec

插件安装完,但半同步复制还是关闭状态。
3、启用半同步复制
主库:

mysql> set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'rpl_semi_sync_%_enabled';  #查看状态
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON    |
+------------------------------+-------+
1 row in set (0.00 sec)

从库`

mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'rpl_semi_sync_%_enabled';    #查看状态
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| rpl_semi_sync_slave_enabled | ON    |
+-----------------------------+-------+
1 row in set (0.01 sec)

此时,临时半同步复制配置完成,数据库关闭后失效
4、永久配置半同步状态
需要将修改主配置文件/etc/my.cnf
主库:

plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1

从库:

plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1

5、在高可用架构下,master和slave需同时启动

plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1

mysql> show variables like 'rpl_semi_sync_%_enabled';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON    |
| rpl_semi_sync_slave_enabled  | ON    |
+------------------------------+-------+
2 rows in set (0.00 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值