Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mysql主从同步

mysql主从同步

作者头像
互联网老辛
发布于 2018-10-18 10:01:44
发布于 2018-10-18 10:01:44
4.1K0
举报
文章被收录于专栏:互联网老辛互联网老辛

非常感谢大家昨晚来到我们的公开课课堂,一起探讨了关于数据库的架构,最后详细探讨学习了mysql主从同步的搭建过程。

今天分享一下昨晚的mysql数据库主从搭建的课堂笔记,让更多的人因为这次课程受益,另外我们每隔一段时间都会有相应的互动课程,大家可以前往https://ke.qq.com/course/254420#tuin=b66303d9 腾讯课堂链接报名参加。

以下是本次课程的课堂笔记,主题聊聊数据库架构那些事

首先分享了同方,从14年到17年的数据库架构,接下来是关于数据库主从的搭建

原理图如下:

mysql主从复制中:

第一步:master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。 第二步:slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经执行完master产生的所有文件,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。 第三步:SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重新执行其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。 此外,在master中也有一个工作线程和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

详细过程:

模式: C/S 模式

端口:

3306

x-63 主mysql服务器配置

创建要同步的数据库:

mysql> create database bawei;

mysql> use bawei;

mysql> create table test1 (id int);

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| bawei |

| mysql |

| test |

停止

#service mysqld stop

编辑

#vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0 #在原配置文件中,添加以下内容:

log-bin=mysqllog #启用二进制日志,默认存在/var/lib/mysql 下面

server-id=1 #本机数据库ID 标示。其中master_id必须为1到232之间的一个正整数值

binlog-do-db=bawei #可以被从服务器复制的库。二进制需要同步的数据库名

# binlog-ignore-db=bawei2 不可以被从服务器复制的库

重新启动

#service mysqld restart

授权

mysql> grant replication slave on *.* to slave@192.168.1.64 identified by "123456";

查看状态,信息

mysql> show master status;

+-----------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-----------------+----------+--------------+------------------+

| mysqllog.000001 | 242 | bawei | |

+-----------------+----------+--------------+------------------+

1 row in set (0.00 sec)

查看二进制日志位置:

[root@x-63 ~]# ls /var/lib/mysql/

ibdata1 ib_logfile1 mysql mysqllog.index passwd

ib_logfile0 bawei mysqllog.000001 mysql.sock test

mysql>show binlog events \G

复制前保证两个数据库数据一致:

mysqldump -u root -p123456 -A >all.sql

Enter password:

-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

把数据传给从:

scp all.sql 192.168.1.64:/root

配置从服务器:

mysql从服务器: x-64

[root@x-64 opt]# yum install mysql-server -y

[root@x-64 opt]# service mysqld start

mysql>show variables like '%version%';查看版本

+-------------------------+---------------------+

| Variable_name | Value |

+-------------------------+---------------------+

| protocol_version | 10 |

| version | 5.1.52 |

| version_comment | Source distribution |

| version_compile_machine | x86_64 |

| version_compile_os | redhat-linux-gnu |

+-------------------------+---------------------+

5 rows in set (0.03 sec)

测试连接到主服务器是否成功

[root@x-64 opt]# mysql -u slave -h 192.168.1.63 -p123456

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| test |

+--------------------+

看不到bawei数据库

导入数据库,和主服务器保持一致

[root@x-64 ~]# mysql -u root -p < all.sql

从服务器没必要开bin-log日志注。

修改从服务器配置文件:

