mysql数据库主主复制,mysql主从复制保证数据一致性
本文内容列表:
- 1、如何在Windows主机上设置mysql主从复制
- 2、MySQL的主从复制原理及流程
- 3、如何配置MySQL数据库主从复制
- 4、MySQL主从,5分钟就能掌握
- 5、安全最重要! MySQL配置主从复制、主主复制
- 6、mysql主从复制的概念是什么?它的用途是什么?最好举个例子。
如何在windows主机上设置mysql主从复制
1。首先,在本地创建两个mysql服务(参见这里)并指定不同的端口。我这里有一个主站(3306)和一个从站(3307)。
2。然后更改主配置文件:
[mysqld]
server-id = 1
binlog-do-db=test #要同步的数据库
#binlog-ignore-db= minsql ,如果是 binlog指定了-do- db,应该不需要指定
log-bin=mysql-bin #要生成的二进制日志文件的名称
从配置文件更改:
[mysqld]
服务器 ID = 2
log-bin = mysql-bin
replicate-do-db=test
3。将用户repl添加到主库并指定复制权限
创建由'asdf'标识的用户'repl'@'127.0.0.1';
GIVE REPLICATION SLAVE ON *.* TO 'repl'@'127.0。 0.1'; -- --这里我指定数据库(test.*)会报错,但是指定整个库(*.*)就会成功。
4。保持主从mysql测试数据库初始状态一致。
一般先给所有表加读锁,然后将数据库文件夹复制到磁盘。我只是在这里停止服务并将数据文件复制到那里。
5。在master数据库中运行show master status;记下与文件和位置字段对应的参数。
mysql显示master状态;
+----------------+------------+------------- ------ - --------+
|文件|位置 | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------+ ---------+---------------- +--- ------------------+
| mysql -bin.000001 | 107 | 107测试| |
+------------------------+--------+------------ - --+ ------------------+
1 行一组(0.00 秒)
6。放到从库的master中:
mysql alter master to master_host='127.0.0.1',master_port=3306,master_user='repl',master_password='asdf',master_log_file='mysql-bin.0000001',= 107;
查询正常,0行受影响(0.19秒)
这里的Master_log_file和master_log_pos对应的是现在show master status中注册的参数。
7。在从库中启用数据库复制功能。
slavestart;
mysql Slavestart;
查询OK,0行受影响(0.00秒)
通过显示从库状态可以看到从库中的一些参数。
8。此时您可以在主库中创建表或插入数据,很快就会在从库中可见。 ? 1 行受影响(0.13 秒)
-- 来自数据库
mysql 显示表;
+----------------+
| Tables_in_test |
+-------- -+
| tianyc_01 |
| tiyanc_02 |
+----------------+
集合中的 2 行(0.00 秒)
mysql select * from tiyanc_02;
+- -- ---+
| b |
+------+
| 2013 |
+------+
1 行集合(0.00 秒)
以同样的方式可以构建第二个和第三个从节点。
参考:
注意:两个服务的serve_id必须不同,否则开启复制功能时会提示错误信息
mysql从库启动;
ERROR 1200 (HY000):服务器未配置为从机;在配置文件中修复或者用CHANGE MASTER TO
MySQL的主从复制原理和流程
原理:Master将数据库变化写入二进制日志,Slave同步这些二进制日志,并根据这些二进制日志进行数据回放操作,实现数据异步同步。流程: 1、slave端的IO线程向master端的binlog dump线程发送请求。 2、master端的binlog dump线程检索二进制日志信息(文件名和位置信息)并将其发送到slave端的IO线程。 3、从机端IO线程获取到的内容是有序的。写入slave端的relay log,并记下bin-log文件名和master.info中master端的位置。 4、当Slave端的SQL线程检测到中继日志的内容有更新时,就会分析中继日志更新的内容,而这就是执行这些操作以达到与Master一致的原理和过程数据。如果你在工作中遇到这个问题,希望对你有帮助。如果还是不明白,可以在网上搜索更多这方面的知识。我拥有所有这些知识。我在黑马程序员社区看到的。你也可以去看看有没有你想了解的。
如何配置MySQL数据库主从复制
MySQL 支持单向异步复制。在复制过程中,一台服务器充当主服务器,一台或多台其他服务器充当从服务器。主服务器将更新写入二进制日志文件并维护日志文件的索引以跟踪日志轮转。当从站连接到主站时,它会通知主站从站在日志中读取的最后一次成功更新的位置。从服务器接收此后发生的所有更新,然后阻塞并等待主服务器通知下一次更新。
为什么要使用主从复制?
1。主服务器/从服务器设置增加了鲁棒性。当主服务器出现问题时,可以切换到从服务器作为备份。
2。通过在主服务器和从服务器之间分担处理客户请求的负载,可以获得更好的客户响应时间。但不要同时在主服务器和从服务器上更新,因为这可能会导致冲突。
3。使用复制的另一个优点是可以使用从服务器执行备份,而不会干扰主服务器。主服务器可以在备份过程中继续处理更新。
MySQL 使用 3 个线程来执行复制功能(1 个在主服务器上,2 个在从服务器上)。当发出 START SLAVE 时,从服务器创建一个 I/O 线程来连接到主服务器,并允许主服务器发送二进制日志 主服务器创建一个线程,发送从服务器二进制日志中的内容 从服务器 I/O 线程读取主服务器 Binlog Dump 线程发送的内容,并将数据复制到从服务器本地文件中数据目录,即中继日志,第三个线程是SQL线程,从服务器通过该线程读取中继日志,并执行日志中的更新,SHOW PROCESSLIST语句可以查询发生在的复制信息主服务器和从服务器。信息。
默认中继日志使用格式为 hostname-relay-bin.nnnnnn 的文件名,其中 hostname 是从服务器的主机名,nnnnnn 是序列号。使用连续序列编号来创建连续的中继日志文件,从000001开始。从服务器跟踪中继日志索引文件以识别正在使用的中继日志。默认中继日志索引文件名为 hostname-relay-bin.index。默认情况下,这些文件是在从服务器的数据目录中创建的。 .中继日志与二进制日志格式相同,可以用mysql读取。当SQL线程执行完中继日志中的所有事件后,中继日志将自动被删除。
从服务器的数据目录中创建两个附加状态文件 - master.info 和 relay-log.info。状态文件存储在硬盘上,从服务器关闭时不会丢失。从服务器下次启动时,会读取这些文件来确定主服务器读取了多少二进制日志,以及自己的中继日志处理得如何。
设置主从复制:
1。确保主从服务器安装的MySQL版本相同,最好是最新稳定版本的MySQL。
2。在主复制服务器上设置连接帐户。该帐户必须被授予 REPLICATION SLAVE 权限。如果该账户仅用于复制(推荐),则无需授予其他权限。
mysql GRANT REPLICATION SLAVE ON *.*
- TO 'replication'@'%.yourdomene.com' IDENTIFIED BY ‘奴隶通行证’;
3。执行 FLUSH TABLES WITH READ LOCK 语句刷新所有表并阻止写入语句:
mysql 用读锁刷新表;
保持mysql客户端程序不退出。打开另一个终端来拍摄主服务器数据目录的快照。
shell cd /usr/local/mysql/
shell tar -cvf /tmp/mysql-snapshot.tar ./data
如果从服务器的用户帐号与主服务器不同,则可以不想复制mysql-数据库。在这种情况下,数据库应从存档中排除。您也不需要在存档中包含任何日志文件或 master.info 或 relay-log.info 文件。
当FLUSH TABLES WITH READ LOCK设置的读锁有效时(即mysql客户端程序没有终止),读取主服务器上当前的二进制日志名和偏移值:
mysql SHOW MASTERSTATUS ;
+----- -------------------------- -------------- -----+
|文件 |位置 | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------+----- -----+--------------+-- - ---------------+
| mysql-bin.003 | 73 | 73测试|手册,mysql |
+------------------------+--------------------+---------------- ---+ ------------------+
File 列显示日志名称,Position 显示偏移量。在本例中,二进制日志值为 mysql-bin.003,偏移量为 73。记录该值。稍后在设置从服务器时将需要这些值。它们代表从属服务器应从主服务器开始新更新的复制坐标。
如果主服务器运行时未启用--logs-bin,则SHOW MASTER STATUS显示的日志名称和位置值将为空。在这种情况下,以后指定日志文件和从服务器位置时必须使用的值是空字符串('')和4。
拍快照并记录日志名称和偏移量,返回到之前的中间调重新启用写入活动:
mysql UNLOCK TABLES;
4. 确保主服务器主机上 my.cnf 文件的 [mysqld] 部分包含 log-bin 选项。此部分还应该有一个 server-id=Master_id 选项,其中 master_id 必须是 1 到 232–1 之间的正整数值。例如:
[mysqld]
log-bin
server-id=1
如果未提供这些选项,您应该添加它们并重新启动服务器。
5。停止从服务器上的 mysqld 服务,并在 my.cnf 文件中添加以下行:
[mysqld]
server-id=2
Slave_id 值必须与 Master_id 值相同。是 1 到 232–1 之间的正整数值。另外,从服务器的ID必须与主服务器的ID不同。
6。备份目录中的数据。确保这些文件和目录的权限正确。服务器 MySQL 运行的用户必须能够读写文件,就像在主服务器上一样。
Shell-chown -R mysql:mysql /usr/local/mysql/data
7.启动从服务器。在从服务器上执行以下语句,将选项值替换为您系统的实际值:
mysql CHANGE MASTER TO
- MASTER_HOST='master_host_name',
- MASTER_USER= 'replication_user_name ',
- MASTER_PASSWORD='复制密码',
- MASTER_LOG_FILE='recorded_log_file_name',
- MASTER_LOG_POS=recorded_log_position;8.启动从服务器线程:
mysql START SLAVE;
运行这些程序后,从服务器应连接到主服务器并补充自快照以来发生的任何更新。
9。如果发生复制错误,从服务器的错误日志(HOSTNAME.err)中也会出现错误信息。
10. 从服务器复制时,会在数据目录中找到文件master.info和HOSTNAME-relay-log.info。从站使用这两个文件来跟踪主站的二进制日志已处理了多少。除非您确切知道自己在做什么并完全理解它们的含义,否则请勿删除或编辑这些文件。但是,最好使用 CHANGE MASTER TO 语句。

