广告
返回顶部
首页 > 资讯 > 数据库 >Mysql主从数据库搭建(一主两从)
  • 144
分享到

Mysql主从数据库搭建(一主两从)

数据库mysql服务器 2023-08-31 06:08:27 144人浏览 泡泡鱼
摘要

目录 1、服务器规划 2、主从同步流程 3、主从搭建 3.1、master节点上配置文件修改 3.2、master节点创建同步用户和权限 3.3、slave1和slave2节点配置文件修改 3.4、slave1和slave2节点执行同步任

目录

1、服务器规划

2、主从同步流程

3、主从搭建

3.1、master节点上配置文件修改

3.2、master节点创建同步用户和权限

3.3、slave1和slave2节点配置文件修改

3.4、slave1和slave2节点执行同步任务

3.5、解决虚拟机克隆导致mysql所有服务器uuid都一样的问题

4、bin-log相关说明

5、主从同步注意事项


1、服务器规划

服务器名称

规划

ip和端口

bigdata01

master

192.168.118.121:3306

bigdatamodel

slave01

192.168.118.120:3306

bigdata02

slave02

192.168.118.122:3306

2、主从同步流程

Mysql的主从复制中主要有三个线程

master(binlog dump thread)、slave(I/O thread 、sql thread),Master一条线程和Slave中的两条线程。

master(binlog dump thread)主要负责Master库中有数据更新的时候,会按照binlog格式,将更新的事件类型写入到主库的

binlog文件中。并且,Master会创建log dump线程通知Slave主库中存在数据更新,这就是为什么主库的binlog日志一定要开启的原因。

I/O thread线程在Slave中创建,该线程用于请求Master,Master会返回binlog的名称以及当前数据更新的位置、binlog文件位置的副本。

然后,将binlog保存在 「relay log(中继日志)」 中,中继日志也是记录数据更新的信息。

SQL线程也是在Slave中创建的,当Slave检测到中继日志有更新,就会将更新的内容同步到Slave数据库中,这样就保证了主从的数据的同步。

以上就是主从复制的过程,当然,主从复制的过程有不同的策略方式进行数据的同步,主要包含以下几种:

  • 「同步策略」:Master会等待所有的Slave都回应后才会提交,这个主从的同步的性能会严重的影响。
  • 「半同步策略」:Master至少会等待一个Slave回应后提交。
  • 「异步策略」:Master不用等待Slave回应就可以提交。
  • 「延迟策略」:Slave要落后于Master指定的时间。

3、主从搭建

3.1、master节点上配置文件修改

root@bigdata01 etc]# vim my.cnf[mysqld]server-id=1log-bin=mysql-bin#[可选] 0(默认)表示读写(主机),1表示只读(从机)read-only=0#设置日志文件保留的时长,单位是秒binlog_expire_logs_seconds=6000#控制单个二进制日志大小。此参数的最大和默认值是1GBmax_binlog_size=200M#[可选]设置不要复制的数据库binlog-ignore-db=infORMation_schema,mysql,quartz#[可选]设置需要复制的数据库,默认全部记录。比如:binlog-do-db=atguigu_master_slavebinlog-do-db=tokercart#[可选]设置binlog格式binlog_format=STATEMENT# 写缓存多少次,刷一次磁盘,默认 0 表示这个操作由操作系统根据自身负载自行决定多久写一次磁盘# 1 表示每一条事务提交都会立即写磁盘,n 则表示 n 个事务提交才会写磁盘sync_binlog=0#character confiGCharacter_set_server=utf8mb4explicit_defaults_for_timestamp=truedatadir=/var/lib/mysqlSocket=/var/lib/mysql/mysql.sock# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid# 每次commit 日志缓存中的数据刷到磁盘中。通常设置为 1,意味着在事务提交前日志已被写入磁盘, 事务可以运行更长以及服务崩溃后的修复能力innodb_flush_log_at_trx_commit=1

启动失败,查看日志找到原因,有个参数设置错误

[root@bigdata01 etc]# systemctl start mysqldJob for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.[root@bigdata01 etc]# cat /var/log/mysqld.log |grep ERROR2022-11-26T13:15:09.415695Z 0 [ERROR] unknown variable 'binlog_expire_logs_seconds=6000'2022-11-26T13:15:09.415711Z 0 [ERROR] Aborting

在mysql 8.0版本中新增了binlog_expire_logs_seconds,该参数表示binlog的失效日期单位秒。8.0之前的版本,binlog的失效日志用expire_logs_days来配置,单位是天

修改my.cnf后,#设置日志文件保留的天数 expire_logs_days=10 重启成功,分别查看当前serverid、是否开启bin-log以及master节点上所有的的日志名称和position

