mysql如何设置主从数据库的同步

 更新时间:2023年10月26日 17:16:03   作者:ZNineSun  
这篇文章主要介绍了mysql如何设置主从数据库的同步问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1.业务场景

场景1:实现服务器负载均衡

若我们所有的业务代码存于一个服务器上,而这个服务器有的时候回宕机,导致业务停顿,造成影响。这个时候 就需要做高可用,在数据库的处理上如果两个mysql实现高可用,避免单点问题。

场景2:读写分离;master写,其他slave读,这种架构最大问题I/O压力集中在Master上;

场景3:通过复制实现数据的异地备份

可以定期的将数据从主服务器上复制到从服务器上,这无疑是先了数据的异地备份。在传统的备份体制下,是将数据备份在本地。此时备份 作业与数据库服务器运行在同一台设备上,当备份作业运行时就会影响到服务器的正常运行。有时候会明显的降低服务器的性能。同时,将备份数据存放在本地,也 不是很安全。如硬盘因为电压等原因被损坏或者服务器被失窃,此时由于备份文件仍然存放在硬盘上,数据库管理员无法使用备份文件来恢复数据。这显然会给企业 带来比较大的损失。

2.实现的目标

一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。

对于多级复制,数据库服务器即可充当主机,也可充当从机。

一句话表示就是,主数据库做什么,从数据库就跟着做什么。

3.原理

我们的主从复制基于Mysql Replication来进行实现

3.1 什么是Mysql Replication

Replication可以实现将数据从一台数据库服务器(master)复制到一台或多台数据库服务器(slave)

  • 默认情况下属于异步复制,无需维持长连接
  • 通过配置,可以复制所有的库或者几个库,甚至库中的一些表
  • 是MySQL内建的,本身自带的

3.2 Mysql Replication的原理

简单的说就是master将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制日志进行数据操作。

注意:

  • DML表示SQL操作语句如:update, insert,delete
  • Relay log :中继日志

整体上来说,复制有3个步骤:

(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events)

(2) slave将master的binary log events拷贝到它的中继日志(relay log)

(3) slave重做中继日志中的事件,修改salve上的数据。

3.3 My Replication的作用

  • Fail Over 故障切换
  • Backup Server 备份服务,无法对SQL语句执行产生的故障恢复,有限的备份
  • High Performance 高性能,可以多台slave,实现读写分离

3.4 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中的数据一致。

4.My Replication常见方案

One master and Muti salve 一主多备(MS)

一般用来做读写分离的,master写,其他slave读,这种架构最大问题I/O压力集中在Master上<多台同步影响IO>

M-S-S

使用一台slave作为中继,分担Master的压力,slave中继需要开启bin-log,并配置log-slave-updates

Slave中继可使用Black-hole存储引擎,不会把数据存储到磁盘,只记录二进制日志。

M-M 双主互备(互为主从)

每个服务器需要做同样的同步更新,破坏了事物的隔离性和数据的一致性。

M-M-M

监控三台机器互相作对方的master

天生的缺陷:复制延迟,slave上同步要慢于master,如果大并发的情况那延迟更严重。

mysql在5.6已经自身可以实现fail over故障切换

One slave Muti master 一从对多主

好处:节省成本,将多个master数据自动化整合

缺陷:对库和表数据的修改较多

5.实现

5.1 环境准备

本地安装两个mysql,或者使用虚拟机,或者使用docker安装,需要准备两个mysql,本文使用docker安装

在docker中先创建两个mysql服务器

主服务器:3308

从服务器:3309

不会创建?点击此处

5.2 修改 my.cnf配置文件

master的my.cnf配置文件

#mysql master1 config 
[mysqld]
server-id = 1        # 节点ID,确保唯一

# log config
log-bin = mysql-bin     #开启mysql的binlog日志功能
sync_binlog = 1         #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
binlog_format = mixed   #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 7                           #binlog过期清理时间
max_binlog_size = 100m                    #binlog每个日志文件大小
binlog_cache_size = 4m                        #binlog缓存大小
max_binlog_cache_size= 512m              #最大binlog缓存大
binlog-ignore-db=mysql #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行

auto-increment-offset = 1     # 自增值的偏移量
auto-increment-increment = 1  # 自增值的自增量
slave-skip-errors = all #跳过从库错误

slave1的my.cnf配置文件

[mysqld]
server-id = 2
log-bin=mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

6.进入master数据库,创建复制用户并授权

依次执行