MySQL主从,带你5分钟掌握它
MySQL Master 和 Slave 一直是面试的常客。虽然里面的知识点都是基础的,但是能够全部答对的学生并不多。
比如楼哥之前面试小米的时候,被问到主从复制的原理以及主从延迟的解决方案。由于他的回答非常好,给面试官留下了很好的印象。之前面试中遇到过哪些MySQL主从问题?
所谓MySQL主从必须建立两个相同的数据库,一个是主库,一个是从库。主库提供远程读写操作,从库提供远程读操作。下面是主从。模式:
对于单机数据库部署,在4核8G机器上运行MySQL 5.7时,大概可以支持500 TPS和10000 QPS。当遇到一些活动和突发的查询流量时,就需要主从分离。 。
大多数系统的访问模型是多读少写。读写请求的差异可以达到几个数量级,因此我们可以使用一主多从。主库只负责一些核心逻辑的编写和查询。 ,多个从库只负责查询,提高查询性能,减轻主库压力。
MySQL主从也能实现服务高可用性。当主库宕机时,可以将从库切入主库,保证服务的高可用性。那么主数据库还可以在灾难恢复时进行数据备份。
整体场景总结如下:
MySQL 的主从复制依赖于 binlog,这意味着对 MySQL 的所有更改都会以二进制形式记录并存储在磁盘上的二进制日志文件中。
主从复制是将binlog中的数据从主库转移到从库。通常这个过程是异步的,即对主数据库的操作不会等待binlog同步完成。
详细流程如下:
主备库数据同步突然中断怎么办?因为主库和从库之间维护着一条长链接,所以主库内部有一个线程专门为从库的这条长链接服务。
对于以下情况,如果主库运行以下SQL,其中a和create_time都是索引:
我们知道,如果数据选择a索引和create_time索引,最终超出limit 1的数据一般是不同的。
所以会是这样的情况:在binlog=语句格式下,主库执行这条SQL时使用索引a,从库执行这条SQL时使用索引create_time。最后是主图书馆。数据不一致。
那我们该如何解决呢?
您可以将 binlog 格式更改为行。 binlog的登录行格式不记录原始SQL文本,而是记录两个事件:Table_map和Delete_rows。
Table_map 事件描述要服务的表。 delete_rows事件用于定义删除行为并记录删除的具体行数。 binlog以行格式记录要删除的主键ID信息,因此不会出现主从不一致的问题。
但是如果SQL删除10万行数据,使用行格式会占用很大的空间。所有10万条数据都在binlog中,写binlog也是非常IO密集的。但语句格式输入会导致数据不一致。
设计MySQL的大叔想出了一个折中的方案。binlog的混合格式实际上是行和声明格式的混合。当MySQL判断数据可能不一致时,使用行格式,否则使用语句格式。
有时候,当我们遇到无法从数据库中检索信息的奇怪问题时,我们会纠结代码中是否存在删除之前写入的内容的逻辑,但过一段时间你会发现,尝试一下Again 查询时可以再次读取数据。这主要是主从延迟造成的。
主从延时其实就是“从库播放”完成时间与“主库写入binlog”完成时间的差异,会导致从库查询到的数据与从库的数据不一致主库。
当我们谈论MySQL数据库的主从同步延迟原理时,我们必须从MySQL的主从复制原理开始:
总结一下主从延迟的主要原因:主从延迟主要发生在“中继日志回放”这一步。当主库的TPS并发度较高,生成的DDL数量超过从库一个SQL线程可以承载的范围时,就会出现延迟,当然也可能会出现大查询语句导致的锁等待来自奴隶图书馆。
我们通常使用从库的延迟时间作为监控和报警的关键数据库指标。正常时间是毫秒级别的。当延迟时间达到二级时,需要报警。
除了缩短主从延迟时间之外,还有其他方法可以解决这个问题。基本原则是尽量不查询从库。
具体解决方案如下:
在实际应用场景中,对于一些非常核心的场景,比如库存、支付订单等,需要直接查询从库。对于其他非核心场景,不需要查询主库。
有两台机器A、B,A为主数据库,负责读写,B为从数据库,负责读取数据。
如果A库出现故障,B库成为主库负责读写。错误修复后,A成为从库,主库B将数据同步到从库A。
一主多从库。 A为主库,负责读写。 B、C、D是从库,负责读取数据。
如果A库出现故障,B库成为主库负责读写,C、D负责读取。错误修复后,A也成为从库,主库B同步数据到从库A。
安全最重要! MySQL配置主从复制、主主复制
为了保证数据的安全稳定,我们通常会实现数据库的主从复制、主主复制。主从复制是从从机实时复制主机数据。当主机的数据改变时,从机的数据也会随之改变。当从机数据改变时,主机数据保持不变。同样,主主复制:在多台主机之间,只要一台主机的数据发生变化,其他主机的数据也会随之变化。
添加以下内容
如果你是用我之前的方法启动MySQL的,那么你只需要到关联主机的配置文件夹中创建一个my.cnf并编写上面的类即可。如果能找到座位就太好了。
比如:我的启动命令如下(不应该换行,所以为了简单我把它进行了分支)
然后我只需要在/docker/mysql_master/目录下创建my.cnf文件即可很好。
该命令必须在容器中执行
Docker重启mysql会关闭容器,我们需要重启容器。
确保主服务器上的skip_networking 选项为OFF(关闭),这是默认值。如果启用,从站无法与主站通信并且复制失败。 ?如下:
从服务器的线程启动了
测试一下,可以在主服务器中创建一个数据库,发现在从服务器中也可用,就成功了。
如果您还想要一个从服务器,只需按照上面的配置再配置一个从服务器即可。新的从服务器会自动将之前的数据保存到主服务器上。 (测试结果)如果你已经完成了上面的主从复制,那么这个主主复制将会非常容易。我们也将上面的从服务器改为主服务器
1)将上面的从服务器的my.cnf文件更改为与主服务器相同(注意服务器ID不能相同),然后重启服务器 2)在从服务器上用同样的命令在服务器上创建一个复制用户(这里把用户名改为repl2) 3)在之前的主服务器中运行以下代码
上面主要教你如何搭建MySQL cluster,但是这里还有很多其他问题。这也是我在学习过程中思考的一个问题。有的朋友可能一上来看到这么长的文章就受不了了。他们只是想实现这样一个连续的聚类功能,所以我写了下面的问题。
1)MySQL的复制和pxc MySQL的集群解决方案包括复制和pxc。以上是基于复制实现的。
复制:异步复制,速度快,但无法保证数据一致性。 pxc:同步复制,速度低,多个集群之间数据一致性强。
2)MySQL复制数据同步原理。我们在配置时启用了它的二进制日志,每次使用数据库时都会更新到这个日志。 Master和Slave通过同步这条日志来保证数据的一致性。
3)所有数据不能同步吗?您可以配置要同步哪些数据库甚至哪些表。
4) 如何关闭和开始同步
5)根据我的理解,我画了主从图、主从图、主主图和副本图。
之前推荐:
使用Docker仅需1分钟安装MySQL服务
Linux下MySQL 5.7的离线和在线安装(图文)
Linux下安装MySQL 8.0(最爱!) mysql主从复制的概念是什么?它的用途是什么?最好举个例子。
主从复制用于建立与主库一模一样的数据库环境,称为从库;主数据库一般是实时业务数据库
MySQL是瑞典MySQL AB公司开发的关系型数据库管理系统,目前是Oracle的产品。 MySQL 是最流行的关系数据库管理系统。当谈到WEB应用程序时,MySQL是最好的RDBMS(关系数据库管理系统)应用程序之一。
MySQL 是一个关系数据库管理系统。关系数据库将数据存储在不同的表中,而不是将所有数据放在一个大仓库中,这提高了速度和灵活性。
相比其他主流数据库如Oracle、DB2、SQL Server等,MySQL有其自身的缺点,但这丝毫没有降低它的受欢迎程度。
对于一般个人用户和中小企业来说,MySQL提供的功能绰绰有余,而且由于MySQL是开源软件,因此可以显着降低总体拥有成本。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
