前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL主从复制配置说明

MySQL主从复制配置说明

作者头像
崔笑颜
发布2020-12-21 09:40:04
4870
发布2020-12-21 09:40:04
举报

一,MySQL主从配置原理

1. mysql支持的复制格式

基于语句复制(STATEMENT)

  • (优点)基于statement复制的优点很明显,简单的记录执行语句同步到从库执行同样的语句,占用磁盘空间小,网络传输快,并且通过mysqlbinlog工具容易读懂其中的内容 。
  • (缺点)并不是所有语句都能复制的比如:insert into table1(create_time) values(now()),取的是数据当前时间,不同的数据可能时间不一致,另外像存储过程和触发器也可能存在问题。

基于行复制(ROW)

  • (优点)从MySQL5.1开始支持基于行的复制,最大的好处是可以正确地复制每一行数据。一些语句可以被更加有效地复制,另外就是几乎没有基于行的复制模式无法处理的场景,对于所有的SQL构造、触发器、存储过程等都能正确执行。
  • (缺点)主要的缺点就是二进制日志可能会很大,比如:update table1 set name='admin' where id<1000,基于行复制可能需要复制1000条记录,而基于语句复制只有一条语句,另外一个缺点就是不直观,所以,你不能使用mysqlbinlog来查看二进制日志。

混合类型的复制(MIXED)

  • 混合复制是借用语句复制和行复制的有点进行整合,MIXED也是MySQL默认使用的二进制日志记录方式,但MIXED格式默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。比如用到UUID()、USER()、CURRENT_USER()、ROW_COUNT()等无法确定的函数。

2. mysql主从复制作用

  • 数据分布
  • 主从分摊负载。
  • 高可用性和故障切换。
  • 数据备份。
  • 利用从服务器做查询。

3. mysql主从复制原理

  • binlog Events 我们知道binlog日志用于记录所有对MySQL的操作的变更,而这每一个变更都会对应的事件,也就是Event。index文件记录了所有的binlog位置 每个binlog会有heade, event,rotate三个event,binlog的结构如下。
image
image

常见event如下:

  • Format_desc:一个全新的binlog日志文件event信息
  • Rotate :日志分割时结束event。
  • Table_map:表,列等元数据的event。
  • Query:查询,就是DDL这类的Event,如果binlog格式为STATEMENT格式,增删改都属于Qeury event。
  • Write_rows:Binlog为ROW格式时的插入event。
  • Update_rows:Binlog为ROW格式时的更新event。
  • Delete_rows:Binlog为ROW格式时的删除event。

我们也可以通过binlog 看到这些事件,通过mysql提供的工具查看binlog日志,如下:

image
image

主从复制流程

image
image
  • 当从库发出 start slave命令时,从库会创建I/O线程和SQL thread(SQL线程)
  • 从库的IO和主库的dump线程建立连接 并监听binlog二进制日志事件
  • 从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求
  • 主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程
  • 从库IO线程接收binlog evnets,并存放到本地relay-log中,传送过来的信息,会记录到master.info中。
  • 从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info,默认情况下,已经应用过的relay会自动被清理purge。

二,MySQL只从配置缺陷

MySQL的复制(replication)功能配置简单,深受开发人员的喜欢,基于复制的读写分离方案也非常流行。而MySQL数据库高可用大多也是基于复制技术,但是MySQL复制本身依然存在部分缺陷,最为主要的问题如下:数据丢失问题(consistency)

  • 数据同步延迟问题(delay)
  • 扩展性问题(scalability)

从MySQL 5.7的lossless semi-sync replication已经解决了主从数据丢失的问题,MySQL 5.7的multi-thread slave也很大程度地解决了数据同步延迟的问题,MySQL 5.7的Group replication也很大程度地解决了扩展性问题。另外,MySQL 5.7.22 backlog了MySQL 8.0中的基于WriteSet的并行复制,可以说完全解决了主从数据延迟的问题。可以看出,MySQL正在朝着一个非常好的方向发展

三,准备工作

准备3台服务器分别为:

Master 192.168.1.234

Slave 192.168.1.235

Slave 192.168.1.236

四,MySQL安装配置

下载MySQL安装包

下载地址:cdn.mysql.com//Downloads/…

解压安装文件:

[root@localhost ~]# cd /software[root@localhost software]# tar -zxzf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz 拷贝安装文件到指定文件夹:[root@localhost ~]# cp /software/mysql-5.7.17-linux-glibc2.5-x86_64/* /usr/local/mysql -r 添加系统mysql组和mysql用户[root@localhost ~]# groupadd mysql[root@localhost ~]# useradd -r -g mysql mysql 进入安装mysql软件目录:执行命令 cd /usr/local/mysql