CREATE USER repl_user IDENTIFIED BY 'root';
CREATE USER 'repl_user'@'172.17.0.1' IDENTIFIED BY 'root';
CREATE USER 'repl_user'@'192.168.1.2' IDENTIFIED BY 'root';

root表示该用户的用户密码

你只需要修改的是将 192.168.1.2改为你自己主机的ip地址即可

查看自己创建用户是否成功

SELECT User, Host FROM mysql.user;

6.1 赋予该用户复制的权利

依次执行

grant replication slave on *.* to 'repl_user'@'%';
grant replication slave on *.* to 'repl_user'@'172.17.0.1';
grant replication slave on *.* to 'repl_user'@'192.168.1.2';

FLUSH PRIVILEGES;

注意:我们接下来进行一个很重要的步骤,就是修改主库repl_user的plugin

依次执行以操作:

alter user 'repl_user'@'%' identified with mysql_native_password by 'root';
alter user 'repl_user'@'172.17.0.1' identified with mysql_native_password by 'root';
alter user 'repl_user'@'192.168.1.2' identified with mysql_native_password by 'root';

6.2 查看master的状态

show master status;

7.配置从库

登录进入从库的mysql服务内执行以下命令

CHANGE MASTER TO 
MASTER_HOST = 'localhost',  
MASTER_USER = 'repl_user', 
MASTER_PASSWORD = 'root',
MASTER_PORT = 3308,
MASTER_LOG_FILE='binlog.000002',
MASTER_LOG_POS=1374,
MASTER_RETRY_COUNT = 60,
MASTER_HEARTBEAT_PERIOD = 10000; 

注意你要修改以下内容:

7.1 启动从库slave进程

start slave;

附:停止从库进程:stop slave;

7.2 查看是否配置成功

show slave status\G

当这两个信息 都为yes时说明你配置成功啦。

8.测试主从同步

我用navicat连接到主库和从库

接下来我先在master中创建一个数据库test1

然后刷新salve

然后会发现salve中也会出现一个test1数据库

至此我们的主从同步就完全实现了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mysql使用简单教程(三)

    Mysql使用简单教程(三)

    这篇文章主要介绍了Mysql使用简单教程(三) 的相关资料,需要的朋友可以参考下
    2016-05-05
  • MySQL5.7.18主从复制搭建(一主一从)教程详解

    MySQL5.7.18主从复制搭建(一主一从)教程详解

    MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。这篇文章主要介绍了MySQL5.7.18主从复制搭建(一主一从)教程详解,需要的朋友可以参考下
    2017-08-08
  • MySQL系列之八 MySQL服务器变量

    MySQL系列之八 MySQL服务器变量

    其中有些参数支持运行时修改,会立即生效;有些参数不支持,且只能通过修改配置文件,并重启服务器程序生效;有些参数作用域是全局的,且不可改变;有些可以为每个用户提供单独(会话)的设置
    2021-07-07
  • mysql中取字符串中的数字的语句

    mysql中取字符串中的数字的语句

    在很多时间我们需要把字符串的数字给取出来,通常大家会用php,asp等这类来操作,本文章介绍了在sql中取字符中的数字办法,有需要的朋友可以参考一下
    2012-04-04
  • 如何设计高效合理的MySQL查询语句

    如何设计高效合理的MySQL查询语句

    合理的MySQL查询语句可以让我们的MySQL数据库效率更高,那么如何设计高效合理的查询语句就成为了摆在我们面前的问题。
    2015-08-08
  • Mysql5.7定时备份的实现

    Mysql5.7定时备份的实现

    这篇文章主要介绍了Mysql5.7定时备份的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MySQL使用的常见问题解决与应用技巧汇总

    MySQL使用的常见问题解决与应用技巧汇总

    这篇文章主要给大家总结介绍了我们平时在使用MySQL遇到的常见问题解决与应用技巧的相关资料,包括忘记MySQL的root密码、如何处理 myisam 存储引擎的表损坏、数据目录磁盘空间不足的问题等等问题,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-11-11
  • MySQL Buffer Pool如何提高页的访问速度

    MySQL Buffer Pool如何提高页的访问速度

    本文主要介绍了MySQL Buffer Pool如何提高页的访问速度,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Mysql数据表分区技术PARTITION浅析

    Mysql数据表分区技术PARTITION浅析

    这篇文章主要介绍了Mysql数据表分区技术PARTITION浅析,分别介绍了 Mysql 中的分区技术 RANGE、LIST、 HASH,需要的朋友可以参考下
    2014-06-06
  • MySQL 索引优化案例

    MySQL 索引优化案例

    这篇文章主要介绍了MySQL 索引优化案例,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-08-08

最新评论