[root@bigdata01 etc]# systemctl start mysqld[root@bigdata01 etc]# mysql -uroot -p............................................................................................mysql> show global variables like '%server%';+---------------------------------+--------------------------------------+| Variable_name                   | Value    |+---------------------------------+--------------------------------------+| character_set_server            | utf8mb4  || collation_server                | utf8mb4_general_ci                   || innodb_ft_server_stopword_table |          || server_id                       | 1        || server_id_bits                  | 32       || server_uuid                     | 542516d8-1c3a-11ed-986c-000c290154b1 |+---------------------------------+--------------------------------------+6 rows in set (0.00 sec)mysql> show global variables like '%log_bin%';+---------------------------------+--------------------------------+| Variable_name                   | Value                          |+---------------------------------+--------------------------------+| log_bin                         | ON || log_bin_basename                | /var/lib/mysql/mysql-bin       || log_bin_index                   | /var/lib/mysql/mysql-bin.index || log_bin_trust_function_creators | OFF|| log_bin_use_v1_row_events       | OFF|+---------------------------------+--------------------------------+5 rows in set (0.01 sec)mysql> show master logs;+------------------+-----------+| Log_name         | File_size |+------------------+-----------+| mysql-bin.000001 |       177 || mysql-bin.000002 |       154 |+------------------+-----------+2 rows in set (0.00 sec)

3.2、master节点创建同步用户和权限

mysql> grant replication slave on . TO 'slave1'@'%' identified  by 'toker';ERROR 1819 (HY000): Your password does not satisfy the current policy requirementsmysql>grant replication slave on *.* TO 'slave1'@'%' identified  by 'Test#2021';Query OK, 0 rows affected, 1 warning (0.01 sec)mysql> show grants for 'slave1'@'%';+------------------------------------------------+| Grants for slave1@%|+------------------------------------------------+| GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%' |+------------------------------------------------+1 row in set (0.00 sec)

查看master节点日志最新状态和binlog名称

mysql> show master status;+------------------+----------+--------------+---------------------------------+-------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                | Executed_Gtid_Set |+------------------+----------+--------------+---------------------------------+-------------------+| mysql-bin.000002 |      591 | tokercart    | information_schema,mysql,quartz |                   |+------------------+----------+--------------+---------------------------------+-------------------+1 row in set (0.00 sec)

3.3、slave1和slave2节点配置文件修改

+------------------+----------+--------------+---------------------------------+-------------------+slave1节点my.cnf[mysqld]server-id=2relay-log=mysql-salve1-log+------------------+----------+--------------+---------------------------------+-------------------+slave2节点my.cnf[mysqld]server-id=3relay-log=mysql-salve2-log

3.4、slave1和slave2节点执行同步任务

命令如下:

CHANGE MASTER TO MASTER_HOST='192.168.118.121',MASTER_USER='slave1',MASTER_PASSWord='Test#2021',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=1313;

启动start slave; 如果启动碰到错误可以执行reset slave; #删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件,然后重新执行change命令和start slave即可.

mysql> CHANGE MASTER TO MASTER_HOST='192.168.118.121',MASTER_USER='slave1',MASTER_PASSWORD='Test#2021',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=1313;Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql> start  slave;Query OK, 0 rows affected (0.01 sec)mysql> show slave status\G;*************************** 1. row ***************************               Slave_IO_State:                   Master_Host: 192.168.118.121                  Master_User: slave1                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000002          Read_Master_Log_Pos: 1313               Relay_Log_File: mysql-salve2-log.000001                Relay_Log_Pos: 4        Relay_Master_Log_File: mysql-bin.000002           Slave_IO_Running: No            Slave_SQL_Running: Yes            .....................................         Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL Server UUIDs; these UUIDs must be different for replication to work.         .....................................

上述show slave status\G;查看同步状态的时候发现 Slave_IO_Running: No,仔细看下面错误有一条:

The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

  1. 首先我们通过配置文件排除了server-id一致性的问题,我配置的server-id=1,server-id=2,server-id=3,所以不是此处问题
  2. 查看server_uuid属性,发现几台机器的server_uuid确实一样。为什么呢?因为我们的几台服务器都是虚拟机克隆出来的
mysql> show variables like '%server_uuid%';+---------------+--------------------------------------+| Variable_name | Value    |+---------------+--------------------------------------+| server_uuid   | 542516d8-1c3a-11ed-986c-000c290154b1 |+---------------+--------------------------------------+1 row in set (0.00 sec)

3.5、解决虚拟机克隆导致mysql所有服务器uuid都一样的问题

解决方法就是找到主机和从机的auto.cnf文件修改uuid值或删除auto.cnf这个文件。但是通过,查询uuid值还是一样