修改当前目录拥有者为mysql用户:执行命令 chown -R mysql:mysql ./

image.png
image.png

安装数据库:

5.6以及之前版本安装数据库

/usr/local/mysql/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

image.png
image.png

5.7版本安装数据库:

/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ --initialize

![](data:;base64,<?xml version=)" alt="image.png" data-src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d996ae4732a040cdbc58e5729e2b571b~tplv-k3u1fbpfcp-zoom-1.image" data-width="800" data-height="600" />

拷贝配置文件到指定文件夹

[root@localhost mysql]# cp -a ./support-files/my-default.cnf /etc/my.cnf

[root@localhost mysql]# cp -a ./support-files/mysql.server /etc/init.d/mysqld

![](data:;base64,<?xml version=)" alt="image.png" data-src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bd3666642e34476a86f54854e2a92f16~tplv-k3u1fbpfcp-zoom-1.image" data-width="800" data-height="600" />

后台启动mysql

[root@localhost mysql]# ./bin/mysqld_safe --user=mysql &

image.png
image.png

重启mysql

执行命令: /etc/init.d/mysqld restart

image.png
image.png

设置为开机启动:

执行命令:chkconfig --level 35 mysqld on

![](data:;base64,<?xml version=)" alt="image.png" data-src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0971e5ee94e545299a2b109092bc9821~tplv-k3u1fbpfcp-zoom-1.image" data-width="800" data-height="600" />

初始化密码:

依据官方说明5.6以后版本,第一次启动时会在root目录下生产一个随机密码文件名.mysql_secret。

cat /root/.mysql_secret

![](data:;base64,<?xml version=)" alt="image.png" data-src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/65c0252782d3474bb324c402de59accd~tplv-k3u1fbpfcp-zoom-1.image" data-width="800" data-height="600" />

修改root密码:

/usr/local/mysql/bin/mysqladmin -u root -h localhost password '123456' -p

Enter password处输入输入.mysql_secret里第二行内容

![](data:;base64,<?xml version=)" alt="image.png" data-src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7f5893db568f40cc85964bc9e49dd531~tplv-k3u1fbpfcp-zoom-1.image" data-width="800" data-height="600" />

遇上-bash: mysql: command not found(未找到命令)的情况别着急,这个是因为/usr/local/bin目录下缺失mysql导致,只需要一下方法建立软链接,即可以解决

ln -s /usr/local/mysql/bin/mysql /usr/bin

![](data:;base64,<?xml version=)" alt="image.png" data-src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/22ab3a50fe94458a943fa84ae3e1d44b~tplv-k3u1fbpfcp-zoom-1.image" data-width="800" data-height="600" />

![](data:;base64,<?xml version=)" alt="image.png" data-src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f5a2c76b8ac94856bbea3f9f697548b0~tplv-k3u1fbpfcp-zoom-1.image" data-width="800" data-height="600" />

五,MySQL主从复制配置

下载MySQL安装包

Master服务器my.cnf增加配置:

#GTID:server_id=234 #服务器id,一般为IP末位gtid_mode=on #开启gtid模式enforce_gtid_consistency=on #强制gtid一致性,开启后对于特定create table不被支持 #binloglog_bin=/usr/local/mysql/binlogs/master-binloglog-slave-updates=1 binlog_format=row #强烈建议,其他格式可能造成数据不一致 #relay logskip_slave_start=1 Slave服务器my.cnf****增加配置:#GTID:gtid_mode=onenforce_gtid_consistency=onserver_id=235 #binloglog-bin=/usr/local/mysql/binlogs/slave-binloglog-slave-updates=1binlog_format=row #强烈建议,其他格式可能造成数据不一致 #relay logskip_slave_start=1read-only = ON #这项功能只对非管理员组以为的用户有效

在Master服务器上创建用于同步的账号:

create user 'cspmslave'@'192.168.1.%' identified by 'cspm-slave';

对账号进行Slave授权:

grant replication slave on . to cspmslave@'192.168.1.%';

image.png
image.png

从库连接主库

mysql> change master to master_host='192.168.1.234', master_port=3306, master_user='cspmslave', master_password='cspm-slave', master_auto_position=1;

mysql> start slave;

image.png
image.png

查看从服务器连接状态(下图所示,两个Yes表示连接成功):

mysql> show slave status \G;

image.png
image.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一,MySQL主从配置原理
    • 1. mysql支持的复制格式
      • 2. mysql主从复制作用
        • 3. mysql主从复制原理
        • 二,MySQL只从配置缺陷
        • 三,准备工作
        • 四,MySQL安装配置
        • 五,MySQL主从复制配置
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档