配置MySQL主从复制

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 主服务器数据库的每次操作都会记录在二进制日志文件mysql-bin.xxx(保存文件位置可自行配置) 中。从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并将文件内容写入到自己本地的中继日志relay-log文件中。

MySQL主从复制原理

MySQL 的主从复制并不是数据库磁盘上的文件直接拷贝,也不是直接使用某个编程语言脚本将主服务器数据取出,然后写入到从服务器。 主服务器数据库的每次操作都会记录在二进制日志文件mysql-bin.xxx(保存文件位置可自行配置) 中。从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并将文件内容写入到自己本地的中继日志relay-log文件中。然后从服务器的SQL线程会根据中继日志中的内容执行SQL语句。
image

准备工作

  • 作为操作演示,我直接用VM安装了两台Centos7虚拟主机(在此多一下嘴,大家应该学会使用最廉价、方便的方式去学习和实践,因为VM可以让你肆意捣鼓),为了提供工作效率,我在主机windows上使用Xshell连接两个虚拟机(具体如何连接的,请阅读上一篇文章《在window7主机上连接虚拟机上的Centos系统》)。
  • 关闭两台虚拟机的防火墙:
systemctl stop firewalld
  • 主库 192.168.232.129:3306、从库 192.168.232.128:3306。其中,主库上比从库上多了一个test数据库,因此,此次演示将使用test作为操作对象。
  • 在MySQL主从复制开始工作之前,我们需要让主从库的数据库(test)达到相同状态。因此需要依次做如下操作:
    备份主库的test
mysql -uroot -p
use test;
flush tables with read lock; #将test数据库的表锁上,防止在配置期间有新的改动
mysqldump -uroot -p  test > /root/Desktop/test.sql  #导出位置自行设置
unlock tables; #备份完成后解锁数据库表

导入从库

mysql -uroot -p
create database test;
use test;
source /root/test.sql  #从主库导出的备份文件

配置主数据库

  • 建立用于同步的账号 rep,这个账号是用于代替从库访问主库相关权限的角色,你可以简单地理解为快递员:
grant replication slave on *.* to 'rep'@'192.168.232.129' identified by '123456';
flush privileges;
  • 编辑配置文件my.cnf,在[mysqld]配置段里增加以下几行:
server-id = 1 #值为1~2^32-1 区间内
log-bin=mysql-bin  #操作记录存储的二进制日志文件
log-err=log-err    #错误日志文件
binlog_format=STATEMENT
binlog-ignore-db=mysql  #忽略主库对mysql数据库的操作
binlog-do-db=test   #只复制test数据

image

检查效果:

show master status;

image

配置从数据库

  • 编辑配置文件my.cnf,在[mysqld]配置段里增加以下几行:
server-id = 2  #值为1~2^32-1 区间内,但一定不能和主库的值相
relay-log = mysql-relay  #将主服务器的二进制日志读取过来记录到此处,也可使用默认设置

image

重启mysql服务:

service mysql restart
  • 修改从库的master info:
change master to 
    MASTER_HOST='192.168.232.129',   #主库的host
    MASTER_PORT=3306,                #主库的port
    MASTER_USER='rep',               #在主库创建的那个“快递员”
    MASTER_PASSWORD='123456',        
    MASTER_LOG_FILE='mysql-bin.000019',  #主库show master status中显示的
    MASTER_LOG_POS=154;    #主库show master status中显示的

cat /path/data/master.info 可以看到以下信息:
image
启动slave:

start slave;

查看slave状态:

show slave status;

得到如下结果:
image

说明配置成功了。

测试主从同步

尝试在主库对test进行增、删、改、查等操作,通过对主库的

show master status\G

和从库的

show slave status\G

可以发现,从库的Read_Master_Log_Pos 会随着主库的Position 变化而变化(或者直接进行数据库表的数据对比),说明了从库已经和主库进行了同步操作。

扩展

  • 如果想让主从的所有库表都进行同步,那么可以将主库的配置去掉以下两项:
binlog-ignore-db=mysql  #忽略主库对mysql数据库的操作
binlog-do-db=test   #只复制test数据
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
SQL canal 运维
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
|
2天前
|
运维 负载均衡 关系型数据库
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
|
4天前
|
关系型数据库 MySQL 数据库
MySQL集群 双主架构(配置命令)
MySQL集群 双主架构(配置命令)
|
9天前
|
SQL 关系型数据库 MySQL
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
|
9天前
|
关系型数据库 MySQL Linux
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
|
10天前
|
设计模式 容灾 关系型数据库
MySQL 主从复制架构
MySQL 主从复制架构
|
10天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks集成实例绑定到同一个vpc下面,也添加了RDS的IP白名单报错:数据源配置有误,请检查,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
26 0
|
10天前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 20.04 + mysql8 安装以及配置大小写不敏感
Ubuntu 20.04 + mysql8 安装以及配置大小写不敏感
|
11天前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之在DataWorks中配置RDS MySQL数据源的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
26 0
|
2天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
11 0