后来发现/var/lib/mysql/auto.cnf还有一个auto.cnf文件

[root@bigdata02 etc]# cd /var/lib/mysql[root@bigdata02 mysql]# lsauto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  master.info  mysql                    mysql-salve2-log.index  mysql.sock.lock     private_key.pem  quartz          server-cert.pem  sysca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       mydb         mysql-salve2-log.000002  mysql.sock              performance_schema  public_key.pem   relay-log.info  server-key.pem[root@bigdata02 mysql]# vi auto.cnf [auto]server-uuid=542516d8-1c3a-11ed-986c-000c290154b1

删除掉从服务器的mysql下的auto.cnf,重启mysqld即可

[root@bigdata02 mysql]# rm -f auto.cnf [root@bigdata02 mysql]# systemctl restart mysqld[root@bigdata02 mysql]# vi auto.cnf [auto]server-uuid=8270d752-6d97-11ed-9c83-000c295a2050[root@bigdata02 mysql]# mysql -uroot -pmysql> show slave status\G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.118.121                  Master_User: slave1                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000002          Read_Master_Log_Pos: 1313               Relay_Log_File: mysql-salve2-log.000004                Relay_Log_Pos: 320        Relay_Master_Log_File: mysql-bin.000002             Slave_IO_Running: Yes            Slave_SQL_Running: Yes........................................................................

4、bin-log相关说明

根据 MySQL 官方文档的介绍,开启 binlog 之后,大概会有 1% 的性能损,binlog主要用作数据恢复和主从复制

MySQL 5.7.3以后版本必须配置server-id,否则无法启用MySQL二进制日志

binlog格式说明:MySQL默认采用的是STATEMENT,建议使用MIXED

binlog_format = MIXED

  • STATEMENT模式(SBR)

基于SQL语句的复制(statement-based replication),每一条会修改数据的sql语句都会记录到binlog中。

优点:

不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能

缺点:

某些情况会导致master-slave中的数据不一致,例如sleep(),last_insert_id()等

  • ROW模式(RBR)

基于行的复制(row-based replication),不记录每条sql语句的上下文信息,仅记录哪条数据被修改了,修改成什么样。

优点:

任何情况都可以复制,并且不会出现特定情况下存储过程、function等调用或者触发无法被正确复制的问题

缺点:

binlog日志文件会非常大

master上执行update语句时,所有变化都会写到binlog里面,SBR只会写一次,所以会导致频繁发生binlog的并发写问题

  • MIXED模式

上面两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

5、主从同步注意事项

  1. 搭建完主从,再去创建数据库(因为主从之前的数据库不在binlog里)
mysql> show slave status\G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.118.121                  Master_User: slave1                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000002          Read_Master_Log_Pos: 1830               Relay_Log_File: mysql-salve1-log.000002                Relay_Log_Pos: 320        Relay_Master_Log_File: mysql-bin.000002             Slave_IO_Running: Yes            Slave_SQL_Running: No              Replicate_Do_DB:           Replicate_Ignore_DB:            Replicate_Do_Table:        Replicate_Ignore_Table:       Replicate_Wild_Do_Table:   Replicate_Wild_Ignore_Table:                    Last_Errno: 1146          

解决办法:

先把库从线下手动拷贝过去,然后重启从节点的slave即可

mysql> stop slave;Query OK, 0 rows affected (0.00 sec)mysql> start slave;Query OK, 0 rows affected (0.01 sec)

来源地址:https://blog.csdn.net/weixin_52324111/article/details/128058857

您可能感兴趣的文档:

--结束END--

本文标题: Mysql主从数据库搭建(一主两从)