[root@x-64 ~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

#在配置文件中写入以下内容

server-id=2 #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例。

master-host=192.168.1.63 #指定主服务器IP地址

master-user=slave #制定在主服务器上可以进行同步的用户名

master-password=123456 #密码

####以下可以不写

master-port = 3306 #同步所用的端口

master-connect-retry=60 #断点重新连接时间

保存,重启

#service mysqld restart

如果只做为备库,就只设置server-ID, 如果他也作为一个分发主库,开启bin-log和中继日志

测试:

主服务器上查看:

mysql> show master status;

ERROR 2006 (HY000): MySQL server has gone away

No connection. Trying to reconnect...

Connection id: 2

Current database: bawei1

+-----------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-----------------+----------+--------------+------------------+

| mysqllog.000004 | 106 | bawei1 | |

+-----------------+----------+--------------+------------------+

从服务器上查看:

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.63

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqllog.000001

Read_Master_Log_Pos: 315

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 459

Relay_Master_Log_File: mysqllog.000001

Slave_IO_Running: Yes #可以看到这两个Yes,说明从服务器安装成功。

Slave_SQL_Running: Yes

Slave_IO_Running :一个负责与主机的io通信

Slave_SQL_Running:负责自己的slave mysql进程

mysql> START SLAVE

测试:数据同步

x-63写数据:

mysql> use bawei;

Database changed

mysql> show tables;

+--------------+

| Tables_in_bawei |

+--------------+

| test1 |

+--------------+

1 row in set (0.00 sec)

mysql> insert into test1 values(1);

x-64读数据:

mysql> use bawei;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from test1;

+------+

| id |

+------+

| 1 |

+------+

到现在为止mysql主从同步就搭建完成了,因为篇幅限制,后面会出现的问题解决方案暂时就不在这里阐述了,如果有兴趣的可以到公开课上一起探讨。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据架构师专家 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊Mysql主从同步读写分离配置实现
Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享。最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我讲实际操作步骤整理分享处理,希望对在学习路上的你有所以帮助,当然如果是你是老鸟,写的不好的地方,多多包涵。废话不多说,言归正传,直入主题。
小小许
2020/07/16
7220
Mariadb数据库主从复制原理&实践技术文档
主服务器和从服务器可以位于不同的网络拓扑中,还能对整台服务器、特定的数据库,甚至特定的表进行复制。
TCS-F
2019/01/08
2.5K0
Mariadb数据库主从复制原理&实践技术文档
Mysql主从同步(1)-主从/主主环境部署梳理
Mysql复制概念说明 Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从
洗尽了浮华
2018/01/22
2.5K0
Mysql主从同步(1)-主从/主主环境部署梳理
MySQL主从复制
编写复杂的SQL语句一开始让我觉得很困难,当你熟悉了类似Java等的面向对象编程语言,要适应面向集合的SQL语言,还是需要一段时间的。不过作为一名数据工程师,不熟悉SQL,实在说不过去。我们就以互联网最常用的MySQL数据库为例,一起探索SQL的奥秘。本文主要讲解MySQL主从复制原理和搭建过程。
soundhearer
2020/10/15
1.6K0
MySQL主从复制
基于 CentOS Mysql 5.7.19 安装与主从同步配置详解
1.如果主服务器出现问题,可以快速切换到从服务器提供的服务 2.可以在从服务器上执行查询操作,降低主服务器的访问压力 3.可以在从服务器上执行备份,以避免备份期间影响主服务器的服务
Javen
2018/08/21
8130
基于 CentOS Mysql 5.7.19 安装与主从同步配置详解
听说Mysql你很豪横?-------------MySQL5.7主从同步
在企业网站中,后端MySQL数据库只有一台时,会有以下问题: 遇到单点故障,服务不可用 无法处理大量的并发数据请求 数据丢失将会造成很大损失
不吃小白菜
2020/09/03
4470
听说Mysql你很豪横?-------------MySQL5.7主从同步
MySQL 主从同步
主从复制的根本原理是从 master 服务器上面的数据,通过一定的方式同步到 slave 服务器上面。基本过程如下图:
付威
2021/01/28
5.3K0
MySQL 主从同步
docker学习系列12 轻松实现 mysql 主从同步
docker的一大好处是在本地可以很方便快速的搭建负载均衡,主从同步等需要多主机的环境。 可以说是极大方便了运维成本和难度。 本节在本地搭建mysql的一主一从的集群环境。
mafeifan
2018/09/10
8330
docker学习系列12 轻松实现 mysql 主从同步
MYSQL主从同步(DBA)配置.md
Q:为啥要引入主从同步机制? A:防止业务数据库突然宕掉,不能快速的恢复业务正常运行,有利于数据库架构的健壮性,提升访问速度,方便运维保证的数据物理安全(容灾备份);
全栈工程师修炼指南
2022/09/28
1K0
MYSQL主从同步(DBA)配置.md
Mysql主从复制
Mysql主从复制也可以称为Mysql主从同步,它是构建数据库高可用集群架构的基础。它通过将一台主机的数据复制到其他一台或者多台主机上,并重新应用日志(realy log)中的SQL语句来实现复制功能。Mysql支持单向,双向,链式级联,异步复制,复制过程中一台服务器充当主库(master),而一个或者多个服务器充当从库(slave)
mikelLam
2022/10/31
1.4K0
MySQL数据库实现主从复制
我们用的在这篇文章《在CentOS上使用Nginx和Tomcat搭建高可用高并发网站》使用的只有一个MySQL数据库。
夜雨飘零
2020/05/06
2.8K0
MySQL主从复制
首先这主机和从机上安装MySQL,大家可以安装mariadb,更简单一点儿,安装命令如下:
贪挽懒月
2021/06/21
1.2K0
MySQL主从复制
mysql主从同步配置读写分离_mysql8做主从数据库
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器来处理如此多的数据库连接操作,数据库必然会崩溃,特别是数据丢失的话,后果更是不堪设想。这时候,我们会考虑如何减少数据库的连接,下面就进入我们今天的主题。
全栈程序员站长
2022/11/03
2.4K0
mysql主从同步配置读写分离_mysql8做主从数据库
Mysql通过MHA实现高可用
MHA服务有两种角色, MHA Manager(管理节点)和MHA Node(数据节点)
iginkgo18
2020/09/27
1.1K0
Mysql通过MHA实现高可用
mysql主从复制
由于我这里使用docker搭建,所以需要把配置文件和数据文件映射到宿主机,让容器运行时挂载数据
earthchen
2020/09/24
1K0
MySQL主从复制配置
Mysql中有一种日志叫做bin日志(二进制日志)。这个日志会记录下所有修改了数据库的SQL语句(INSERT,UPDATE,DELETE,ALTER TABLE,GRANT等等)。
Java帮帮
2018/12/24
4820
MySQL主从复制与相关问题解决方法
所有的关系型数据库都存在一个通病性能差,在企业中如果用户量特别打,将所有的数据都存放在一台服务器上,其性能时远远达不到要求的。所以需要使用一些手段来解决其性能的问题。 提升性能的方式有向上扩展以及向外扩展 向上扩展(Scale Up):使用更新更好的硬件,但硬件在怎么更新也有其性能的极限。盲目的向上扩展无法结局根本的问题 向外扩展(Scale Out):就是使用多台机器分摊压力来提供服务
星哥玩云
2022/08/18
8890
关于Linux下MySql集群(主从/一主多从/主从从)同步部署的一些笔记
对于构建基于MySQL的大规模、高性能应用来讲,需要使用水平扩展(集群)的数据库架构方式。在MySQL内建的复制功能可以实现,通过为服务器配置一个或多个备库的方式来进行数据同步。
山河已无恙
2023/01/30
2.1K0
关于Linux下MySql集群(主从/一主多从/主从从)同步部署的一些笔记
Docker安装 Mysql主从同步
uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。
鱼找水需要时间
2023/02/16
1.4K0
Docker安装 Mysql主从同步
CentOS 7搭建部署MySQL主从复制
1、做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
用户5766185
2019/07/08
2.7K0
CentOS 7搭建部署MySQL主从复制
相关推荐
聊聊Mysql主从同步读写分离配置实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档