linux学习之Mysql主从同步

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

主从同步原理:
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)
关于 阿里云盘CLI。仿 Linux shell 文件处理命令的阿里云盘命令行客户端,支持JavaScript插件,支持同步备份功能,支持相册批量下载。 特色 多平台支持, 支持 Windows, macOS, linux(x86/x64/arm), android, iOS 等 阿里云盘多用户支持 支持备份盘,资源库无缝切换 下载网盘内文件, 支持多个文件或目录下载, 支持断点续传和单文件并行下载。支持软链接(符号链接)文件。 上传本地文件, 支持多个文件或目录上传,支持排除指定文件夹/文件(正则表达式)功能。支持软链接(符号链接)文件。 同步备份功能支持备份本地文件到云盘,备份云盘文件到本地,双向同步备份保持本地文件和网盘文件同步。常用于嵌入式或者NAS等设备,支持docker镜像部署。 命令和文件路径输入支持Tab键自动补全,路径支持通配符匹配模式 支持JavaScript插件,你可以按照自己的需要定制上传/下载中关键步骤的行为,最大程度满足自己的个性化需求 支持共享相册的相关操作,支持批量下载相册所有普通照片、实况照片文件到本地 支持多用户联合下载功能,对下载速度有极致追求的用户可以尝试使用该选项。详情请查看文档多用户联合下载 如果大家有打算开通阿里云盘VIP会员,可以使用阿里云盘APP扫描下面的优惠推荐码进行开通。 注意:您需要开通【三方应用权益包】,这样使用本程序下载才能加速,否则下载无法提速。 Windows不第二步打开aliyunpan命令行程序,任何云盘命令都有类似如下日志输出 如何登出和下线客户端 阿里云盘单账户最多只允许同时登录 10 台设备 当出现这个提示:你账号已超出最大登录设备数量,请先下线一台设备,然后重启本应用,才可以继续使用 说明你的账号登录客户端已经超过数量,你需要先登出其他客户端才能继续使用,如下所示
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值