本文链接: https://www.lsjlt.com/news/384266.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql主从数据库搭建(一主两从)
    目录 1、服务器规划 2、主从同步流程 3、主从搭建 3.1、master节点上配置文件修改 3.2、master节点创建同步用户和权限 3.3、slave1和slave2节点配置文件修改 3.4、slave1和slave2节点执行同步任...
    99+
    2023-08-31
    数据库 mysql 服务器
  • mysql两主一从怎么搭建
    mysql两主一从的搭建示例代码:[root@localhost etc]# cat my.cnf# For advice on how to cha...
    99+
    2022-10-03
  • mysql搭建主从复制(一主一从,双主双从)
    主从复制原理 Mysql 中有一个binlog 二进制日志,这个日志会记录下所有修改了的SQL 语句,从服务器把主服务器上的binlog二进制日志在指定的位置开始复制主服务器所进行修改的语句到从服务器上执行一遍。 流程图 搭建一...
    99+
    2016-07-17
    mysql搭建主从复制(一主一从,双主双从)
  • Mysql 数据库 主从数据库 (主从)(主主)
    一、什么是主从数据库 主从数据库就是把数据库架构分为主数据库和从数据库。从数据库是主数据库的备份,以提高数据的安全性,不至于一个数据库崩掉而导致整个项目也运行不起来。可以有效的防止财产的损失。一般从库只做查询操作,而主库则做更改操作,也就是...
    99+
    2023-09-28
    数据库 mysql 服务器
  • MySQL(多主一从)搭建
    拓扑图:实验环境:(三台虚拟机)server1(master1-178)、server2(master2-179)、server3(slave-175)Master1:(178)安装软件yum instal...
    99+
    2022-10-18
  • Mysql 主从搭建
                             Mysql  主...
    99+
    2022-10-18
  • MYSQL主从库搭建(原创)
    MYSQL主从库搭建(原创) 一、 单主库配置1.1环境说明本节讲述的环境为一个主库,两个从库,具体环境如下。1.1.1Linux versionRed Hat ...
    99+
    2022-10-18
  • MySQL数据库的主从配置(多主对一从)
    一、实验环境部署主服务器 192.168.18.42 端口3306  ==》 从服务器 192.168.18.44 端口 3306    主服务器...
    99+
    2022-10-18
  • 【Mysql】Mariadb多主一从的搭建
    背景:       目前MySQL依然只支持一个Slave从一个Master复制数据,虽然也可以做到一主多备(M->S),双主复制(M<...
    99+
    2022-10-18
  • mysql5.7搭建主从库
    #MYSQL单节点的mysql远远不能满于生成,以防止生产服务器宕机,磁盘空间溢满等种种原因,需要有一个备用数据库, 这时候主从库是不错的选择,在是数据库集群中也起到了很大的作用 #MySQL 主从复制概念: MySQL 主从复制是指数据可...
    99+
    2015-09-14
    mysql5.7搭建主从库
  • MySQL主从搭建(多主一从)的实现思路与步骤
    背景: 由于最近公司项目好像有点受不住并发压力了,优化迫在眉睫。由于当前系统是单数据库系统原因,能优化的地方也尽力优化了但是数据库瓶颈还是严重限制了项目的并发能力。所以就考虑了添加数据库来增大项目并发能力。 思路:...
    99+
    2022-05-24
    mysql主从搭建教程 mysql 主从配置 数据库主从搭建
  • Mysql主从复制搭建
    1.mysql主库会把所有的写操作记录在binlog日志中,并且生成log dump线程,将binlog日志传给从库的I/O线程,从库生成两个线程,一个是I/O线程,另外一个是SQL线程。 主将更改操作记录到binlog里从将主的binlo...
    99+
    2020-09-28
    Mysql主从复制搭建
  • MYSQL主从环境搭建
    服务器:192.168.11.131 master192.168.11.132 slave服务器系统# cat /etc/redhat-release CentOS Linux release 7...
    99+
    2022-10-18
  • mysql主从搭建切换
    环境: 172.30.249.156 percona5.6.27 主机名:tr-mysql 跑着生产环境的应用的虚拟机 192.168.129.153 percona5...
    99+
    2022-10-18
  • MYSQL怎么搭建主从
    本篇内容主要讲解“MYSQL怎么搭建主从”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MYSQL怎么搭建主从”吧!1,在虚拟机上新建三个虚拟机,分别是vm4 &...
    99+
    2022-10-18
  • mysql主主和主从的搭建方法
    这篇文章主要介绍“mysql主主和主从的搭建方法”,在日常操作中,相信很多人在mysql主主和主从的搭建方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql主主和主从...
    99+
    2022-10-18
  • MySQL5.7.18主从复制搭建一主一从的示例分析
    这篇文章主要介绍了MySQL5.7.18主从复制搭建一主一从的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、复制原理主服务器将更...
    99+
    2022-10-18
  • Linux下搭建MySQL的主从复制(一)
    一从一主模式的搭建1.主从复制原理 1. 从服务器使用IO Thread向主服务器发送请求   2. 主服务器接受到请求之后,将二进制日志文件通过...
    99+
    2022-10-18
  • docker中Mylsq的主从搭建(超详细)一主多从
    1. 安装docker 这里可以参考菜鸟教程的CentOS安装docker , https://www.runoob.com/docker/centos-docker-install.html 2. Docker中使用挂载模式安装mys...
    99+
    2019-10-01
    docker中Mylsq的主从搭建(超详细)一主多从
  • Docker搭建Mysql主从复制
    Docker搭建Mysql主从复制 前言 相信我,看完这一篇,mysql主从复制能遇到的错误在我这里都遇到了,docker能遇到的错误在我这里也遇到了,包括centos的错误,看吧,都是成长 do...
    99+
    2023-09-24
    docker mysql 容器 Linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作